REFACTOR - Database logic
This commit is contained in:
@@ -100,6 +100,27 @@ class MetricsCollector:
|
||||
self._histograms[name] = histogram
|
||||
logger.info(f"Registered histogram: {name} for {self.service_name}")
|
||||
return histogram
|
||||
except ValueError as e:
|
||||
if "Duplicated timeseries" in str(e):
|
||||
# Metric already exists in global registry, try to find it
|
||||
from prometheus_client import REGISTRY
|
||||
metric_name = f"{self.service_name.replace('-', '_')}_{name}"
|
||||
for collector in REGISTRY._collector_to_names.keys():
|
||||
if hasattr(collector, '_name') and collector._name == metric_name:
|
||||
self._histograms[name] = collector
|
||||
logger.warning(f"Reusing existing histogram: {name} for {self.service_name}")
|
||||
return collector
|
||||
# If we can't find it, create a new name with suffix
|
||||
import time
|
||||
suffix = str(int(time.time() * 1000))[-6:] # Last 6 digits of timestamp
|
||||
histogram = Histogram(f"{self.service_name.replace('-', '_')}_{name}_{suffix}",
|
||||
documentation, labelnames=labels, buckets=buckets)
|
||||
self._histograms[name] = histogram
|
||||
logger.warning(f"Created histogram with suffix: {name}_{suffix} for {self.service_name}")
|
||||
return histogram
|
||||
else:
|
||||
logger.error(f"Failed to register histogram {name} for {self.service_name}: {e}")
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to register histogram {name} for {self.service_name}: {e}")
|
||||
raise
|
||||
@@ -295,3 +316,14 @@ def setup_metrics_early(app, service_name: str = None) -> MetricsCollector:
|
||||
logger.info(f"Metrics setup completed for service: {service_name}")
|
||||
return metrics_collector
|
||||
|
||||
|
||||
# Additional helper function for endpoint tracking
|
||||
def track_endpoint_metrics(endpoint_name: str = None, service_name: str = None):
|
||||
"""Decorator for tracking endpoint metrics"""
|
||||
def decorator(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
# For now, just pass through - metrics are handled by middleware
|
||||
return func(*args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
Reference in New Issue
Block a user