Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
opcua-asyncio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nikola Balog
opcua-asyncio
Commits
f877f890
Commit
f877f890
authored
Mar 30, 2016
by
olivier R-D
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
renaming in interface and documentation
parent
e35fc08f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
15 deletions
+35
-15
opcua/server/history.py
opcua/server/history.py
+35
-15
No files found.
opcua/server/history.py
View file @
f877f890
...
@@ -19,24 +19,44 @@ def bytes_to_datetime(data):
...
@@ -19,24 +19,44 @@ def bytes_to_datetime(data):
class
HistoryStorageInterface
(
object
):
class
HistoryStorageInterface
(
object
):
"""
"""
Interface of a history backend
Interface of a history backend.
Must be implemented by backends
"""
"""
def
new_node
(
self
,
node
,
period
,
count
=
0
):
def
new_historized_node
(
self
,
node
,
period
,
count
=
0
):
"""
Called when a new node is to be historized
"""
raise
NotImplementedError
raise
NotImplementedError
def
save_datavalue
(
self
,
node
,
datavalue
):
def
save_node_value
(
self
,
node
,
datavalue
):
"""
Called when the value of a historized node has changed and should be saved in history
"""
raise
NotImplementedError
raise
NotImplementedError
def
read_datavalues
(
self
,
node
,
start
,
end
,
nb_values
):
def
read_node_history
(
self
,
node
,
start
,
end
,
nb_values
):
"""
Called when a client make a history read request for a node
"""
raise
NotImplementedError
raise
NotImplementedError
def
new_event
(
self
,
event
,
period
):
def
new_historized_event
(
self
,
event
,
period
):
"""
Called when historization of events is enabled on server side
FIXME: we may need to store events per nodes in future...
"""
raise
NotImplementedError
raise
NotImplementedError
def
save_event
(
self
,
event
):
def
save_event
(
self
,
event
):
"""
Called when a new event has been generated ans should be saved in history
"""
raise
NotImplementedError
raise
NotImplementedError
def
read_events
(
self
,
start
,
end
,
evfilter
):
def
read_event_history
(
self
,
start
,
end
,
evfilter
):
"""
Called when a client make a history read request for events
"""
raise
NotImplementedError
raise
NotImplementedError
...
@@ -49,14 +69,14 @@ class HistoryDict(HistoryStorageInterface):
...
@@ -49,14 +69,14 @@ class HistoryDict(HistoryStorageInterface):
self
.
_datachanges_period
=
{}
self
.
_datachanges_period
=
{}
self
.
_events
=
{}
self
.
_events
=
{}
def
new_node
(
self
,
node
,
period
,
count
=
0
):
def
new_
historized_
node
(
self
,
node
,
period
,
count
=
0
):
self
.
_datachanges
[
node
]
=
[]
self
.
_datachanges
[
node
]
=
[]
self
.
_datachanges_period
[
node
]
=
period
,
count
self
.
_datachanges_period
[
node
]
=
period
,
count
def
new_event
(
self
,
event
,
period
):
def
new_
historized_
event
(
self
,
event
,
period
):
self
.
_events
=
[]
self
.
_events
=
[]
def
save_
data
value
(
self
,
node
,
datavalue
):
def
save_
node_
value
(
self
,
node
,
datavalue
):
print
(
"saving"
,
node
,
datavalue
)
print
(
"saving"
,
node
,
datavalue
)
data
=
self
.
_datachanges
[
node
]
data
=
self
.
_datachanges
[
node
]
period
,
count
=
self
.
_datachanges_period
[
node
]
period
,
count
=
self
.
_datachanges_period
[
node
]
...
@@ -68,7 +88,7 @@ class HistoryDict(HistoryStorageInterface):
...
@@ -68,7 +88,7 @@ class HistoryDict(HistoryStorageInterface):
if
count
and
len
(
data
)
>
count
:
if
count
and
len
(
data
)
>
count
:
data
=
data
[
-
count
:]
data
=
data
[
-
count
:]
def
read_
datavalues
(
self
,
node
,
start
,
end
,
nb_values
):
def
read_
node_history
(
self
,
node
,
start
,
end
,
nb_values
):
if
node
not
in
self
.
_datachanges
:
if
node
not
in
self
.
_datachanges
:
return
[]
return
[]
else
:
else
:
...
@@ -78,7 +98,7 @@ class HistoryDict(HistoryStorageInterface):
...
@@ -78,7 +98,7 @@ class HistoryDict(HistoryStorageInterface):
def
save_event
(
self
,
timestamp
,
event
):
def
save_event
(
self
,
timestamp
,
event
):
raise
NotImplementedError
raise
NotImplementedError
def
read_event
s
(
self
,
start
,
end
,
evfilter
):
def
read_event
_history
(
self
,
start
,
end
,
evfilter
):
raise
NotImplementedError
raise
NotImplementedError
...
@@ -87,7 +107,7 @@ class SubHandler(object):
...
@@ -87,7 +107,7 @@ class SubHandler(object):
self
.
storage
=
storage
self
.
storage
=
storage
def
datachange_notification
(
self
,
node
,
val
,
data
):
def
datachange_notification
(
self
,
node
,
val
,
data
):
self
.
storage
.
save_
data
value
(
node
,
data
.
monitored_item
.
Value
)
self
.
storage
.
save_
node_
value
(
node
,
data
.
monitored_item
.
Value
)
def
event_notification
(
self
,
event
):
def
event_notification
(
self
,
event
):
self
.
storage
.
save_event
(
event
)
self
.
storage
.
save_event
(
event
)
...
@@ -118,7 +138,7 @@ class HistoryManager(object):
...
@@ -118,7 +138,7 @@ class HistoryManager(object):
self
.
_sub
=
self
.
_create_subscription
(
SubHandler
(
self
.
storage
))
self
.
_sub
=
self
.
_create_subscription
(
SubHandler
(
self
.
storage
))
if
node
in
self
.
_handlers
:
if
node
in
self
.
_handlers
:
raise
ua
.
UaError
(
"Node {} is allready historized"
.
format
(
node
))
raise
ua
.
UaError
(
"Node {} is allready historized"
.
format
(
node
))
self
.
storage
.
new_node
(
node
,
period
,
count
)
self
.
storage
.
new_
historized_
node
(
node
,
period
,
count
)
handler
=
self
.
_sub
.
subscribe_data_change
(
node
)
handler
=
self
.
_sub
.
subscribe_data_change
(
node
)
self
.
_handlers
[
node
]
=
handler
self
.
_handlers
[
node
]
=
handler
...
@@ -160,7 +180,7 @@ class HistoryManager(object):
...
@@ -160,7 +180,7 @@ class HistoryManager(object):
result
.
HistoryData
=
ua
.
HistoryEvent
()
result
.
HistoryData
=
ua
.
HistoryEvent
()
# FIXME: filter is a cumbersome type, maybe transform it something easier
# FIXME: filter is a cumbersome type, maybe transform it something easier
# to handle for storage
# to handle for storage
result
.
HistoryData
.
Events
=
self
.
storage
.
read_event
s
(
details
.
StartTime
,
result
.
HistoryData
.
Events
=
self
.
storage
.
read_event
_history
(
details
.
StartTime
,
details
.
EndTime
,
details
.
EndTime
,
details
.
Filter
)
details
.
Filter
)
else
:
else
:
...
@@ -177,7 +197,7 @@ class HistoryManager(object):
...
@@ -177,7 +197,7 @@ class HistoryManager(object):
# send correctly with continuation point
# send correctly with continuation point
starttime
=
bytes_to_datetime
(
rv
.
ContinuationPoint
)
starttime
=
bytes_to_datetime
(
rv
.
ContinuationPoint
)
dv
,
cont
=
self
.
storage
.
read_
datavalues
(
rv
.
NodeId
,
dv
,
cont
=
self
.
storage
.
read_
node_history
(
rv
.
NodeId
,
starttime
,
starttime
,
details
.
EndTime
,
details
.
EndTime
,
details
.
NumValuesPerNode
)
details
.
NumValuesPerNode
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment