aboutsummaryrefslogtreecommitdiffstats
path: root/mikrotik.py
diff options
context:
space:
mode:
authorjwansek <eddie.atten.ea29@gmail.com>2023-10-15 21:07:46 +0100
committerjwansek <eddie.atten.ea29@gmail.com>2023-10-15 21:07:46 +0100
commit247a962c39e4ade2d9fb0b280d400d82fd8db56d (patch)
tree9b9c771a7e7e29fdf44165f0a24b493c60f7b732 /mikrotik.py
parentbbeeebb51fc9eb84cb976cb49ab2935f332f94ed (diff)
downloadpower.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.py21
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))