#!/usr/bin/env python3 from prometheus_client import start_http_server, Metric, REGISTRY import json import requests import sys import time import dateutil.parser as dt class JsonCollector(object): def __init__(self, endpoint): self._endpoint = endpoint def collect(self): response = None try: resp = requests.get(self._endpoint).content.decode('UTF-8') response = json.loads(resp) except Exception as e: print('got exception, skip polling loop {}'.format(e)) return commitHash = response.get('git', {}).get('commitHash') packageVersion = response.get('packageVersion') metrics = { 'activeWebhooks': response.get('activeWebhooks'), 'ready': int(response.get('analytics', {}).get('ready', 0)), 'tasksQueueLength': response.get('analytics', {}).get('tasksQueueLength'), 'awaitedTasksNumber': response.get('awaitedTasksNumber'), 'detectionsCount': response.get('detectionsCount') } for name, value in metrics.items(): if value is not None: metric = Metric(name, name, 'gauge') metric.add_sample(name, value=value, labels={'commitHash': commitHash, 'packageVersion': packageVersion}) yield metric else: print('{} value is {}, skip metric'.format(name, value)) lastAlive = response.get('analytics', {}).get('lastAlive') if lastAlive: lastAlive = int(dt.parse(lastAlive).timestamp()) * 1000 #ms metric = Metric('lastAlive', 'lastAlive', 'gauge') metric.add_sample('lastAlive', value=lastAlive, labels={'commitHash': commitHash, 'packageVersion': packageVersion}) yield metric timestamp = response.get('timestamp') if timestamp: timestamp = int(dt.parse(timestamp).timestamp()) * 1000 #ms metric = Metric('timestamp', 'timestamp', 'gauge') metric.add_sample('timestamp', value=timestamp, labels={'commitHash': commitHash, 'packageVersion': packageVersion}) yield metric if __name__ == '__main__': hastic_url = sys.argv[1] exporter_port = int(sys.argv[2]) start_http_server(exporter_port) REGISTRY.register(JsonCollector(hastic_url)) while True: time.sleep(1)