Processor: Generic Graph Collector
The Generic Graph Collector Processor imports data from the graph into the output stage, depending on the configuration (a graph query).
'graph query' and 'additional properties' behave as in other source processors. Importantly, the expression in the 'value' field yields a value per each item. Thus, unique to this source processor, values come from the graph rather than from device telemetry.
Parameter | Description |
---|---|
Input Types | No inputs. This is a source processor. |
Output Types | Table (discrete state or number or text) |
Data Type | Type of data the service collects: numbers (ns) (such as device temperature), discrete states (dss) (such as device status), text or tables |
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[0]["ps"]". In collector processors ( 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")"] |
Query Expansion | For every path, originally returned by graph queries, passed to each generator the latter one produces a set of items and for each item it produces a new path extended by a corresponding property name which value is set of a value of the produced item. |
Query Group by (query_group_by) |
List (of strings) of node and relationship names used in the graph
query to group query results by. Each element in this list
represents a named node or relationship matcher in the
When grouping is active ( The following list describes the behavior for various values of this field:
|
Query Tag Filter (query_tag_filter) | Filters named nodes in the graph queries by assigned tags. |
Value Map |
A mapping of discrete-state values to human readable strings. A dictionary with all possible Discrete-State-Set states mapped to human-readable representation; applicable for Discrete-State-Set data (that is, when data_type is 'dss') only. { "0": "unknown", "1": "down", "2": "up", "3": "missing" } |
Value (value) | Expression evaluated per query result to collect value. (integer for NS and string for TS/DSS) |
Additional Keys |
Each additional key/value pair is used to extend properties of output stages where value is considered as an expression executed in context of the graph query and its result is used as a property value with respective key. The value of this property is evaluated for each item to associate items with metrics provided by a corresponding collector service. The association is done by keys because each collector reports a set of metrics where each metric is identified by a key in a format that is specific for each collector. |
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. |
Example: Generic Graph Collector
graph_query: "node("system", role="leaf", name="system"). out("hosted_interfaces"). node("interface", name="iface").out("link"). node("link", role="spine_leaf")" system_id: "system.system_id" interface: "iface.if_name" value: "iface.if_type" data_type: "dss" value_map: {0: "ip", 1: "loopback", ...}
Sample output (DSS):
[system_id=leaf1,interface=eth0]: "ip" [system_id=leaf1,interface=eth1]: "ip"