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:
parent
f5e678e444
commit
d7ed62e7cb
|
|
@ -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"]
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user