Fixing invariate timestamps due to addMetric
generating the default time in the method signature
#398
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, there is a bug in
python/core/sparkplug_b.py
where timestamps are not appropriately set whenaddMetric()
is called without overriding thetimestamp
argument. The default value is constant once interpreted, and depends only on when the function is interpreted, not when the payload or metric is created.addMetric
must changed from:to:
This is because of one of python's gotchas - the default arguments are set once, when the function is initially interpreted. Here is a minimal example of the issue:
We observe that
f1
always prints the same time - the time its signature was interpreted andtime.time()
was called to create the default value.A similar change was made to
addNullMetric
, which did not have the bug but also did not provide a means to directly set the timestamp.addHistoricalMetric
was not changed, though it may be appropriate to do so - I am unfamiliar with the specific properties and expectations for historical metrics.