import asyncio from prometheus_client import start_http_server, Gauge def init(monitor): return PluginPrometheus(monitor) class PluginPrometheus: def __init__(self, monitor): self.loop = asyncio.get_event_loop() self.config = monitor.config self.last_store = 0 self.monitor = monitor self.sensor_metrics = Gauge( name=self.config["prometheus"]["sensor_metric_name"], documentation="Container Temperature Measurements", labelnames=["sensor"] ) self.aggregated_metrics = Gauge( name=self.config["prometheus"]["aggregated_metric_name"], documentation="Container Temperature Aggregations", labelnames=["group", "type"] ) start_http_server( addr=self.config["prometheus"].get('address', 'localhost'), port=int(self.config["prometheus"]["port"]) ) print("started prometheus http server") async def update_sensor_values(self, sensor): """ update """ print("updating prometheus metrics") self.sensor_metrics.labels(sensor=sensor.name).set(sensor.temperature) async def send_stats_graph(self, graph, stattype, stattime, statval): """ to be called as a plugin callback to export aggregated measurements """ label_group = stattype.split("-")[1] label_type = stattype.split("-")[2] self.aggregated_metrics.labels(group=label_group, type=label_type).set(statval) async def sensor_update(self): """ Receive sensor data to store them regularely into collectd """ for sensor in self.monitor.sensors.values(): if sensor.valid: await self.update_sensor_values(sensor)