Source code for structum_lab.monitoring
# src/structum_lab/monitoring/__init__.py
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: 2025 PythonWoods
"""Monitoring subsystem for Structum Framework.
Provides a pluggable metrics interface following the same pattern as logging.
Core provides the interface, plugins provide implementations (Prometheus, etc).
"""
from .interfaces import MetricsInterface, NoOpMetrics
# Global metrics instance (can be patched by plugins)
_metrics_instance: MetricsInterface = NoOpMetrics()
[docs]
def get_metrics(namespace: str = "structum") -> MetricsInterface:
"""Get metrics emitter for a namespace.
Args:
namespace: Metric namespace prefix (e.g., 'structum.config')
Returns:
MetricsInterface instance (NoOp by default, or patched by plugin)
Example:
>>> metrics = get_metrics("structum.config")
>>> metrics.increment("operations.total", tags={"operation": "get"})
"""
# For now, return the global instance
# Plugins can patch _metrics_instance
return _metrics_instance
[docs]
def set_metrics_backend(backend: MetricsInterface) -> None:
"""Set the global metrics backend.
This is called by monitoring plugins (e.g., structum_observability)
to inject their implementation.
Args:
backend: MetricsInterface implementation
"""
global _metrics_instance
_metrics_instance = backend
__all__ = [
"MetricsInterface",
"NoOpMetrics",
"get_metrics",
"set_metrics_backend",
]