removed grafana and victoria
This commit is contained in:
+13
-16
@@ -5,11 +5,7 @@ from hue_collector.collector import Collector
|
||||
|
||||
class FakeClient:
|
||||
data = {
|
||||
"device": [
|
||||
{"id": "d1", "metadata": {"name": "Motion"}},
|
||||
{"id": "d2", "metadata": {"name": "Lamp"}},
|
||||
{"id": "d3", "metadata": {"name": "Offline lamp"}},
|
||||
],
|
||||
"device": [{"id": "d1", "metadata": {"name": "Motion"}}, {"id": "d2", "metadata": {"name": "Lamp"}}, {"id": "d3", "metadata": {"name": "Offline lamp"}}],
|
||||
"room": [{"id": "r1", "metadata": {"name": "Office"}, "children": [{"rid": "d1"}, {"rid": "d2"}, {"rid": "d3"}]}],
|
||||
"zone": [{"id": "z1", "metadata": {"name": "Downstairs"}, "children": [{"rid": "d2"}]}],
|
||||
"light": [
|
||||
@@ -31,20 +27,21 @@ class FakeClient:
|
||||
|
||||
class CollectorTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.metrics = Collector(FakeClient()).collect()
|
||||
self.snapshot = Collector(FakeClient()).collect()
|
||||
|
||||
def test_group_counts_only_connected_lights(self):
|
||||
self.assertIn('hue_group_lights_available{group="Office",group_id="r1",group_type="room"} 1', self.metrics)
|
||||
self.assertIn('hue_group_lights_off{group="Office",group_id="r1",group_type="room"} 0', self.metrics)
|
||||
self.assertIn('hue_group_lights_unavailable{group="Office",group_id="r1",group_type="room"} 1', self.metrics)
|
||||
self.assertIn('hue_group_lights_shining_percent{group="Office",group_id="r1",group_type="room"} 100.0', self.metrics)
|
||||
self.assertIn('hue_group_lights_off_percent{group="Office",group_id="r1",group_type="room"} 0.0', self.metrics)
|
||||
self.assertIn('hue_group_lights_unavailable_percent{group="Office",group_id="r1",group_type="room"} 50.0', self.metrics)
|
||||
self.assertIn('hue_group_average_brightness_percent{group="Office",group_id="r1",group_type="room"} 60.0', self.metrics)
|
||||
def test_group_light_state(self):
|
||||
office = next(item for item in self.snapshot["groups"] if item["name"] == "Office")
|
||||
self.assertEqual(office["available"], 1)
|
||||
self.assertEqual(office["on"], 1)
|
||||
self.assertEqual(office["off"], 0)
|
||||
self.assertEqual(office["unavailable"], 1)
|
||||
self.assertEqual(office["brightness"], 60)
|
||||
|
||||
def test_sensor_values_have_location(self):
|
||||
self.assertIn('hue_temperature_celsius{room="Office",sensor="Motion",sensor_id="t1",sensor_type="temperature",zones=""} 21.5', self.metrics)
|
||||
self.assertIn('hue_light_level_lux{room="Office",sensor="Motion",sensor_id="s1",sensor_type="light_level",zones=""} 123.4', self.metrics)
|
||||
temperature = next(item for item in self.snapshot["sensors"] if item["type"] == "temperature")
|
||||
light = next(item for item in self.snapshot["sensors"] if item["type"] == "light_level")
|
||||
self.assertEqual((temperature["name"], temperature["room"], temperature["value"]), ("Motion", "Office", 21.5))
|
||||
self.assertEqual((light["name"], light["room"], light["value"]), ("Motion", "Office", 123.4))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
import sys
|
||||
import tempfile
|
||||
import types
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class FakeRRD(types.ModuleType):
|
||||
def __init__(self):
|
||||
super().__init__("rrdtool")
|
||||
self.created = []
|
||||
self.updated = []
|
||||
self.graphed = []
|
||||
|
||||
def create(self, *args):
|
||||
self.created.append(args)
|
||||
Path(args[0]).touch()
|
||||
|
||||
def update(self, *args):
|
||||
self.updated.append(args)
|
||||
|
||||
def graph(self, *args):
|
||||
self.graphed.append(args)
|
||||
Path(args[0]).write_bytes(b"png")
|
||||
|
||||
|
||||
fake_rrd = FakeRRD()
|
||||
sys.modules.setdefault("rrdtool", fake_rrd)
|
||||
|
||||
from hue_collector.rrd_store import RRDStore # noqa: E402
|
||||
|
||||
|
||||
class RRDStoreTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
fake_rrd.created.clear()
|
||||
fake_rrd.updated.clear()
|
||||
fake_rrd.graphed.clear()
|
||||
self.tempdir = tempfile.TemporaryDirectory()
|
||||
self.store = RRDStore(self.tempdir.name, 30)
|
||||
|
||||
def tearDown(self):
|
||||
self.tempdir.cleanup()
|
||||
|
||||
def test_create_update_and_group_graph(self):
|
||||
group = {"id": "r-1", "type": "room", "available": 2, "on": 1, "off": 1, "unavailable": 1, "brightness": 42.5}
|
||||
self.store.update({"groups": [group], "sensors": []})
|
||||
self.assertEqual(len(fake_rrd.created), 1)
|
||||
self.assertTrue(fake_rrd.updated[0][1].endswith(":2:1:1:1:42.5"))
|
||||
self.assertEqual(self.store.graph("group", group, "24h"), b"png")
|
||||
graph_args = fake_rrd.graphed[0]
|
||||
self.assertIn("AREA:up#8b0000:Unavailable", graph_args)
|
||||
self.assertIn("LINE2:b#22c55e:Average intensity", graph_args)
|
||||
|
||||
def test_rejects_unsafe_identifier(self):
|
||||
with self.assertRaises(ValueError):
|
||||
self.store.path("group", "../escape")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user