mirror of
https://github.com/wahyd4/docker-hub-exporter.git
synced 2026-08-09 04:46:34 +10:00
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
from prometheus_client import start_http_server
|
|
from prometheus_client.core import CounterMetricFamily, REGISTRY
|
|
|
|
import json
|
|
import requests
|
|
import sys
|
|
import time
|
|
import os
|
|
|
|
|
|
class HubCollector(object):
|
|
|
|
def collect(self):
|
|
images = os.getenv('IMAGES', default="thebsdbox/ovcli, rucknar/prom-conf").replace(' ','').split(",")
|
|
print("Starting exporter")
|
|
self._pull_metrics = CounterMetricFamily('docker_hub_pull_total', 'counter of docker_pulls from the public API', labels=["image", "user"])
|
|
self._star_metrics = CounterMetricFamily('docker_hub_star_total', 'counter of docker_stars from the public API', labels=["image", "user"])
|
|
|
|
for image in images:
|
|
print("Getting JSON for " + image)
|
|
self._get_json(image)
|
|
print("Getting Metrics for " + image)
|
|
self._get_metrics()
|
|
print ("Metrics Updated for " + image)
|
|
|
|
yield self._pull_metrics
|
|
yield self._star_metrics
|
|
|
|
def _get_json(self, image):
|
|
print("Getting JSON Payload for " + image)
|
|
image_url = 'https://hub.docker.com/v2/repositories/{0}'.format(image)
|
|
print(image_url)
|
|
response = requests.get(image_url)
|
|
self._response_json = json.loads(response.content.decode('UTF-8'))
|
|
|
|
|
|
def _get_metrics(self):
|
|
image_name = self._response_json['name']
|
|
user_name = self._response_json['user']
|
|
self._pull_metrics.add_metric([image_name, user_name], value=self._response_json['pull_count'])
|
|
self._star_metrics.add_metric([image_name, user_name], value=self._response_json['star_count'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
start_http_server(int(os.getenv('BIND_PORT')))
|
|
REGISTRY.register(HubCollector())
|
|
|
|
while True: time.sleep(1)
|