From a3a33c119745424df45fbbf9f4882caeb164aab6 Mon Sep 17 00:00:00 2001 From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr> Date: Tue, 26 Nov 2024 13:26:03 +0100 Subject: [PATCH] Format Just a test for new rules --- libs/monitor/xaal/monitor/monitor.py | 134 ++++++++++++++++----------- 1 file changed, 79 insertions(+), 55 deletions(-) diff --git a/libs/monitor/xaal/monitor/monitor.py b/libs/monitor/xaal/monitor/monitor.py index 1fff718f..d0262d99 100644 --- a/libs/monitor/xaal/monitor/monitor.py +++ b/libs/monitor/xaal/monitor/monitor.py @@ -7,6 +7,7 @@ from xaal.lib import Message import logging + logger = logging.getLogger(__name__) # how often we force refresh the devices attributes/description/keyvalues @@ -22,7 +23,7 @@ def now(): class TimedDict(dict): def __init__(self, refresh_rate=REFRESH_RATE, data={}): - dict.__init__(self,data) + dict.__init__(self, data) self.last_update = 0 self.next_update = 0 @@ -31,12 +32,12 @@ class TimedDict(dict): self.next_update = self.last_update + REFRESH_RATE + random.randint(-30, 30) def __setitem__(self, key, item): - super().__setitem__(key,item) + super().__setitem__(key, item) self.updated() def update(self, dict_): - changed = False if self.last_update !=0 else True - if dict_!= self: + changed = False if self.last_update != 0 else True + if dict_ != self: changed = True super().update(dict_) self.updated() @@ -52,15 +53,15 @@ class Device: self.short_address = tools.reduce_addr(addr) self.dev_type = dev_type # device cache - self.attributes = TimedDict(refresh_rate=REFRESH_RATE) - self.description = TimedDict(refresh_rate=REFRESH_RATE*3) - self.db = TimedDict(refresh_rate=REFRESH_RATE*3) + self.attributes = TimedDict(refresh_rate=REFRESH_RATE) + self.description = TimedDict(refresh_rate=REFRESH_RATE * 3) + self.db = TimedDict(refresh_rate=REFRESH_RATE * 3) # Alive management self.last_alive = now() self.next_alive = 0 def update_attributes(self, data): - """ rude update attributes. Return true if updated""" + """rude update attributes. Return true if updated""" # really not the best comparaison, but we just need a flag return self.attributes.update(data) @@ -72,10 +73,10 @@ class Device: """ return self.description.update(data) - def update_db(self,data): + def update_db(self, data): return self.db.update(data) - def set_db(self,data): + def set_db(self, data): purge = [] for k in data: if data[k] is None: @@ -90,15 +91,15 @@ class Device: return True return False - def alive(self,value): + def alive(self, value): self.last_alive = int(time.time()) self.next_alive = self.last_alive + value - def get_kv(self,key): - return self.db.get(key,None) + def get_kv(self, key): + return self.db.get(key, None) def dump(self): - print("*** %s %s **" % (self.address,self.dev_type)) + print("*** %s %s **" % (self.address, self.dev_type)) print(" Description : %s" % self.description) print(" Attributes : %s" % self.attributes) print() @@ -106,19 +107,21 @@ class Device: @property def display_name(self): result = tools.reduce_addr(self.address) - result = self.db.get('nickname',result) - result = self.db.get('name',result) + result = self.db.get('nickname', result) + result = self.db.get('name', result) return result + class Devices: - """ Device List for monitoring """ + """Device List for monitoring""" + def __init__(self): self.__devs = {} self.__list_cache = None - def add(self,addr,dev_type): - dev = Device(addr,dev_type) - self.__devs.update({addr : dev}) + def add(self, addr, dev_type): + dev = Device(addr, dev_type) + self.__devs.update({addr: dev}) self.__list_cache = None return dev @@ -128,9 +131,9 @@ class Devices: def get(self): if not self.__list_cache: - #print("Refresh cache") + # print("Refresh cache") res = list(self.__devs.values()) - res.sort(key = lambda d: d.dev_type) + res.sort(key=lambda d: d.dev_type) self.__list_cache = res return self.__list_cache @@ -143,7 +146,7 @@ class Devices: def get_with_group(self, addr): r = [] for d in self.get(): - if addr==d.description.get('group_id', None): + if addr == d.description.get('group_id', None): r.append(d) return r @@ -164,7 +167,7 @@ class Devices: def get_with_key_value(self, key, value): r = [] for d in self.get(): - if (key in d.db) and (d.db[key]==value): + if (key in d.db) and (d.db[key] == value): r.append(d) return r @@ -176,7 +179,7 @@ class Devices: return None def get_dev_types(self): - """ return the list of distinct dev_types""" + """return the list of distinct dev_types""" ll = [] for dev in self.__devs.values(): if dev.dev_type not in ll: @@ -199,7 +202,7 @@ class Devices: return key in self.__devs def auto_wash(self): - now_ =now() + now_ = now() result = [] for dev in self.get(): if dev.next_alive < now_: @@ -209,22 +212,23 @@ class Devices: def dump(self): for d in self.get(): - print("%s %s" % (d.address,d.dev_type)) + print("%s %s" % (d.address, d.dev_type)) class Notification(Enum): - new_device = 0 - drop_device = 1 # sending drop_device notif is not implemented yet, - attribute_change = 2 - description_change = 3 - metadata_change = 4 + new_device = 0 + drop_device = 1 # sending drop_device notif is not implemented yet, + attribute_change = 2 + description_change = 3 + metadata_change = 4 class Monitor: """ use this class to monitor a xAAL network """ - def __init__(self,device,filter_func=None,db_server=None): + + def __init__(self, device, filter_func=None, db_server=None): self.dev = device self.engine = device.engine self.db_server = db_server @@ -240,8 +244,8 @@ class Monitor: self.engine.disable_msg_filter() # only send isAlive message every 2 expirations self.send_is_alive() - self.engine.add_timer(self.refresh_alives,REFRESH_TIMER) - # delete expired device every 10s + self.engine.add_timer(self.refresh_alives, REFRESH_TIMER) + # delete expired device every 10s self.engine.add_timer(self.auto_wash, AUTOWASH_TIMER) # wait x seconds for the first isAlive answers before the initial crawl self.refresh_timer = self.engine.add_timer(self.refresh_devices, BOOT_TIMER) @@ -252,7 +256,7 @@ class Monitor: return if msg.source not in self.devices: dev = self.add_device(msg) - self.notify(Notification.new_device,dev) + self.notify(Notification.new_device, dev) dev = self.devices.get_with_addr(msg.source) if not dev: @@ -266,11 +270,11 @@ class Monitor: elif msg.is_attributes_change() or msg.is_get_attribute_reply(): if dev.update_attributes(msg.body): - self.notify(Notification.attribute_change,dev) + self.notify(Notification.attribute_change, dev) elif msg.is_get_description_reply(): if dev.update_description(msg.body): - self.notify(Notification.description_change,dev) + self.notify(Notification.description_change, dev) elif self.is_from_metadb(msg): addr = msg.body.get('device') @@ -282,7 +286,7 @@ class Monitor: if self.is_update_metadb(msg): changed = target.update_db(msg.body['map']) if changed: - self.notify(Notification.metadata_change,target) + self.notify(Notification.metadata_change, target) def subscribe(self, func): self.subscribers.append(func) @@ -292,11 +296,11 @@ class Monitor: def notify(self, ev_type, device): for s in self.subscribers: - #logger.warning(f"{s} {ev_type}") - s(ev_type,device) + # logger.warning(f"{s} {ev_type}") + s(ev_type, device) def add_device(self, msg): - return self.devices.add(msg.source,msg.dev_type) + return self.devices.add(msg.source, msg.dev_type) def auto_wash(self): """call the Auto-wash on devices List""" @@ -310,11 +314,11 @@ class Monitor: self.last_isalive = now() def refresh_alives(self): - """ every REFRESH we check if need to send a isAlive""" + """every REFRESH we check if need to send a isAlive""" tmp = self.last_isalive + config.alive_timer * 2 if tmp < now(): self.send_is_alive() - + def refresh_devices(self): now_ = now() cnt = 0 @@ -323,40 +327,57 @@ class Monitor: if dev.description.next_update < now_: self.request_description(dev.address) dev.description.next_update = now_ + REFRESH_RATE - cnt = cnt +1 + cnt = cnt + 1 # metadata if self.db_server and dev.db.next_update < now_: self.request_metadb(dev.address) dev.db.next_update = now_ + REFRESH_RATE - cnt = cnt +1 + cnt = cnt + 1 # attributes if dev.attributes.next_update < now_: self.request_attributes(dev.address) dev.attributes.next_update = now_ + REFRESH_RATE - cnt = cnt +1 + cnt = cnt + 1 if cnt > 40: break # switch to normal timer after boot - if not self.boot_finished and cnt == 0 and len(self.devices)!=0: + if not self.boot_finished and cnt == 0 and len(self.devices) != 0: self.refresh_timer.period = REFRESH_TIMER logger.debug("Switching to slow refresh timer") self.boot_finished = True - elif cnt!=0: - logger.debug("request queued: %d" % cnt ) + elif cnt != 0: + logger.debug("request queued: %d" % cnt) def request_metadb(self, addr): if self.db_server: - self.engine.send_request(self.dev, [self.db_server,], 'get_keys_values', {'device':addr}) + self.engine.send_request( + self.dev, + [ + self.db_server, + ], + 'get_keys_values', + {'device': addr}, + ) def request_attributes(self, addr): - self.engine.send_get_attributes(self.dev,[addr,]) + self.engine.send_get_attributes( + self.dev, + [ + addr, + ], + ) def request_description(self, addr): - self.engine.send_get_description(self.dev,[addr,]) + self.engine.send_get_description( + self.dev, + [ + addr, + ], + ) def is_from_metadb(self, msg): - if (msg.is_notify() or msg.is_reply()) and msg.source == self.db_server : + if (msg.is_notify() or msg.is_reply()) and msg.source == self.db_server: return True return False @@ -372,4 +393,7 @@ class Monitor: def debug_timers(self): for dev in self.devices: - print("%s\t%s\t%d\t%d\t%d" % (dev.address,dev.dev_type,dev.description.last_update,dev.db.last_update,dev.attributes.last_update)) + print( + "%s\t%s\t%d\t%d\t%d" + % (dev.address, dev.dev_type, dev.description.last_update, dev.db.last_update, dev.attributes.last_update) + ) -- GitLab