1
0
mirror of https://github.com/FreeOpcUa/opcua-asyncio synced 2025-10-29 17:07:18 +08:00

Fix historizing events with specified SourceNode from einarmo

This commit is contained in:
oroulet 2019-10-01 08:55:43 +02:00 committed by oroulet
parent f5e678e444
commit d7ed62e7cb
3 changed files with 10 additions and 6 deletions

View File

@ -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"]

View File

@ -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:

View File

@ -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)