Files
harkon b324ff09ef
Some checks failed
CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
CI/CD Pipeline / Policy Validation (push) Has been cancelled
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-firm-connectors) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-forms) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-hmrc) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ingestion) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-normalize-map) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ocr) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-indexer) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-reason) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rpa) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (ui-review) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (ui-review) (push) Has been cancelled
CI/CD Pipeline / Generate SBOM (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Notifications (push) Has been cancelled
Initial commit
2025-10-11 08:41:36 +01:00

65 lines
2.1 KiB
Python

"""Complete observability setup orchestration."""
from typing import Any
from .logging import configure_logging
from .opentelemetry_setup import init_opentelemetry
from .prometheus import get_business_metrics, init_prometheus_metrics
def setup_observability(
settings_or_app: Any,
service_name: str | None = None,
service_version: str = "1.0.0",
log_level: str = "INFO",
otlp_endpoint: str | None = None,
) -> dict[str, Any]:
"""Setup complete observability stack for a service"""
# Handle both settings object and individual parameters
if hasattr(settings_or_app, "service_name"):
# Called with settings object
settings = settings_or_app
service_name = settings.service_name
service_version = getattr(settings, "service_version", "1.0.0")
log_level = getattr(settings, "log_level", "INFO")
otlp_endpoint = getattr(settings, "otel_exporter_endpoint", None)
app = None
else:
# Called with app object
app = settings_or_app
if not service_name:
raise ValueError("service_name is required when passing app object")
# Configure logging
configure_logging(service_name or "unknown", log_level)
# Initialize OpenTelemetry
tracer, meter = init_opentelemetry(
service_name or "unknown", service_version, otlp_endpoint
)
# Get business metrics
business_metrics = get_business_metrics(service_name or "unknown")
# If app is provided, set up Prometheus and add to app state
if app:
# Initialize Prometheus metrics
instrumentator = init_prometheus_metrics(app, service_name or "unknown")
# Add to app state
app.state.tracer = tracer
app.state.meter = meter
app.state.metrics = business_metrics
app.state.instrumentator = instrumentator
return {
"tracer": tracer,
"meter": meter,
"metrics": business_metrics,
"instrumentator": instrumentator,
}
# Just return the observability components
return {"tracer": tracer, "meter": meter, "metrics": business_metrics}