"""Observability config is defined here.""" from dataclasses import dataclass, field from typing import Literal LoggingLevel = Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] @dataclass class ExporterConfig: endpoint: str level: LoggingLevel = "INFO" tls_insecure: bool = False @dataclass class FileLogger: filename: str level: LoggingLevel @dataclass class LoggingConfig: root_logger_level: LoggingLevel = "INFO" stderr_level: LoggingLevel | None = None exporter: ExporterConfig | None = None files: list[FileLogger] = field(default_factory=list) def __post_init__(self): if len(self.files) > 0 and isinstance(self.files[0], dict): self.files = [FileLogger(**f) for f in self.files] @dataclass class PrometheusConfig: host: str port: int @dataclass class JaegerConfig: endpoint: str @dataclass class ObservabilityConfig: logging: LoggingConfig prometheus: PrometheusConfig | None = None jaeger: JaegerConfig | None = None