Skip to content

Commit

Permalink
Improve metrics docs and argument parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
alastair committed May 3, 2021
1 parent c31ac4a commit cdb8676
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 19 deletions.
32 changes: 16 additions & 16 deletions brainzutils/metrics.py
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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.
Expand All @@ -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)

Expand Down
4 changes: 1 addition & 3 deletions brainzutils/test/test_metrics.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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')

0 comments on commit cdb8676

Please sign in to comment.