# SPDX-FileCopyrightText: 2017 Fermi Research Alliance, LLC
# SPDX-License-Identifier: Apache-2.0
import prometheus_client
from prometheus_client.multiprocess import MultiProcessCollector
__all__ = ["Gauge", "Counter", "Histogram", "Summary", "display_metrics"]
[docs]
class Gauge(prometheus_client.Gauge):
"""Override prometheus client Gauge so that muliproccess_mode 'liveall" is
the default as opposed to 'all'"""
_DEFAULT_MULTIPROC_MODE = "liveall"
def __init__(self, *args, **kwargs):
if self.__determine_multiprocess_mode_existence(*args, **kwargs):
super().__init__(*args, **kwargs)
else:
super().__init__(multiprocess_mode=self._DEFAULT_MULTIPROC_MODE, *args, **kwargs)
def __determine_multiprocess_mode_existence(self, *args, **kwargs):
if "multiprocess_mode" in kwargs:
return True
return any(isinstance(arg, str) and arg in self._MULTIPROC_MODES for arg in args)
[docs]
class Counter(prometheus_client.Counter):
pass
[docs]
class Histogram(prometheus_client.Histogram):
pass
[docs]
class Summary(prometheus_client.Summary):
pass
[docs]
def display_metrics():
registry = prometheus_client.CollectorRegistry()
MultiProcessCollector(registry)
data = prometheus_client.generate_latest(registry=registry)
return data.decode()