diff --git a/brainzutils/metrics.py b/brainzutils/metrics.py index 81155bd..bf6151e 100644 --- a/brainzutils/metrics.py +++ b/brainzutils/metrics.py @@ -1,12 +1,9 @@ -import datetime from functools import wraps import os import socket from time import time_ns from typing import Dict -from redis import ResponseError - from brainzutils import cache REDIS_METRICS_KEY = "metrics:influx_data" @@ -29,10 +26,11 @@ def decorated(*args, **kwargs): @cache.init_required @metrics_init_required -def set(metric_name: str, tags: Dict[str,str]={}, timestamp: int=None, **fields): +def set(metric_name: str, tags: Dict[str, str] = None, timestamp: int = None, **fields): """ - Submit a metric to the MetaBrainz influx datastore for graphing/monitoring - purposes. + Submit a metric to be read by the MetaBrainz influx datastore for graphing/monitoring + purposes. These metrics are stored in redis in the influxdb line protocol format: + https://docs.influxdata.com/influxdb/v2.0/reference/syntax/line-protocol/ Args: metric_name: The name of the metric to record. @@ -48,23 +46,25 @@ def set(metric_name: str, tags: Dict[str,str]={}, timestamp: int=None, **fields) except KeyError: host = socket.gethostname() + if tags is None: + tags = {} + tags["dc"] = "hetzner" tags["server"] = host tags["project"] = _metrics_project_name - tag_string = ",".join([ "%s=%s" % (k, tags[k]) for k in tags ]) + tag_string = ",".join([ "%s=%s" % (k, v) for k, v in tags.items() ]) fields_list = [] - for k in fields: - if type(fields[k]) == int: - fields_list.append("%s=%di" % (k, fields[k])) - elif type(fields[k]) == bool and fields[k] == True: - fields_list.append("%s=t" % (k)) - elif type(fields[k]) == bool and fields[k] == False: - fields_list.append("%s=f" % (k)) + for k, v in fields.items(): + if type(v) == int: + fields_list.append("%s=%di" % (k, v)) + elif type(v) == bool: + val = "t" if v else "f" + fields_list.append("%s=%s" % (k, val)) elif type(fields[k]) == str: - fields_list.append('%s="%s"' % (k, fields[k])) + fields_list.append('%s="%s"' % (k, v)) else: - fields_list.append("%s=%s" % (k, str(fields[k]))) + fields_list.append("%s=%s" % (k, str(v))) fields = " ".join(fields_list) diff --git a/brainzutils/test/test_metrics.py b/brainzutils/test/test_metrics.py index 79fb350..c96e2c8 100644 --- a/brainzutils/test/test_metrics.py +++ b/brainzutils/test/test_metrics.py @@ -1,7 +1,5 @@ import os from unittest import mock, TestCase -from freezegun import freeze_time -from redis import ResponseError from brainzutils import cache from brainzutils import metrics @@ -20,5 +18,5 @@ def test_set(self, rpush): metrics.init('listenbrainz.org') os.environ["PRIVATE_IP"] = "127.0.0.1" metrics.set("my_metric", timestamp=1619629462352960742, test_i=2, test_fl=.3, test_t=True, test_f=False, test_s="gobble") - rpush.assert_called_with(metrics.REDIS_METRICS_KEY, + rpush.assert_called_with(metrics.REDIS_METRICS_KEY, 'my_metric,dc=hetzner,server=127.0.0.1,project=listenbrainz.org test_i=2i test_fl=0.3 test_t=t test_f=f test_s="gobble" 1619629462352960742')