Skip to content

Commit 7f6ab17

Browse files
committed
ctor injection AppMetrics
1 parent 66572cb commit 7f6ab17

File tree

6 files changed

+17
-36
lines changed

6 files changed

+17
-36
lines changed

DependencyInjection/Compiler/MetricInfoResolverCompilerPass.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function process(ContainerBuilder $container): void
3232
}
3333

3434
foreach ($taggedServices as $id => $tags) {
35-
$definition->addMethodCall('setMetricInfoResolver', [new Reference($id)]);
35+
$definition->addArgument(new Reference($id));
3636
}
3737
}
3838
}

Metrics/AppMetrics.php

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,7 @@ class AppMetrics implements PreRequestMetricsCollectorInterface, RequestMetricsC
2323

2424
private float $startedAt = 0;
2525

26-
private ?MetricInfoResolverInterface $metricInfoResolver = null;
27-
private ?LabelResolver $labelResolver = null;
28-
29-
public function setMetricInfoResolver(MetricInfoResolverInterface $metricInfoResolver): void
30-
{
31-
$this->metricInfoResolver = $metricInfoResolver;
32-
}
33-
34-
public function setLabelResolver(LabelResolver $labelResolver): void
35-
{
36-
$this->labelResolver = $labelResolver;
26+
public function __construct(private readonly LabelResolver $labelResolver, private readonly ?MetricInfoResolverInterface $metricInfoResolver = null) {
3727
}
3828

3929
public function collectRequest(RequestEvent $event): void

Resources/config/services.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@
3535
</service>
3636

3737
<service id="Artprima\PrometheusMetricsBundle\Metrics\AppMetrics" class="Artprima\PrometheusMetricsBundle\Metrics\AppMetrics" public="false" autowire="false" autoconfigure="false">
38+
<argument type="service" id="Artprima\PrometheusMetricsBundle\Metrics\LabelResolver" />
3839
<tag name="prometheus_metrics_bundle.metrics_collector" />
3940
<tag name="prometheus_metrics_bundle.default_metrics" />
40-
<call method="setLabelResolver">
41-
<argument type="service" id="Artprima\PrometheusMetricsBundle\Metrics\LabelResolver" />
42-
</call>
4341
</service>
4442

4543
<service id="Artprima\PrometheusMetricsBundle\Metrics\MetricsCollectorRegistry" class="Artprima\PrometheusMetricsBundle\Metrics\MetricsCollectorRegistry" public="false" autowire="false" autoconfigure="false">

Tests/Metrics/AppMetricsTest.php

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ public function setUp(): void
3636

3737
public function testCollectRequest(): void
3838
{
39-
$metrics = new AppMetrics();
39+
$metrics = new AppMetrics($this->labelResolver);
4040
$metrics->init($this->namespace, $this->collectionRegistry);
41-
$metrics->setLabelResolver($this->labelResolver);
4241

4342
$request = new Request([], [], ['_route' => 'test_route'], [], [], ['REQUEST_METHOD' => 'GET']);
4443
$evt = $this->createMock(RequestEvent::class);
@@ -56,9 +55,8 @@ public function testCollectRequest(): void
5655

5756
public function testCollectRequestOptionsMethod(): void
5857
{
59-
$metrics = new AppMetrics();
58+
$metrics = new AppMetrics($this->labelResolver);
6059
$metrics->init($this->namespace, $this->collectionRegistry);
61-
$metrics->setLabelResolver($this->labelResolver);
6260

6361
$request = new Request([], [], ['_route' => 'test_route'], [], [], ['REQUEST_METHOD' => 'OPTIONS']);
6462
$evt = $this->createMock(RequestEvent::class);
@@ -92,9 +90,8 @@ public static function provideMetricsName(): array
9290
*/
9391
public function testCollectResponse(int $code, string $metricsName): void
9492
{
95-
$metrics = new AppMetrics();
93+
$metrics = new AppMetrics($this->labelResolver);
9694
$metrics->init($this->namespace, $this->collectionRegistry);
97-
$metrics->setLabelResolver($this->labelResolver);
9895

9996
$request = new Request([], [], ['_route' => 'test_route'], [], [], ['REQUEST_METHOD' => 'GET']);
10097
$response = new Response('', $code);
@@ -116,9 +113,8 @@ public function testSetRequestDuration(): void
116113
{
117114
self::registerMicrotimeMock('Artprima\PrometheusMetricsBundle\Metrics');
118115

119-
$metrics = new AppMetrics();
116+
$metrics = new AppMetrics($this->labelResolver);
120117
$metrics->init($this->namespace, $this->collectionRegistry);
121-
$metrics->setLabelResolver($this->labelResolver);
122118

123119
$request = new Request([], [], ['_route' => 'test_route'], [], [], ['REQUEST_METHOD' => 'GET']);
124120
$reqEvt = $this->createMock(RequestEvent::class);
@@ -159,10 +155,8 @@ public function testSetRequestDuration(): void
159155

160156
public function testUseMetricInfoResolver(): void
161157
{
162-
$metrics = new AppMetrics();
158+
$metrics = new AppMetrics($this->labelResolver, new DummyMetricInfoResolver());
163159
$metrics->init($this->namespace, $this->collectionRegistry);
164-
$metrics->setLabelResolver($this->labelResolver);
165-
$metrics->setMetricInfoResolver(new DummyMetricInfoResolver());
166160

167161
$request = new Request([], [], ['_route' => 'test_route'], [], [], ['REQUEST_METHOD' => 'GET', 'REQUEST_URI' => 'https://example.com/test?query=1']);
168162
$reqEvt = $this->createMock(RequestEvent::class);
@@ -186,14 +180,13 @@ public function testUseMetricInfoResolver(): void
186180

187181
public function testUseMetricInfoResolverWithLabels(): void
188182
{
189-
$metrics = new AppMetrics();
190-
$metrics->init($this->namespace, $this->collectionRegistry);
191-
$metrics->setMetricInfoResolver(new DummyMetricInfoResolver());
192183
$labels = [
193184
new LabelConfig('color', LabelConfig::REQUEST_ATTRIBUTE, 'color'),
194185
new LabelConfig('client_name', LabelConfig::REQUEST_HEADER, 'X-Client-Name'),
195186
];
196-
$metrics->setLabelResolver(new LabelResolver($labels));
187+
188+
$metrics = new AppMetrics(new LabelResolver($labels), new DummyMetricInfoResolver());
189+
$metrics->init($this->namespace, $this->collectionRegistry);
197190

198191
$request = new Request([], [], ['_route' => 'test_route'], [], [], ['REQUEST_METHOD' => 'GET', 'REQUEST_URI' => 'https://example.com/test?query=1']);
199192

Tests/Metrics/RendererTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Tests\Artprima\PrometheusMetricsBundle\Metrics;
66

77
use Artprima\PrometheusMetricsBundle\Metrics\AppMetrics;
8+
use Artprima\PrometheusMetricsBundle\Metrics\LabelResolver;
89
use Artprima\PrometheusMetricsBundle\Metrics\Renderer;
910
use PHPUnit\Framework\TestCase;
1011
use Prometheus\CollectorRegistry;
@@ -29,7 +30,7 @@ public function testRender(): void
2930
->willReturn([
3031
new MetricFamilySamples(self::$samples),
3132
]);
32-
$metrics = new AppMetrics();
33+
$metrics = new AppMetrics(new LabelResolver());
3334
$metrics->init('test_ns', $collectionRegistry);
3435
$renderer = new Renderer($collectionRegistry);
3536
$response = $renderer->render();
@@ -45,7 +46,7 @@ public function testRenderResponse(): void
4546
->willReturn([
4647
new MetricFamilySamples(self::$samples),
4748
]);
48-
$metrics = new AppMetrics();
49+
$metrics = new AppMetrics(new LabelResolver());
4950
$metrics->init('test_ns', $collectionRegistry);
5051
$renderer = new Renderer($collectionRegistry);
5152
$response = $renderer->renderResponse();

demo/test-metrics.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,12 @@
2121
$registry = new CollectorRegistry($storage);
2222
$renderer = new Renderer($registry, 'symfony');
2323

24+
$labelResolver = new LabelResolver([]);
25+
2426
// Initialize AppMetrics
25-
$appMetrics = new AppMetrics();
27+
$appMetrics = new AppMetrics($labelResolver);
2628
$appMetrics->init('symfony', $registry);
2729

28-
$labelResolver = new LabelResolver([]);
29-
$appMetrics->setLabelResolver($labelResolver);
30-
3130
echo "✅ Metrics system initialized\n";
3231

3332
// Simulate some requests

0 commit comments

Comments
 (0)