spectator/registry.py (76 lines of code) (raw):

import logging from typing import Optional from spectator.config import Config from spectator.meter.age_gauge import AgeGauge from spectator.meter.counter import Counter from spectator.meter.dist_summary import DistributionSummary from spectator.meter.gauge import Gauge from spectator.meter.max_gauge import MaxGauge from spectator.meter.meter_id import MeterId from spectator.meter.monotonic_counter import MonotonicCounter from spectator.meter.monotonic_counter_uint import MonotonicCounterUint from spectator.meter.percentile_dist_summary import PercentileDistributionSummary from spectator.meter.percentile_timer import PercentileTimer from spectator.meter.timer import Timer from spectator.writer.new_writer import new_writer, WriterUnion class Registry: """Registry is the main entry point for interacting with the Spectator library.""" def __init__(self, config: Config = Config()) -> None: self._config = config self._logger = logging.getLogger(__name__) self._writer = new_writer(config.location) self._logger.debug("Create Registry with extra_common_tags=%s", config.extra_common_tags) def writer(self) -> WriterUnion: return self._writer def close(self) -> None: self._logger.debug("Close Registry Writer") try: self._writer.close() except IOError: self._logger.error("Error closing Registry Writer") def new_id(self, name: str, tags: Optional[dict] = None) -> MeterId: """Create a new MeterId, which applies any configured extra common tags, and can be used as an input to the *_with_id Registry methods.""" if tags is None: tags = {} new_meter_id = MeterId(name, tags) if len(self._config.extra_common_tags) > 0: new_meter_id = new_meter_id.with_tags(self._config.extra_common_tags) return new_meter_id def age_gauge(self, name: str, tags: Optional[dict] = None) -> AgeGauge: return AgeGauge(self.new_id(name, tags), self._writer) def age_gauge_with_id(self, meter_id: MeterId) -> AgeGauge: return AgeGauge(meter_id, self._writer) def counter(self, name: str, tags: Optional[dict] = None) -> Counter: return Counter(self.new_id(name, tags), self._writer) def counter_with_id(self, meter_id: MeterId) -> Counter: return Counter(meter_id, self._writer) def distribution_summary(self, name: str, tags: Optional[dict] = None) -> DistributionSummary: return DistributionSummary(self.new_id(name, tags), self._writer) def distribution_summary_with_id(self, meter_id: MeterId) -> DistributionSummary: return DistributionSummary(meter_id, self._writer) def gauge(self, name: str, tags: Optional[dict] = None, ttl_seconds: Optional[int] = None) -> Gauge: return Gauge(self.new_id(name, tags), self._writer, ttl_seconds) def gauge_with_id(self, meter_id: MeterId, ttl_seconds: Optional[int] = None) -> Gauge: return Gauge(meter_id, self._writer, ttl_seconds) def max_gauge(self, name: str, tags: Optional[dict] = None) -> MaxGauge: return MaxGauge(self.new_id(name, tags), self._writer) def max_gauge_with_id(self, meter_id: MeterId) -> MaxGauge: return MaxGauge(meter_id, self._writer) def monotonic_counter(self, name: str, tags: Optional[dict] = None) -> MonotonicCounter: return MonotonicCounter(self.new_id(name, tags), self._writer) def monotonic_counter_with_id(self, meter_id: MeterId) -> MonotonicCounter: return MonotonicCounter(meter_id, self._writer) def monotonic_counter_uint(self, name: str, tags: Optional[dict] = None) -> MonotonicCounterUint: return MonotonicCounterUint(self.new_id(name, tags), self._writer) def monotonic_counter_uint_with_id(self, meter_id: MeterId) -> MonotonicCounterUint: return MonotonicCounterUint(meter_id, self._writer) def pct_distribution_summary(self, name: str, tags: Optional[dict] = None) -> PercentileDistributionSummary: return PercentileDistributionSummary(self.new_id(name, tags), self._writer) def pct_distribution_summary_with_id(self, meter_id: MeterId) -> PercentileDistributionSummary: return PercentileDistributionSummary(meter_id, self._writer) def pct_timer(self, name: str, tags: Optional[dict] = None) -> PercentileTimer: return PercentileTimer(self.new_id(name, tags), self._writer) def pct_timer_with_id(self, meter_id: MeterId) -> PercentileTimer: return PercentileTimer(meter_id, self._writer) def timer(self, name: str, tags: Optional[dict] = None) -> Timer: return Timer(self.new_id(name, tags), self._writer) def timer_with_id(self, meter_id: MeterId) -> Timer: return Timer(meter_id, self._writer)