Enable Discovery debug logging for production troubleshooting

- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
This commit is contained in:
2025-08-11 20:13:26 +02:00
parent 59fd3dd3b1
commit 55a330b223
3683 changed files with 2956207 additions and 16948 deletions

View File

@@ -0,0 +1,130 @@
<?php
declare(strict_types=1);
use App\Framework\Metrics\Formatters\JsonFormatter;
use App\Framework\Metrics\Formatters\OpenMetricsFormatter;
use App\Framework\Metrics\Formatters\PrometheusFormatter;
use App\Framework\Metrics\Formatters\StatsDFormatter;
use App\Framework\Metrics\MetricsCollection;
it('formats metrics in Prometheus format', function () {
$collection = new MetricsCollection();
$collection->counter('http_requests_total', 1234, 'Total HTTP requests', ['method' => 'GET', 'status' => '200']);
$collection->gauge('memory_usage_bytes', 67108864, 'Memory usage in bytes');
$formatter = new PrometheusFormatter();
$output = $formatter->format($collection);
expect($output)->toContain('# HELP http_requests_total Total HTTP requests');
expect($output)->toContain('# TYPE http_requests_total counter');
expect($output)->toContain('http_requests_total{method="GET",status="200"} 1234');
expect($output)->toContain('# HELP memory_usage_bytes Memory usage in bytes');
expect($output)->toContain('# TYPE memory_usage_bytes gauge');
expect($output)->toContain('memory_usage_bytes 67108864');
});
it('formats metrics in OpenMetrics format', function () {
$collection = new MetricsCollection();
$collection->counter('http_requests_total', 1234, 'Total HTTP requests', ['method' => 'GET']);
$formatter = new OpenMetricsFormatter();
$output = $formatter->format($collection);
expect($output)->toContain('# HELP http_requests_total Total HTTP requests');
expect($output)->toContain('# TYPE http_requests_total counter');
expect($output)->toContain('http_requests_total{method="GET"} 1234');
expect($output)->toContain('# EOF');
});
it('formats metrics in JSON format', function () {
$collection = new MetricsCollection();
$collection->counter('requests', 100, 'Request count', ['endpoint' => '/api']);
$formatter = new JsonFormatter();
$output = $formatter->format($collection);
$data = json_decode($output, true);
expect($data)->toHaveKey('timestamp');
expect($data)->toHaveKey('metrics');
expect($data['metrics'])->toHaveCount(1);
expect($data['metrics'][0])->toMatchArray([
'name' => 'requests',
'value' => 100,
'type' => 'counter',
'help' => 'Request count',
'labels' => ['endpoint' => '/api'],
]);
});
it('formats metrics in StatsD format', function () {
$collection = new MetricsCollection();
$collection->counter('api.requests', 42);
$collection->gauge('memory.usage', 1024.5, null, ['host' => 'server1']);
$formatter = new StatsDFormatter();
$output = $formatter->format($collection);
$lines = explode("\n", $output);
expect($lines)->toContain('api.requests:42|c');
expect($lines)->toContain('memory.usage:1024.5|g|#host:server1');
});
it('handles histogram metrics correctly', function () {
$collection = new MetricsCollection();
$collection->histogram(
'http_request_duration',
[
'0.1' => 100,
'0.5' => 200,
'1.0' => 250,
'+Inf' => 300,
],
150.5,
300,
'HTTP request duration in seconds'
);
$formatter = new PrometheusFormatter();
$output = $formatter->format($collection);
expect($output)->toContain('# TYPE http_request_duration histogram');
expect($output)->toContain('http_request_duration_bucket{le="0.1"} 100');
expect($output)->toContain('http_request_duration_bucket{le="0.5"} 200');
expect($output)->toContain('http_request_duration_bucket{le="1.0"} 250');
expect($output)->toContain('http_request_duration_bucket{le="+Inf"} 300');
expect($output)->toContain('http_request_duration_sum 150.5');
expect($output)->toContain('http_request_duration_count 300');
});
it('escapes special characters in labels', function () {
$collection = new MetricsCollection();
$collection->counter('test', 1, null, [
'path' => '/api/test"quotes"',
'description' => "Line\nbreak",
]);
$formatter = new PrometheusFormatter();
$output = $formatter->format($collection);
expect($output)->toContain('path="/api/test\\"quotes\\""');
expect($output)->toContain('description="Line\\nbreak"');
});
it('converts metrics collection to array', function () {
$collection = new MetricsCollection();
$collection->counter('test', 42, 'Test metric', ['env' => 'prod']);
$array = $collection->toArray();
expect($array)->toHaveKey('timestamp');
expect($array)->toHaveKey('metrics');
expect($array['metrics'])->toHaveCount(1);
expect($array['metrics'][0])->toMatchArray([
'name' => 'test',
'value' => 42,
'type' => 'counter',
'help' => 'Test metric',
'labels' => ['env' => 'prod'],
]);
});