Completed
Push — master ( 1c8c00...882636 )
by Cees-Jan
01:21
created

MeasureMiddlewareCollector   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 2
dl 0
loc 39
ccs 0
cts 22
cp 0
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 4 1
A collect() 0 21 3
A cancel() 0 4 1
1
<?php declare(strict_types=1);
2
3
namespace WyriHaximus\React\Http\Middleware;
4
5
use Rx\ObservableInterface;
6
use WyriHaximus\React\Inspector\CollectorInterface;
7
use WyriHaximus\React\Inspector\Metric;
8
use function ApiClients\Tools\Rx\observableFromArray;
9
10
final class MeasureMiddlewareCollector implements CollectorInterface
11
{
12
    /**
13
     * @var MeasureMiddleware[]
14
     */
15
    private $middlewares = [];
16
17
    public function register(string $key, MeasureMiddleware $middleware)
18
    {
19
        $this->middlewares[$key] = $middleware;
20
    }
21
22
    public function collect(): ObservableInterface
23
    {
24
        $metrics = [];
25
26
        /**
27
         * @var string            $key
28
         * @var MeasureMiddleware $middleware
29
         */
30
        foreach ($this->middlewares as $key => $middleware) {
31
            /** @var Metric $metric */
32
            foreach ($middleware->collect()->toArray() as $metric) {
33
                $metrics[] = new Metric(
34
                    $key . '.' . $metric->getKey(),
35
                    $metric->getValue(),
36
                    $metric->getTime()
37
                );
38
            }
39
        }
40
41
        return observableFromArray($metrics);
42
    }
43
44
    public function cancel(): void
45
    {
46
        $this->middlewares = [];
47
    }
48
}
49