import logging
import os
from time import time
from caspia.toolbox.influxdb import InfluxDBClient
from caspia.toolbox.monitor import MetricStore
logger = logging.getLogger(__name__)
[docs]class InfluxDBMetricStore(MetricStore):
def __init__(self, url=None, database=None, interval=10.0, loop=None):
super().__init__(loop=loop, interval=interval)
url = url or os.environ.get('METRICS_INFLUXDB_URL') \
or os.environ.get('CSP_METRICS_INFLUXDB_URL')
self._client = InfluxDBClient(url,
'metrics',
logger=logger,
precision='ms',
loop=self._loop)
def _record(self, metric, value, labels):
if metric.collect:
fields = dict(value=value, interval=float(self._interval))
else:
fields = value if isinstance(value, dict) else dict(value=value)
self._client.write(metric.name, int(time() * 1000), fields=fields, tags=labels)