totalCount ); // Exceptions by class foreach ($metrics->byClass as $class => $count) { $sanitizedClass = $this->sanitizeMetricName($class); $lines[] = sprintf( 'exception_by_class{exception_class="%s"} %d', $sanitizedClass, $count ); } // Exceptions by component foreach ($metrics->byComponent as $component => $count) { $sanitizedComponent = $this->sanitizeMetricName($component); $lines[] = sprintf( 'exception_by_component{component="%s"} %d', $sanitizedComponent, $count ); } // Average execution time $lines[] = sprintf( 'exception_average_execution_time_ms %.2f', $metrics->averageExecutionTimeMs ); return implode("\n", $lines); } /** * Sanitize metric name for Prometheus */ private function sanitizeMetricName(string $name): string { // Replace invalid characters $sanitized = preg_replace('/[^a-zA-Z0-9_:]/', '_', $name); return $sanitized; } }