diff options
Diffstat (limited to 'prometheus.py')
-rwxr-xr-x | prometheus.py | 89 |
1 files changed, 57 insertions, 32 deletions
diff --git a/prometheus.py b/prometheus.py index 9af4de3..6d7bbe5 100755 --- a/prometheus.py +++ b/prometheus.py @@ -7,9 +7,7 @@ from socket import AF_INET6 from time import time from urllib.parse import parse_qs, urlparse -from prometheus_client import ( - CollectorRegistry, Gauge, generate_latest, CONTENT_TYPE_LATEST -) +from prometheus_client import CollectorRegistry, Gauge, generate_latest, CONTENT_TYPE_LATEST from config import Config from metrics import EjabberdMetrics @@ -17,26 +15,25 @@ from metrics import EjabberdMetrics class DynamicMetricsHandler(BaseHTTPRequestHandler): """HTTP handler that gives metrics from ``core.REGISTRY``.""" + def do_GET(self): params = parse_qs(urlparse(self.path).query) registry = self.generator(params) - if 'name[]' in params: - registry = registry.restricted_registry(params['name[]']) + if "name[]" in params: + registry = registry.restricted_registry(params["name[]"]) try: output = generate_latest(registry) except: - self.send_error(500, 'error generating metric output') + self.send_error(500, "error generating metric output") raise self.send_response(200) - self.send_header('Content-Type', CONTENT_TYPE_LATEST) + self.send_header("Content-Type", CONTENT_TYPE_LATEST) self.end_headers() self.wfile.write(output) @staticmethod def factory(registry_generator): - DynMetricsHandler = type('MetricsHandler', - (DynamicMetricsHandler, object), - {"generator": registry_generator}) + DynMetricsHandler = type("MetricsHandler", (DynamicMetricsHandler, object), {"generator": registry_generator}) return DynMetricsHandler @@ -45,7 +42,7 @@ class Prometheus: self.ttl = 10 self._last_update = 0 self._metrics = metrics - + def handler(self, metrics_handler): now = time() if now >= (self._last_update + self.ttl): @@ -54,25 +51,53 @@ class Prometheus: registry = CollectorRegistry(auto_describe=True) - Gauge('ejabberd_node_s2s_in', 'count of incoming server-to-server connection', registry=registry).set(self._metrics.get_s2s_in()) - Gauge('ejabberd_node_s2s_out', 'count of outgoing server-to-server connection', registry=registry).set(self._metrics.get_s2s_out()) + Gauge("ejabberd_node_s2s_in", "count of incoming server-to-server connection", registry=registry).set( + self._metrics.get_s2s_in() + ) + Gauge("ejabberd_node_s2s_out", "count of outgoing server-to-server connection", registry=registry).set( + self._metrics.get_s2s_out() + ) nodename = self._metrics.nodename - Gauge('ejabberd_node_uptime', 'uptime of ejabberd service', ["node"], registry=registry).labels(nodename).set(self._metrics.get_uptime()) - Gauge('ejabberd_node_proccess', 'count of pejabber proccess', ["node"], registry=registry).labels(nodename).set(self._metrics.get_processes()) + Gauge("ejabberd_node_uptime", "uptime of ejabberd service", ["node"], registry=registry).labels(nodename).set( + self._metrics.get_uptime() + ) + Gauge("ejabberd_node_proccess", "count of pejabber proccess", ["node"], registry=registry).labels(nodename).set( + self._metrics.get_processes() + ) labelnames_vhost = ["vhost"] - registered_vhosts = Gauge('ejabberd_registered_vhosts', 'count of user per vhost', labelnames_vhost, registry=registry) - muc = Gauge('ejabberd_muc', 'count of muc\'s per vhost', labelnames_vhost, registry=registry) - - online_vhost_node = Gauge('ejabberd_online_vhost_node', 'count of client connections', ["vhost", "node"], registry=registry) - - online_status = Gauge('ejabberd_online_status', 'count of client connections', ["vhost", "node", "status"], registry=registry) - online_connection = Gauge('ejabberd_online_connection', 'count of client connections', ["vhost", "node", "connection"], registry=registry) - online_client = Gauge('ejabberd_online_client', 'count of client software', ["vhost", "node", "client"], registry=registry) - online_ipversion = Gauge('ejabberd_online_ipversion', 'count of client software', ["vhost", "node", "ipversion"], registry=registry) - online_client_ipversion = Gauge('ejabberd_online_client_ipversion', 'count of client software', ["vhost", "node", "client", "ipversion"], registry=registry) + registered_vhosts = Gauge( + "ejabberd_registered_vhosts", "count of user per vhost", labelnames_vhost, registry=registry + ) + muc = Gauge("ejabberd_muc", "count of muc's per vhost", labelnames_vhost, registry=registry) + + online_vhost_node = Gauge( + "ejabberd_online_vhost_node", "count of client connections", ["vhost", "node"], registry=registry + ) + + online_status = Gauge( + "ejabberd_online_status", "count of client connections", ["vhost", "node", "status"], registry=registry + ) + online_connection = Gauge( + "ejabberd_online_connection", + "count of client connections", + ["vhost", "node", "connection"], + registry=registry, + ) + online_client = Gauge( + "ejabberd_online_client", "count of client software", ["vhost", "node", "client"], registry=registry + ) + online_ipversion = Gauge( + "ejabberd_online_ipversion", "count of client software", ["vhost", "node", "ipversion"], registry=registry + ) + online_client_ipversion = Gauge( + "ejabberd_online_client_ipversion", + "count of client software", + ["vhost", "node", "client", "ipversion"], + registry=registry, + ) for host in self._metrics.get_vhosts(): labels_vhost = host @@ -108,19 +133,19 @@ class Prometheus: if __name__ == "__main__": # load config config = Config() - if config.get('debug', default=False): + if config.get("debug", default=False): logging.getLogger().setLevel(logging.DEBUG) # credentials and parameters - url = config.get('url', default='http://[::1]:5280/api') - login = config.get('login', default=None) - api = config.get('api', default='rest') + url = config.get("url", default="http://[::1]:5280/api") + login = config.get("login", default=None) + api = config.get("api", default="rest") # config prometheus - prom_addr = config.get('prometheus_address', default='127.0.0.1') - prom_port = config.get('prometheus_port', default=8080) + prom_addr = config.get("prometheus_address", default="127.0.0.1") + prom_port = config.get("prometheus_port", default=8080) metrics = EjabberdMetrics(url, login, api) prom = Prometheus(metrics) - prom.ttl = config.get('prometheus_cache_ttl', default=10) + prom.ttl = config.get("prometheus_cache_ttl", default=10) prom.listen((prom_addr, prom_port)) |