From 178741590e7f21aa6165054cf0754e9cd3767b02 Mon Sep 17 00:00:00 2001 From: Amirhossein Khalili Date: Sat, 19 Sep 2026 21:30:21 +0330 Subject: [PATCH] fix(observability): preserve event names and escape metric labels --- app/common/logging.py | 3 ++- app/worker/metrics.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/common/logging.py b/app/common/logging.py index 24227e9..efcfefc 100644 --- a/app/common/logging.py +++ b/app/common/logging.py @@ -25,7 +25,8 @@ class StructuredJsonFormatter(logging.Formatter): "level": record.levelname, "service": getattr(record, "service", self.service_name), "raw_id": getattr(record, "raw_id", None), - "event": record.getMessage(), + "event": getattr(record, "event", record.getMessage()), + "message": record.getMessage(), } # Include exception info if present diff --git a/app/worker/metrics.py b/app/worker/metrics.py index 84db66c..7cd3a02 100644 --- a/app/worker/metrics.py +++ b/app/worker/metrics.py @@ -3,6 +3,10 @@ from collections import defaultdict from typing import Any, Dict, List, Optional +def escape_label(value: str) -> str: + return value.replace(chr(92), chr(92)*2).replace('"', chr(92)+'"').replace(chr(10), chr(92)+'n') + + class SimpleHistogram: """ Lightweight, thread-safe Prometheus-compatible histogram. @@ -136,13 +140,13 @@ class WorkerMetrics: lines.append("# TYPE cdr_processed_total counter") with self._lock: for (svc, rat), count in self._processed_total.items(): - lines.append(f'cdr_processed_total{{service_type="{svc}",radio_access_type="{rat}"}} {count}') + lines.append(f'cdr_processed_total{{service_type="{escape_label(svc)}",radio_access_type="{escape_label(rat)}"}} {count}') # 2. cdr_dlq_total lines.append("# HELP cdr_dlq_total Total CDRs routed to DLQ by reason") lines.append("# TYPE cdr_dlq_total counter") for reason, count in self._dlq_total.items(): - lines.append(f'cdr_dlq_total{{reason="{reason}"}} {count}') + lines.append(f'cdr_dlq_total{{reason="{escape_label(reason)}"}} {count}') # 3. Gauges lines.append("# HELP cdr_in_flight_buffer_size Current in-memory buffer size")