Processor: Periodic Average¶
One N is created on output per each input. Each <period> seconds, the output is set to the average of the input over the last <period> seconds. This is not a weighted average.
Input Types - Number-Set (NS)
Output Types - Number-Set (NS)
- Size of the averaging period. (time in seconds, integer, or an expression that evaluates to time in seconds integer value)
- Graph Query (graph_query)
One or more queries on graph specified as strings, or a list of such queries. (String will be deprecated in a future release.) Multiple queries should provide all the named nodes referenced by the expression fields (including additional_properties). Graph query is executed on the “operation” graph. Results of the queries can be accessed using the “query_result” variable with the appropriate index. For example, if querying property set nodes under name “ps”, the result will be available as “query_result[“ps”]”.
In collector processors (
if_counter) it is used to choose a set of nodes for further processing (for example, all leafs, or all interfaces between leaf and spines)
In other processors it is used for general parameterization and it is only supported as a list of queries.graph_query: "node("system", role="leaf", name="system"). out("hosted_interfaces"). node("interface", name="iface").out("link"). node("link", role="spine_leaf")"graph_query: ["node("system", role="leaf", name="system")", "node("system", role="spine", name="system")"]
Non-collector processors containing the
graph_queryconfiguration parameter, can be parameterized to use data from arbitrary nodes in the graph, such as property set nodes (as of version 3.0). Property sets allow you to parameterize macro level SLAs for individual business units. In the example below,
graph_querymatches a node of type
probe_propset. It’s accessed using the special
query_resultvariable, where Index
0means it’s the first node in query results. If a query returned
Nnodes, they could be accessed using indices starting from
psis what the actual node is referred to in the query; the rest depends on the structure of the node. The
int()casting is required because values of
property_setnodes are strings. Here it’s assumed that a property set node has the label
probe_propsetand that the value
accumulate_durationwas already created.graph_query: [node("property_set", label="probe_propset", name="ps")] duration: int(query_result["ps"].values["accumulate_duration"])
Another example is a that probes can validate a compliance requirement; the compliance value may change over time and/or it can be used by more than one probe. Also, a probe can validate NOS versions on devices. In this case, property sets can be used to define the current NOS version requirement. If it changes tomorrow: change the property set value, instead of going under the probe stage.
- Enable Streaming (enable_streaming)
- Makes samples of output stages streamed if enabled. An optional boolean that defaults to False. If set to True, all output stages of this processor are streamed in the generic protobuf schema.
Periodic Average Example¶
Assume the following input at time t=1
[if_name=eth0] : 10 [if_name=eth1] : 20 [if_name=eth3] : 30
And following input at time t=1.5
[if_name=eth0] : 20 [if_name=eth1] : 30 [if_name=eth3] : 40
And the following at time t=2.1
[if_name=eth0] : 40 [if_name=eth1] : 50 [if_name=eth3] : 60
We would now have the following output:
[if_name=eth0] : 15 [if_name=eth1] : 25 [if_name=eth3] : 35
This output is the average over the last discrete period of 2 seconds (time=0 to time=2). Notice that the average is not weighted by time; frequently-occuring closely-spaced samples will bias the average.
The next time the output would be updated would be at time t=4, in which case it would contain the average of the input over the range [t=2, t=4], a period of the configured two seconds.