diff options
author | jwansek <eddie.atten.ea29@gmail.com> | 2023-10-15 21:07:46 +0100 |
---|---|---|
committer | jwansek <eddie.atten.ea29@gmail.com> | 2023-10-15 21:07:46 +0100 |
commit | 247a962c39e4ade2d9fb0b280d400d82fd8db56d (patch) | |
tree | 9b9c771a7e7e29fdf44165f0a24b493c60f7b732 /mikrotik.py | |
parent | bbeeebb51fc9eb84cb976cb49ab2935f332f94ed (diff) | |
download | power.eda.gay-247a962c39e4ade2d9fb0b280d400d82fd8db56d.tar.gz power.eda.gay-247a962c39e4ade2d9fb0b280d400d82fd8db56d.zip |
Added plug usage table to web UI, with HTTP requests
Diffstat (limited to 'mikrotik.py')
-rw-r--r-- | mikrotik.py | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/mikrotik.py b/mikrotik.py index 4cd9231..b739132 100644 --- a/mikrotik.py +++ b/mikrotik.py @@ -26,13 +26,15 @@ class MikroTikSerialDevice: def __post_init__(self): self.interfaces = {} self.last_return = {} - for i in os.environ["MIKROTIK_INTERFACES"].split(","): - self.interfaces.__setitem__(*i.split(":")) + for i in os.environ["MIKROTIK_INTERFACES"].split(";"): + self.interfaces.__setitem__(*i.split(",")) self.is_being_polled = threading.Event() self.poe_cache = {interface: {} for interface in self.interfaces} def get_poe_info(self, interface): - print(self.poe_cache) + # fetch from cache so that multiple processes don't try to access serial at the same time + # this means that the same MikroTikSerialDevice object must be used for multiple threads + # if another thread is accessing the critical region, return from cache if self.is_being_polled.is_set(): fetched_cache = self.poe_cache[interface] fetched_cache["cached"] = True @@ -70,7 +72,13 @@ class MikroTikSerialDevice: if line.startswith("poe"): d.__setitem__(*line.split(": ")) - self.last_return = d + # also fetch from cache if it returned nothing + if d == {}: + fetched_cache = self.poe_cache[interface] + fetched_cache["cached"] = True + return fetched_cache + + self.last_return = d self.poe_cache[interface] = d d["cached"] = was_cached return d @@ -84,6 +92,7 @@ if __name__ == "__main__": dotenv.load_dotenv(dotenv_path = "power.env") mikrotik = MikroTikSerialDevice() - for interface in mikrotik.interfaces: - print(interface, mikrotik.get_poe_info(interface)) + for i in range(10): + for interface in mikrotik.interfaces: + print(interface, mikrotik.get_poe_info(interface)) |