<gh_stars>0
#!/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)

#!/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)
#!/usr/bin/env python3 #ms #ms