From d7ed62e7cb66cad9d8104a4a2222c364b1fd691a Mon Sep 17 00:00:00 2001 From: oroulet Date: Tue, 1 Oct 2019 08:55:43 +0200 Subject: [PATCH] Fix historizing events with specified SourceNode from einarmo --- asyncua/common/events.py | 4 ++++ asyncua/server/history.py | 4 ++-- asyncua/server/history_sql.py | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/asyncua/common/events.py b/asyncua/common/events.py index 4e3cb67d..bec9a628 100644 --- a/asyncua/common/events.py +++ b/asyncua/common/events.py @@ -25,6 +25,10 @@ class Event: self.event_fields = None self.data_types = {} self.emitting_node = emitting_node + if isinstance(emitting_node, ua.NodeId): + self.emitting_node = emitting_node + else: + self.emitting_node = ua.NodeId(emitting_node) # save current attributes self.internal_properties = list(self.__dict__.keys())[:] + ["internal_properties"] diff --git a/asyncua/server/history.py b/asyncua/server/history.py index 6263ced1..5d49b931 100644 --- a/asyncua/server/history.py +++ b/asyncua/server/history.py @@ -144,9 +144,9 @@ class HistoryDict(HistoryStorageInterface): self._events_periods[source_id] = period, count async def save_event(self, event): - evts = self._events[event.SourceNode] + evts = self._events[event.emitting_node] evts.append(event) - period, count = self._events_periods[event.SourceNode] + period, count = self._events_periods[event.emitting_node] now = datetime.utcnow() if period: while len(evts) and now - evts[0].SourceTimestamp > period: diff --git a/asyncua/server/history_sql.py b/asyncua/server/history_sql.py index 00700ff7..2386929d 100644 --- a/asyncua/server/history_sql.py +++ b/asyncua/server/history_sql.py @@ -133,7 +133,7 @@ class HistorySQLite(HistoryStorageInterface): self.logger.info("Historizing SQL Table Creation Error for events from %s: %s", source_id, e) async def save_event(self, event): - table = self._get_table_name(event.SourceNode) + table = self._get_table_name(event.emitting_node) columns, placeholders, evtup = self._format_event(event) event_type = event.EventType # useful for troubleshooting database # insert the event into the database @@ -145,9 +145,9 @@ class HistorySQLite(HistoryStorageInterface): ) await self._db.commit() except aiosqlite.Error as e: - self.logger.error("Historizing SQL Insert Error for events from %s: %s", event.SourceNode, e) + self.logger.error("Historizing SQL Insert Error for events from %s: %s", event.emitting_node, e) # get this node's period from the period dict and calculate the limit - period = self._datachanges_period[event.SourceNode] + period = self._datachanges_period[event.emitting_node] if period: # after the insert, if a period was specified delete all records older than period date_limit = datetime.utcnow() - period @@ -155,7 +155,7 @@ class HistorySQLite(HistoryStorageInterface): await self._db.execute(f'DELETE FROM "{table}" WHERE Time < ?', (date_limit.isoformat(' '),)) await self._db.commit() except aiosqlite.Error as e: - self.logger.error("Historizing SQL Delete Old Data Error for events from %s: %s", event.SourceNode, e) + self.logger.error("Historizing SQL Delete Old Data Error for events from %s: %s", event.emitting_node, e) async def read_event_history(self, source_id, start, end, nb_values, evfilter): table = self._get_table_name(source_id)