Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • stustanet/temperature-daemon
  • roman/temperature-daemon
  • 007638/temperature-daemon
3 results
Show changes
import re
import asyncio
from prometheus_client import start_http_server, Gauge
from . import Plugin
def init(monitor):
return PluginPrometheus(monitor)
stats_name_re = re.compile(r'^temperature-(?P<group>\w+)-(?P<type>\w+)$')
class PluginPrometheus:
class Prometheus(Plugin):
def __init__(self, monitor):
self.loop = asyncio.get_event_loop()
self.config = monitor.config
......@@ -32,20 +32,15 @@ class PluginPrometheus:
)
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)
m = stats_name_re.match(stattype)
if not m:
return
self.aggregated_metrics.labels(group=m.group('group'), type=m.group('type')).set(statval)
async def sensor_update(self):
"""
......@@ -53,4 +48,4 @@ class PluginPrometheus:
"""
for sensor in self.monitor.sensors.values():
if sensor.valid:
await self.update_sensor_values(sensor)
self.sensor_metrics.labels(sensor=sensor.name).set(sensor.temperature)
import time
from . import Plugin
def init(monitor):
""" Plugin interface method """
return PluginWarning(monitor)
class PluginWarning:
class Warnings(Plugin):
"""
Generate all kind of warnings whenever needed and observe the sensor
if they see a problematic situation in the container
......@@ -107,7 +104,7 @@ class PluginWarning:
tempdiff = ceil_avg - floor_avg
await self.monitor.call_plugin(
"send_stats_graph", graph="stats",
stattype="temperature-floor_ceil_diff", stattime=now, statval=tempdiff)
stattype="temperature-floor_ceil-diff", stattime=now, statval=tempdiff)
print("floor: min {:05.2f} max {:05.2f} avg {:05.2f} var {:05.2f}".format(
floor_min, floor_max, floor_avg, floor_var))
......
......@@ -21,12 +21,12 @@ import asyncio
import configparser
import sys
import time
import importlib
from datetime import datetime
from pathlib import Path
import serial_asyncio
import serial
from .plugins import PLUGINS
class Sensor:
"""
......@@ -254,41 +254,27 @@ class TempMonitor:
self._last_store = time.time()
def setup_plugin(filename, plugin):
"""
Setup and fix plugins
"""
if not getattr(plugin, "name", None):
plugin.name = filename
def main():
"""
Start the tempmonitor
"""
loop = asyncio.get_event_loop()
configfile = "/etc/temperature/tempermon.ini"
configfile = "/etc/tempermonitor.ini"
if len(sys.argv) == 2:
configfile = sys.argv[1]
print("Configuring temperature monitoring system from {}.".format(configfile))
print(f"Configuring temperature monitoring system from {configfile}.")
monitor = TempMonitor(loop, configfile)
plugin_path = Path(__file__).resolve().parent / "plugins"
print("Loading plugins from {}".format(plugin_path))
active_plugins = monitor.config["general"]["plugins"].split(",")
print(f"Active plugins: {active_plugins}")
for filename in plugin_path.glob("*.py"):
if (plugin_path / filename).exists() and filename.stem in active_plugins:
print("loading {}".format(filename.name))
modname = "plugins." + filename.name.split('.')[0]
module = importlib.import_module(modname)
plugin = module.init(monitor)
setup_plugin(filename, plugin)
monitor.plugins.append(plugin)
print("Loaded: {}".format(plugin.name))
for plugin in active_plugins:
if plugin in PLUGINS:
p = PLUGINS[plugin](monitor)
monitor.plugins.append(p)
print(f"Loaded plugin: {plugin}")
try:
loop.run_forever()
......@@ -297,6 +283,3 @@ def main():
finally:
loop.run_until_complete(monitor.teardown())
if __name__ == "__main__":
main()