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

MeasureMiddlewareCollector::collect()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 21
ccs 0
cts 14
cp 0
rs 9.584
c 0
b 0
f 0
cc 3
nc 3
nop 0
crap 12
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