Completed
Pull Request — develop (#18)
by
unknown
26:13
created

RequestCounterListener   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Test Coverage

Coverage 96.67%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 17
eloc 40
c 1
b 0
f 0
dl 0
loc 80
ccs 29
cts 30
cp 0.9667
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A onKernelRequest() 0 19 6
A onKernelTerminate() 0 15 5
A onKernelRequestPre() 0 14 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Artprima\PrometheusMetricsBundle\EventListener;
6
7
use Artprima\PrometheusMetricsBundle\Metrics\MetricsGeneratorRegistry;
8
use Psr\Log\LoggerAwareInterface;
9
use Psr\Log\LoggerAwareTrait;
10
use Symfony\Component\HttpKernel\Event\RequestEvent;
11
use Symfony\Component\HttpKernel\Event\TerminateEvent;
12
13
/**
14
 * Class RequestCounterListener.
15
 */
16
class RequestCounterListener implements LoggerAwareInterface
17
{
18
    use LoggerAwareTrait;
19
20
    /**
21
     * @var MetricsGeneratorRegistry
22
     */
23
    private $metricsGenerators;
24
25
    /**
26
     * @var array
27
     */
28
    private $ignoredRoutes;
29
30 30
    public function __construct(MetricsGeneratorRegistry $metricsGenerators, array $ignoredRoutes = ['prometheus_bundle_prometheus'])
31
    {
32 30
        $this->metricsGenerators = $metricsGenerators;
33 30
        $this->ignoredRoutes = $ignoredRoutes;
34 30
    }
35
36 21
    public function onKernelRequestPre(RequestEvent $event): void
37
    {
38 21
        if (!$event->isMasterRequest()) {
39 3
            return;
40
        }
41
42 18
        foreach ($this->metricsGenerators->getMetricsGenerators() as $generator) {
43 18
            try {
44 3
                $generator->collectStart($event);
45
            } catch (\Exception $e) {
46
                if ($this->logger) {
47 15
                    $this->logger->error(
48
                        $e->getMessage(),
49 15
                        ['from' => 'request_collector', 'class' => get_class($generator)]
50 6
                    );
51 6
                }
52 3
            }
53 3
        }
54 7
    }
55
56
    public function onKernelRequest(RequestEvent $event): void
57
    {
58
        if (!$event->isMasterRequest()) {
59 15
            return;
60
        }
61 15
62
        $requestRoute = $event->getRequest()->attributes->get('_route');
63 15
        if (in_array($requestRoute, $this->ignoredRoutes, true)) {
64 15
            return;
65
        }
66
67
        foreach ($this->metricsGenerators->getMetricsGenerators() as $generator) {
68 15
            try {
69
                $generator->collectRequest($event);
70 15
            } catch (\Exception $e) {
71 6
                if ($this->logger) {
72 6
                    $this->logger->error(
73 3
                        $e->getMessage(),
74 3
                        ['from' => 'request_collector', 'class' => get_class($generator)]
75 7
                    );
76
                }
77
            }
78
        }
79
    }
80 15
81
    public function onKernelTerminate(TerminateEvent $event): void
82
    {
83
        $requestRoute = $event->getRequest()->attributes->get('_route');
84
        if (in_array($requestRoute, $this->ignoredRoutes, true)) {
85
            return;
86
        }
87
88
        foreach ($this->metricsGenerators->getMetricsGenerators() as $generator) {
89
            try {
90
                $generator->collectResponse($event);
91
            } catch (\Exception $e) {
92
                if ($this->logger) {
93
                    $this->logger->error(
94
                        $e->getMessage(),
95
                        ['from' => 'response_collector', 'class' => get_class($generator)]
96
                    );
97
                }
98
            }
99
        }
100
    }
101
}
102