cisco_telemetry_mdt enhancement (#8661)
This commit is contained in:
parent
8a47d6f104
commit
f5552944d1
|
|
@ -1,8 +1,8 @@
|
||||||
# Cisco Model-Driven Telemetry (MDT) Input Plugin
|
# Cisco model-driven telemetry (MDT)
|
||||||
|
|
||||||
Cisco model-driven telemetry (MDT) is an input plugin that consumes
|
Cisco model-driven telemetry (MDT) is an input plugin that consumes
|
||||||
telemetry data from Cisco IOS XR, IOS XE and NX-OS platforms. It supports TCP & GRPC dialout transports.
|
telemetry data from Cisco IOS XR, IOS XE and NX-OS platforms. It supports TCP & GRPC dialout transports.
|
||||||
GRPC-based transport can utilize TLS for authentication and encryption.
|
RPC-based transport can utilize TLS for authentication and encryption.
|
||||||
Telemetry data is expected to be GPB-KV (self-describing-gpb) encoded.
|
Telemetry data is expected to be GPB-KV (self-describing-gpb) encoded.
|
||||||
|
|
||||||
The GRPC dialout transport is supported on various IOS XR (64-bit) 6.1.x and later, IOS XE 16.10 and later, as well as NX-OS 7.x and later platforms.
|
The GRPC dialout transport is supported on various IOS XR (64-bit) 6.1.x and later, IOS XE 16.10 and later, as well as NX-OS 7.x and later platforms.
|
||||||
|
|
@ -21,6 +21,9 @@ The TCP dialout transport is supported on IOS XR (32-bit and 64-bit) 6.1.x and l
|
||||||
## Address and port to host telemetry listener
|
## Address and port to host telemetry listener
|
||||||
service_address = ":57000"
|
service_address = ":57000"
|
||||||
|
|
||||||
|
## Grpc Maximum Message Size, default is 4MB, increase the size.
|
||||||
|
max_msg_size = 20000000
|
||||||
|
|
||||||
## Enable TLS; grpc transport only.
|
## Enable TLS; grpc transport only.
|
||||||
# tls_cert = "/etc/telegraf/cert.pem"
|
# tls_cert = "/etc/telegraf/cert.pem"
|
||||||
# tls_key = "/etc/telegraf/key.pem"
|
# tls_key = "/etc/telegraf/key.pem"
|
||||||
|
|
@ -35,6 +38,19 @@ The TCP dialout transport is supported on IOS XR (32-bit and 64-bit) 6.1.x and l
|
||||||
## Define aliases to map telemetry encoding paths to simple measurement names
|
## Define aliases to map telemetry encoding paths to simple measurement names
|
||||||
[inputs.cisco_telemetry_mdt.aliases]
|
[inputs.cisco_telemetry_mdt.aliases]
|
||||||
ifstats = "ietf-interfaces:interfaces-state/interface/statistics"
|
ifstats = "ietf-interfaces:interfaces-state/interface/statistics"
|
||||||
|
[inputs.cisco_telemetry_mdt.dmes]
|
||||||
|
# Global Property Xformation.
|
||||||
|
# prop1 = "uint64 to int"
|
||||||
|
# prop2 = "uint64 to string"
|
||||||
|
# prop3 = "string to uint64"
|
||||||
|
# prop4 = "string to int64"
|
||||||
|
# prop5 = "string to float64"
|
||||||
|
# auto-prop-xfrom = "auto-float-xfrom" #Xform any property which is string, and has float number to type float64
|
||||||
|
# Per Path property xformation, Name is telemetry configuration under sensor-group, path configuration "WORD Distinguished Name"
|
||||||
|
# Per Path configuration is better as it avoid property collision issue of types.
|
||||||
|
# dnpath = '{"Name": "show ip route summary","prop": [{"Key": "routes","Value": "string"}, {"Key": "best-paths","Value": "string"}]}'
|
||||||
|
# dnpath2 = '{"Name": "show processes cpu","prop": [{"Key": "kernel_percent","Value": "float"}, {"Key": "idle_percent","Value": "float"}, {"Key": "process","Value": "string"}, {"Key": "user_percent","Value": "float"}, {"Key": "onesec","Value": "float"}]}'
|
||||||
|
# dnpath3 = '{"Name": "show processes memory physical","prop": [{"Key": "processname","Value": "string"}]}'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Example Output:
|
### Example Output:
|
||||||
|
|
@ -42,3 +58,47 @@ The TCP dialout transport is supported on IOS XR (32-bit and 64-bit) 6.1.x and l
|
||||||
ifstats,path=ietf-interfaces:interfaces-state/interface/statistics,host=linux,name=GigabitEthernet2,source=csr1kv,subscription=101 in-unicast-pkts=27i,in-multicast-pkts=0i,discontinuity-time="2019-05-23T07:40:23.000362+00:00",in-octets=5233i,in-errors=0i,out-multicast-pkts=0i,out-discards=0i,in-broadcast-pkts=0i,in-discards=0i,in-unknown-protos=0i,out-unicast-pkts=0i,out-broadcast-pkts=0i,out-octets=0i,out-errors=0i 1559150462624000000
|
ifstats,path=ietf-interfaces:interfaces-state/interface/statistics,host=linux,name=GigabitEthernet2,source=csr1kv,subscription=101 in-unicast-pkts=27i,in-multicast-pkts=0i,discontinuity-time="2019-05-23T07:40:23.000362+00:00",in-octets=5233i,in-errors=0i,out-multicast-pkts=0i,out-discards=0i,in-broadcast-pkts=0i,in-discards=0i,in-unknown-protos=0i,out-unicast-pkts=0i,out-broadcast-pkts=0i,out-octets=0i,out-errors=0i 1559150462624000000
|
||||||
ifstats,path=ietf-interfaces:interfaces-state/interface/statistics,host=linux,name=GigabitEthernet1,source=csr1kv,subscription=101 in-octets=3394770806i,in-broadcast-pkts=0i,in-multicast-pkts=0i,out-broadcast-pkts=0i,in-unknown-protos=0i,out-octets=350212i,in-unicast-pkts=9477273i,in-discards=0i,out-unicast-pkts=2726i,out-discards=0i,discontinuity-time="2019-05-23T07:40:23.000363+00:00",in-errors=30i,out-multicast-pkts=0i,out-errors=0i 1559150462624000000
|
ifstats,path=ietf-interfaces:interfaces-state/interface/statistics,host=linux,name=GigabitEthernet1,source=csr1kv,subscription=101 in-octets=3394770806i,in-broadcast-pkts=0i,in-multicast-pkts=0i,out-broadcast-pkts=0i,in-unknown-protos=0i,out-octets=350212i,in-unicast-pkts=9477273i,in-discards=0i,out-unicast-pkts=2726i,out-discards=0i,discontinuity-time="2019-05-23T07:40:23.000363+00:00",in-errors=30i,out-multicast-pkts=0i,out-errors=0i 1559150462624000000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### NX-OS Configuration Example:
|
||||||
|
```
|
||||||
|
Requirement DATA-SOURCE Configuration
|
||||||
|
-----------------------------------------
|
||||||
|
Environment DME path sys/ch query-condition query-target=subtree&target-subtree-class=eqptPsuSlot,eqptFtSlot,eqptSupCSlot,eqptPsu,eqptFt,eqptSensor,eqptLCSlot
|
||||||
|
DME path sys/ch depth 5 (Another configuration option)
|
||||||
|
Environment NXAPI show environment power
|
||||||
|
NXAPI show environment fan
|
||||||
|
NXAPI show environment temperature
|
||||||
|
Interface Stats DME path sys/intf query-condition query-target=subtree&target-subtree-class=rmonIfIn,rmonIfOut,rmonIfHCIn,rmonIfHCOut,rmonEtherStats
|
||||||
|
Interface State DME path sys/intf depth unbounded query-condition query-target=subtree&target-subtree-class=l1PhysIf,pcAggrIf,l3EncRtdIf,l3LbRtdIf,ethpmPhysIf
|
||||||
|
VPC DME path sys/vpc query-condition query-target=subtree&target-subtree-class=vpcDom,vpcIf
|
||||||
|
Resources cpu DME path sys/procsys query-condition query-target=subtree&target-subtree-class=procSystem,procSysCore,procSysCpuSummary,procSysCpu,procIdle,procIrq,procKernel,procNice,procSoftirq,procTotal,procUser,procWait,procSysCpuHistory,procSysLoad
|
||||||
|
Resources Mem DME path sys/procsys/sysmem/sysmemused
|
||||||
|
path sys/procsys/sysmem/sysmemusage
|
||||||
|
path sys/procsys/sysmem/sysmemfree
|
||||||
|
Per Process cpu DME path sys/proc depth unbounded query-condition rsp-foreign-subtree=ephemeral
|
||||||
|
vxlan(svi stats) DME path sys/bd query-condition query-target=subtree&target-subtree-class=l2VlanStats
|
||||||
|
BGP DME path sys/bgp query-condition query-target=subtree&target-subtree-class=bgpDom,bgpPeer,bgpPeerAf,bgpDomAf,bgpPeerAfEntry,bgpOperRtctrlL3,bgpOperRttP,bgpOperRttEntry,bgpOperAfCtrl
|
||||||
|
mac dynamic DME path sys/mac query-condition query-target=subtree&target-subtree-class=l2MacAddressTable
|
||||||
|
bfd DME path sys/bfd/inst depth unbounded
|
||||||
|
lldp DME path sys/lldp depth unbounded
|
||||||
|
urib DME path sys/urib depth unbounded query-condition rsp-foreign-subtree=ephemeral
|
||||||
|
u6rib DME path sys/u6rib depth unbounded query-condition rsp-foreign-subtree=ephemeral
|
||||||
|
multicast flow DME path sys/mca/show/flows depth unbounded
|
||||||
|
multicast stats DME path sys/mca/show/stats depth unbounded
|
||||||
|
multicast igmp NXAPI show ip igmp groups vrf all
|
||||||
|
multicast igmp NXAPI show ip igmp interface vrf all
|
||||||
|
multicast igmp NXAPI show ip igmp snooping
|
||||||
|
multicast igmp NXAPI show ip igmp snooping groups
|
||||||
|
multicast igmp NXAPI show ip igmp snooping groups detail
|
||||||
|
multicast igmp NXAPI show ip igmp snooping groups summary
|
||||||
|
multicast igmp NXAPI show ip igmp snooping mrouter
|
||||||
|
multicast igmp NXAPI show ip igmp snooping statistics
|
||||||
|
multicast pim NXAPI show ip pim interface vrf all
|
||||||
|
multicast pim NXAPI show ip pim neighbor vrf all
|
||||||
|
multicast pim NXAPI show ip pim route vrf all
|
||||||
|
multicast pim NXAPI show ip pim rp vrf all
|
||||||
|
multicast pim NXAPI show ip pim statistics vrf all
|
||||||
|
multicast pim NXAPI show ip pim vrf all
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package cisco_telemetry_mdt
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
|
@ -37,6 +38,7 @@ type CiscoTelemetryMDT struct {
|
||||||
ServiceAddress string `toml:"service_address"`
|
ServiceAddress string `toml:"service_address"`
|
||||||
MaxMsgSize int `toml:"max_msg_size"`
|
MaxMsgSize int `toml:"max_msg_size"`
|
||||||
Aliases map[string]string `toml:"aliases"`
|
Aliases map[string]string `toml:"aliases"`
|
||||||
|
Dmes map[string]string `toml:"dmes"`
|
||||||
EmbeddedTags []string `toml:"embedded_tags"`
|
EmbeddedTags []string `toml:"embedded_tags"`
|
||||||
|
|
||||||
Log telegraf.Logger
|
Log telegraf.Logger
|
||||||
|
|
@ -50,13 +52,24 @@ type CiscoTelemetryMDT struct {
|
||||||
|
|
||||||
// Internal state
|
// Internal state
|
||||||
aliases map[string]string
|
aliases map[string]string
|
||||||
|
dmesFuncs map[string]string
|
||||||
warned map[string]struct{}
|
warned map[string]struct{}
|
||||||
extraTags map[string]map[string]struct{}
|
extraTags map[string]map[string]struct{}
|
||||||
|
nxpathMap map[string]map[string]string //per path map
|
||||||
|
propMap map[string]func(field *telemetry.TelemetryField, value interface{}) interface{}
|
||||||
mutex sync.Mutex
|
mutex sync.Mutex
|
||||||
acc telegraf.Accumulator
|
acc telegraf.Accumulator
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NxPayloadXfromStructure struct {
|
||||||
|
Name string `json:"Name"`
|
||||||
|
Prop []struct {
|
||||||
|
Key string `json:"Key"`
|
||||||
|
Value string `json:"Value"`
|
||||||
|
} `json:"prop"`
|
||||||
|
}
|
||||||
|
|
||||||
// Start the Cisco MDT service
|
// Start the Cisco MDT service
|
||||||
func (c *CiscoTelemetryMDT) Start(acc telegraf.Accumulator) error {
|
func (c *CiscoTelemetryMDT) Start(acc telegraf.Accumulator) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
@ -66,12 +79,55 @@ func (c *CiscoTelemetryMDT) Start(acc telegraf.Accumulator) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.propMap = make(map[string]func(field *telemetry.TelemetryField, value interface{}) interface{}, 100)
|
||||||
|
c.propMap["test"] = nxosValueXformUint64Toint64
|
||||||
|
c.propMap["asn"] = nxosValueXformUint64ToString //uint64 to string.
|
||||||
|
c.propMap["subscriptionId"] = nxosValueXformUint64ToString //uint64 to string.
|
||||||
|
c.propMap["operState"] = nxosValueXformUint64ToString //uint64 to string.
|
||||||
|
|
||||||
// Invert aliases list
|
// Invert aliases list
|
||||||
c.warned = make(map[string]struct{})
|
c.warned = make(map[string]struct{})
|
||||||
c.aliases = make(map[string]string, len(c.Aliases))
|
c.aliases = make(map[string]string, len(c.Aliases))
|
||||||
for alias, path := range c.Aliases {
|
for alias, path := range c.Aliases {
|
||||||
c.aliases[path] = alias
|
c.aliases[path] = alias
|
||||||
}
|
}
|
||||||
|
c.initDb()
|
||||||
|
|
||||||
|
c.dmesFuncs = make(map[string]string, len(c.Dmes))
|
||||||
|
for dme, path := range c.Dmes {
|
||||||
|
c.dmesFuncs[path] = dme
|
||||||
|
switch path {
|
||||||
|
case "uint64 to int":
|
||||||
|
c.propMap[dme] = nxosValueXformUint64Toint64
|
||||||
|
case "uint64 to string":
|
||||||
|
c.propMap[dme] = nxosValueXformUint64ToString
|
||||||
|
case "string to float64":
|
||||||
|
c.propMap[dme] = nxosValueXformStringTofloat
|
||||||
|
case "string to uint64":
|
||||||
|
c.propMap[dme] = nxosValueXformStringToUint64
|
||||||
|
case "string to int64":
|
||||||
|
c.propMap[dme] = nxosValueXformStringToInt64
|
||||||
|
case "auto-float-xfrom":
|
||||||
|
c.propMap[dme] = nxosValueAutoXformFloatProp
|
||||||
|
default:
|
||||||
|
if !strings.HasPrefix(dme, "dnpath") { // not path based property map
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsStruct NxPayloadXfromStructure
|
||||||
|
err := json.Unmarshal([]byte(path), &jsStruct)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build 2 level Hash nxpathMap Key = jsStruct.Name, Value = map of jsStruct.Prop
|
||||||
|
// It will override the default of code if same path is provided in configuration.
|
||||||
|
c.nxpathMap[jsStruct.Name] = make(map[string]string, len(jsStruct.Prop))
|
||||||
|
for _, prop := range jsStruct.Prop {
|
||||||
|
c.nxpathMap[jsStruct.Name][prop.Key] = prop.Value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Fill extra tags
|
// Fill extra tags
|
||||||
c.extraTags = make(map[string]map[string]struct{})
|
c.extraTags = make(map[string]map[string]struct{})
|
||||||
|
|
@ -296,7 +352,9 @@ func (c *CiscoTelemetryMDT) handleTelemetry(data []byte) {
|
||||||
// Parse keys
|
// Parse keys
|
||||||
tags = make(map[string]string, len(keys.Fields)+3)
|
tags = make(map[string]string, len(keys.Fields)+3)
|
||||||
tags["source"] = msg.GetNodeIdStr()
|
tags["source"] = msg.GetNodeIdStr()
|
||||||
tags["subscription"] = msg.GetSubscriptionIdStr()
|
if msgID := msg.GetSubscriptionIdStr(); msgID != "" {
|
||||||
|
tags["subscription"] = msgID
|
||||||
|
}
|
||||||
tags["path"] = msg.GetEncodingPath()
|
tags["path"] = msg.GetEncodingPath()
|
||||||
|
|
||||||
for _, subfield := range keys.Fields {
|
for _, subfield := range keys.Fields {
|
||||||
|
|
@ -391,9 +449,72 @@ func (c *CiscoTelemetryMDT) parseKeyField(tags map[string]string, field *telemet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) parseRib(grouper *metric.SeriesGrouper, field *telemetry.TelemetryField, prefix string, path string, tags map[string]string, timestamp time.Time) {
|
||||||
|
// RIB
|
||||||
|
measurement := path
|
||||||
|
for _, subfield := range field.Fields {
|
||||||
|
//For Every table fill the keys which are vrfName, address and masklen
|
||||||
|
switch subfield.Name {
|
||||||
|
case "vrfName", "address", "maskLen":
|
||||||
|
tags[subfield.Name] = decodeTag(subfield)
|
||||||
|
}
|
||||||
|
if value := decodeValue(subfield); value != nil {
|
||||||
|
grouper.Add(measurement, tags, timestamp, subfield.Name, value)
|
||||||
|
}
|
||||||
|
if subfield.Name != "nextHop" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
//For next hop table fill the keys in the tag - which is address and vrfname
|
||||||
|
for _, subf := range subfield.Fields {
|
||||||
|
for _, ff := range subf.Fields {
|
||||||
|
switch ff.Name {
|
||||||
|
case "address", "vrfName":
|
||||||
|
key := "nextHop/" + ff.Name
|
||||||
|
tags[key] = decodeTag(ff)
|
||||||
|
}
|
||||||
|
if value := decodeValue(ff); value != nil {
|
||||||
|
name := "nextHop/" + ff.Name
|
||||||
|
grouper.Add(measurement, tags, timestamp, name, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) parseClassAttributeField(grouper *metric.SeriesGrouper, field *telemetry.TelemetryField, prefix string, path string, tags map[string]string, timestamp time.Time) {
|
||||||
|
// DME structure: https://developer.cisco.com/site/nxapi-dme-model-reference-api/
|
||||||
|
var nxAttributes *telemetry.TelemetryField
|
||||||
|
isDme := strings.Contains(path, "sys/")
|
||||||
|
if path == "rib" {
|
||||||
|
//handle native data path rib
|
||||||
|
c.parseRib(grouper, field, prefix, path, tags, timestamp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if field == nil || !isDme || len(field.Fields) == 0 || len(field.Fields[0].Fields) == 0 || len(field.Fields[0].Fields[0].Fields) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if field.Fields[0] != nil && field.Fields[0].Fields != nil && field.Fields[0].Fields[0] != nil && field.Fields[0].Fields[0].Fields[0].Name != "attributes" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nxAttributes = field.Fields[0].Fields[0].Fields[0].Fields[0]
|
||||||
|
|
||||||
|
for _, subfield := range nxAttributes.Fields {
|
||||||
|
if subfield.Name == "dn" {
|
||||||
|
tags["dn"] = decodeTag(subfield)
|
||||||
|
} else {
|
||||||
|
c.parseContentField(grouper, subfield, "", path, tags, timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *CiscoTelemetryMDT) parseContentField(grouper *metric.SeriesGrouper, field *telemetry.TelemetryField, prefix string,
|
func (c *CiscoTelemetryMDT) parseContentField(grouper *metric.SeriesGrouper, field *telemetry.TelemetryField, prefix string,
|
||||||
path string, tags map[string]string, timestamp time.Time) {
|
path string, tags map[string]string, timestamp time.Time) {
|
||||||
name := strings.Replace(field.Name, "-", "_", -1)
|
name := strings.Replace(field.Name, "-", "_", -1)
|
||||||
|
|
||||||
|
if (name == "modTs" || name == "createTs") && decodeValue(field) == "never" {
|
||||||
|
return
|
||||||
|
}
|
||||||
if len(name) == 0 {
|
if len(name) == 0 {
|
||||||
name = prefix
|
name = prefix
|
||||||
} else if len(prefix) > 0 {
|
} else if len(prefix) > 0 {
|
||||||
|
|
@ -416,7 +537,11 @@ func (c *CiscoTelemetryMDT) parseContentField(grouper *metric.SeriesGrouper, fie
|
||||||
c.mutex.Unlock()
|
c.mutex.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
grouper.Add(measurement, tags, timestamp, name, value)
|
if val := c.nxosValueXform(field, value, path); val != nil {
|
||||||
|
grouper.Add(measurement, tags, timestamp, name, val)
|
||||||
|
} else {
|
||||||
|
grouper.Add(measurement, tags, timestamp, name, value)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -430,11 +555,28 @@ func (c *CiscoTelemetryMDT) parseContentField(grouper *metric.SeriesGrouper, fie
|
||||||
|
|
||||||
var nxAttributes, nxChildren, nxRows *telemetry.TelemetryField
|
var nxAttributes, nxChildren, nxRows *telemetry.TelemetryField
|
||||||
isNXOS := !strings.ContainsRune(path, ':') // IOS-XR and IOS-XE have a colon in their encoding path, NX-OS does not
|
isNXOS := !strings.ContainsRune(path, ':') // IOS-XR and IOS-XE have a colon in their encoding path, NX-OS does not
|
||||||
|
isEVENT := isNXOS && strings.Contains(path, "EVENT-LIST")
|
||||||
|
nxChildren = nil
|
||||||
|
nxAttributes = nil
|
||||||
for _, subfield := range field.Fields {
|
for _, subfield := range field.Fields {
|
||||||
if isNXOS && subfield.Name == "attributes" && len(subfield.Fields) > 0 {
|
if isNXOS && subfield.Name == "attributes" && len(subfield.Fields) > 0 {
|
||||||
nxAttributes = subfield.Fields[0]
|
nxAttributes = subfield.Fields[0]
|
||||||
} else if isNXOS && subfield.Name == "children" && len(subfield.Fields) > 0 {
|
} else if isNXOS && subfield.Name == "children" && len(subfield.Fields) > 0 {
|
||||||
nxChildren = subfield
|
if !isEVENT {
|
||||||
|
nxChildren = subfield
|
||||||
|
} else {
|
||||||
|
sub := subfield.Fields
|
||||||
|
if len(sub) > 0 && sub[0] != nil && sub[0].Fields[0].Name == "subscriptionId" && len(sub[0].Fields) >= 2 {
|
||||||
|
nxAttributes = sub[0].Fields[1].Fields[0].Fields[0].Fields[0].Fields[0].Fields[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//if nxAttributes == NULL then class based query.
|
||||||
|
if nxAttributes == nil {
|
||||||
|
//call function walking over walking list.
|
||||||
|
for _, sub := range subfield.Fields {
|
||||||
|
c.parseClassAttributeField(grouper, sub, name, path, tags, timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if isNXOS && strings.HasPrefix(subfield.Name, "ROW_") {
|
} else if isNXOS && strings.HasPrefix(subfield.Name, "ROW_") {
|
||||||
nxRows = subfield
|
nxRows = subfield
|
||||||
} else if _, isExtraTag := extraTags[subfield.Name]; !isExtraTag { // Regular telemetry decoding
|
} else if _, isExtraTag := extraTags[subfield.Name]; !isExtraTag { // Regular telemetry decoding
|
||||||
|
|
@ -450,9 +592,16 @@ func (c *CiscoTelemetryMDT) parseContentField(grouper *metric.SeriesGrouper, fie
|
||||||
for i, subfield := range row.Fields {
|
for i, subfield := range row.Fields {
|
||||||
if i == 0 { // First subfield contains the index, promote it from value to tag
|
if i == 0 { // First subfield contains the index, promote it from value to tag
|
||||||
tags[prefix] = decodeTag(subfield)
|
tags[prefix] = decodeTag(subfield)
|
||||||
|
//We can have subfield so recursively handle it.
|
||||||
|
if len(row.Fields) == 1 {
|
||||||
|
tags["row_number"] = strconv.FormatInt(int64(i), 10)
|
||||||
|
c.parseContentField(grouper, subfield, "", path, tags, timestamp)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
c.parseContentField(grouper, subfield, "", path, tags, timestamp)
|
c.parseContentField(grouper, subfield, "", path, tags, timestamp)
|
||||||
}
|
}
|
||||||
|
// Nxapi we can't identify keys always from prefix
|
||||||
|
tags["row_number"] = strconv.FormatInt(int64(i), 10)
|
||||||
}
|
}
|
||||||
delete(tags, prefix)
|
delete(tags, prefix)
|
||||||
}
|
}
|
||||||
|
|
@ -531,6 +680,10 @@ const sampleConfig = `
|
||||||
## Define aliases to map telemetry encoding paths to simple measurement names
|
## Define aliases to map telemetry encoding paths to simple measurement names
|
||||||
[inputs.cisco_telemetry_mdt.aliases]
|
[inputs.cisco_telemetry_mdt.aliases]
|
||||||
ifstats = "ietf-interfaces:interfaces-state/interface/statistics"
|
ifstats = "ietf-interfaces:interfaces-state/interface/statistics"
|
||||||
|
##Define Property Xformation, please refer README and https://pubhub.devnetcloud.com/media/dme-docs-9-3-3/docs/appendix/ for Model details.
|
||||||
|
[inputs.cisco_telemetry_mdt.dmes]
|
||||||
|
ModTs = "ignore"
|
||||||
|
CreateTs = "ignore"
|
||||||
`
|
`
|
||||||
|
|
||||||
// SampleConfig of plugin
|
// SampleConfig of plugin
|
||||||
|
|
|
||||||
|
|
@ -311,14 +311,171 @@ func TestHandleNXAPI(t *testing.T) {
|
||||||
c.handleTelemetry(data)
|
c.handleTelemetry(data)
|
||||||
require.Empty(t, acc.Errors)
|
require.Empty(t, acc.Errors)
|
||||||
|
|
||||||
tags1 := map[string]string{"path": "show nxapi", "foo": "bar", "TABLE_nxapi": "i1", "source": "hostname", "subscription": "subscription"}
|
tags1 := map[string]string{"path": "show nxapi", "foo": "bar", "TABLE_nxapi": "i1", "row_number": "0", "source": "hostname", "subscription": "subscription"}
|
||||||
fields1 := map[string]interface{}{"value": "foo"}
|
fields1 := map[string]interface{}{"value": "foo"}
|
||||||
tags2 := map[string]string{"path": "show nxapi", "foo": "bar", "TABLE_nxapi": "i2", "source": "hostname", "subscription": "subscription"}
|
tags2 := map[string]string{"path": "show nxapi", "foo": "bar", "TABLE_nxapi": "i2", "row_number": "0", "source": "hostname", "subscription": "subscription"}
|
||||||
fields2 := map[string]interface{}{"value": "bar"}
|
fields2 := map[string]interface{}{"value": "bar"}
|
||||||
acc.AssertContainsTaggedFields(t, "nxapi", fields1, tags1)
|
acc.AssertContainsTaggedFields(t, "nxapi", fields1, tags1)
|
||||||
acc.AssertContainsTaggedFields(t, "nxapi", fields2, tags2)
|
acc.AssertContainsTaggedFields(t, "nxapi", fields2, tags2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHandleNXAPIXformNXAPI(t *testing.T) {
|
||||||
|
c := &CiscoTelemetryMDT{Log: testutil.Logger{}, Transport: "dummy", Aliases: map[string]string{"nxapi": "show nxapi"}}
|
||||||
|
acc := &testutil.Accumulator{}
|
||||||
|
err := c.Start(acc)
|
||||||
|
// error is expected since we are passing in dummy transport
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
telemetry := &telemetry.Telemetry{
|
||||||
|
MsgTimestamp: 1543236572000,
|
||||||
|
EncodingPath: "show processes cpu",
|
||||||
|
NodeId: &telemetry.Telemetry_NodeIdStr{NodeIdStr: "hostname"},
|
||||||
|
Subscription: &telemetry.Telemetry_SubscriptionIdStr{SubscriptionIdStr: "subscription"},
|
||||||
|
DataGpbkv: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "keys",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "foo",
|
||||||
|
ValueByType: &telemetry.TelemetryField_StringValue{StringValue: "bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "content",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "TABLE_process_cpu",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "ROW_process_cpu",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "index",
|
||||||
|
ValueByType: &telemetry.TelemetryField_StringValue{StringValue: "i1"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "value",
|
||||||
|
ValueByType: &telemetry.TelemetryField_StringValue{StringValue: "foo"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
data, _ := proto.Marshal(telemetry)
|
||||||
|
|
||||||
|
c.handleTelemetry(data)
|
||||||
|
require.Empty(t, acc.Errors)
|
||||||
|
|
||||||
|
tags1 := map[string]string{"path": "show processes cpu", "foo": "bar", "TABLE_process_cpu": "i1", "row_number": "0", "source": "hostname", "subscription": "subscription"}
|
||||||
|
fields1 := map[string]interface{}{"value": "foo"}
|
||||||
|
acc.AssertContainsTaggedFields(t, "show processes cpu", fields1, tags1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHandleNXXformMulti(t *testing.T) {
|
||||||
|
c := &CiscoTelemetryMDT{Transport: "dummy", Aliases: map[string]string{"dme": "sys/lldp"}}
|
||||||
|
acc := &testutil.Accumulator{}
|
||||||
|
err := c.Start(acc)
|
||||||
|
// error is expected since we are passing in dummy transport
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
telemetry := &telemetry.Telemetry{
|
||||||
|
MsgTimestamp: 1543236572000,
|
||||||
|
EncodingPath: "sys/lldp",
|
||||||
|
NodeId: &telemetry.Telemetry_NodeIdStr{NodeIdStr: "hostname"},
|
||||||
|
Subscription: &telemetry.Telemetry_SubscriptionIdStr{SubscriptionIdStr: "subscription"},
|
||||||
|
DataGpbkv: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "keys",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "foo",
|
||||||
|
ValueByType: &telemetry.TelemetryField_StringValue{StringValue: "bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "content",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "fooEntity",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "attributes",
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Fields: []*telemetry.TelemetryField{
|
||||||
|
{
|
||||||
|
Name: "rn",
|
||||||
|
ValueByType: &telemetry.TelemetryField_StringValue{StringValue: "some-rn"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "portIdV",
|
||||||
|
ValueByType: &telemetry.TelemetryField_Uint32Value{Uint32Value: 12},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "portDesc",
|
||||||
|
ValueByType: &telemetry.TelemetryField_Uint64Value{Uint64Value: 100},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "test",
|
||||||
|
ValueByType: &telemetry.TelemetryField_Uint64Value{Uint64Value: 281474976710655},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "subscriptionId",
|
||||||
|
ValueByType: &telemetry.TelemetryField_Uint64Value{Uint64Value: 2814749767106551},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
data, _ := proto.Marshal(telemetry)
|
||||||
|
|
||||||
|
c.handleTelemetry(data)
|
||||||
|
require.Empty(t, acc.Errors)
|
||||||
|
//validate various transformation scenaarios newly added in the code.
|
||||||
|
fields := map[string]interface{}{"portIdV": "12", "portDesc": "100", "test": int64(281474976710655), "subscriptionId": "2814749767106551"}
|
||||||
|
acc.AssertContainsFields(t, "dme", fields)
|
||||||
|
}
|
||||||
|
|
||||||
func TestHandleNXDME(t *testing.T) {
|
func TestHandleNXDME(t *testing.T) {
|
||||||
c := &CiscoTelemetryMDT{Transport: "dummy", Aliases: map[string]string{"dme": "sys/dme"}}
|
c := &CiscoTelemetryMDT{Transport: "dummy", Aliases: map[string]string{"dme": "sys/dme"}}
|
||||||
acc := &testutil.Accumulator{}
|
acc := &testutil.Accumulator{}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,892 @@
|
||||||
|
package cisco_telemetry_mdt
|
||||||
|
|
||||||
|
import (
|
||||||
|
telemetry "github.com/cisco-ie/nx-telemetry-proto/telemetry_bis"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
//xform Field to string
|
||||||
|
func xformValueString(field *telemetry.TelemetryField) string {
|
||||||
|
var str string
|
||||||
|
switch val := field.ValueByType.(type) {
|
||||||
|
case *telemetry.TelemetryField_StringValue:
|
||||||
|
if len(val.StringValue) > 0 {
|
||||||
|
return val.StringValue
|
||||||
|
}
|
||||||
|
case *telemetry.TelemetryField_Uint32Value:
|
||||||
|
str = strconv.FormatUint(uint64(val.Uint32Value), 10)
|
||||||
|
return str
|
||||||
|
case *telemetry.TelemetryField_Uint64Value:
|
||||||
|
str = strconv.FormatUint(val.Uint64Value, 10)
|
||||||
|
return str
|
||||||
|
case *telemetry.TelemetryField_Sint32Value:
|
||||||
|
str = strconv.FormatInt(int64(val.Sint32Value), 10)
|
||||||
|
return str
|
||||||
|
case *telemetry.TelemetryField_Sint64Value:
|
||||||
|
str = strconv.FormatInt(val.Sint64Value, 10)
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
//xform Uint64 to int64
|
||||||
|
func nxosValueXformUint64Toint64(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
if field.GetUint64Value() != 0 {
|
||||||
|
return int64(value.(uint64))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//xform string to float
|
||||||
|
func nxosValueXformStringTofloat(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
//convert property to float from string.
|
||||||
|
vals := field.GetStringValue()
|
||||||
|
if vals != "" {
|
||||||
|
if valf, err := strconv.ParseFloat(vals, 64); err == nil {
|
||||||
|
return valf
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//xform string to uint64
|
||||||
|
func nxosValueXformStringToUint64(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
//string to uint64
|
||||||
|
vals := field.GetStringValue()
|
||||||
|
if vals != "" {
|
||||||
|
if val64, err := strconv.ParseUint(vals, 10, 64); err == nil {
|
||||||
|
return val64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//xform string to int64
|
||||||
|
func nxosValueXformStringToInt64(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
//string to int64
|
||||||
|
vals := field.GetStringValue()
|
||||||
|
if vals != "" {
|
||||||
|
if val64, err := strconv.ParseInt(vals, 10, 64); err == nil {
|
||||||
|
return val64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//auto-xform
|
||||||
|
func nxosValueAutoXform(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
//check if we want auto xformation
|
||||||
|
vals := field.GetStringValue()
|
||||||
|
if vals != "" {
|
||||||
|
if val64, err := strconv.ParseUint(vals, 10, 64); err == nil {
|
||||||
|
return val64
|
||||||
|
}
|
||||||
|
if valf, err := strconv.ParseFloat(vals, 64); err == nil {
|
||||||
|
return valf
|
||||||
|
}
|
||||||
|
if val64, err := strconv.ParseInt(vals, 10, 64); err == nil {
|
||||||
|
return val64
|
||||||
|
}
|
||||||
|
} // switch
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//auto-xform float properties
|
||||||
|
func nxosValueAutoXformFloatProp(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
//check if we want auto xformation
|
||||||
|
vals := field.GetStringValue()
|
||||||
|
if vals != "" {
|
||||||
|
if valf, err := strconv.ParseFloat(vals, 64); err == nil {
|
||||||
|
return valf
|
||||||
|
}
|
||||||
|
} // switch
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//xform uint64 to string
|
||||||
|
func nxosValueXformUint64ToString(field *telemetry.TelemetryField, value interface{}) interface{} {
|
||||||
|
switch val := field.ValueByType.(type) {
|
||||||
|
case *telemetry.TelemetryField_StringValue:
|
||||||
|
if len(val.StringValue) > 0 {
|
||||||
|
return val.StringValue
|
||||||
|
}
|
||||||
|
case *telemetry.TelemetryField_Uint64Value:
|
||||||
|
return strconv.FormatUint(val.Uint64Value, 10)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//Xform value field.
|
||||||
|
func (c *CiscoTelemetryMDT) nxosValueXform(field *telemetry.TelemetryField, value interface{}, path string) interface{} {
|
||||||
|
if strings.ContainsRune(path, ':') {
|
||||||
|
// not NXOS
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if _, ok := c.propMap[field.Name]; ok {
|
||||||
|
return c.propMap[field.Name](field, value)
|
||||||
|
}
|
||||||
|
//check if we want auto xformation
|
||||||
|
if _, ok := c.propMap["auto-prop-xfromi"]; ok {
|
||||||
|
return c.propMap["auto-prop-xfrom"](field, value)
|
||||||
|
}
|
||||||
|
//Now check path based conversion.
|
||||||
|
//If mapping is found then do the required transformation.
|
||||||
|
if c.nxpathMap[path] == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
switch c.nxpathMap[path][field.Name] {
|
||||||
|
//Xformation supported is only from String, Uint32 and Uint64
|
||||||
|
case "integer":
|
||||||
|
switch val := field.ValueByType.(type) {
|
||||||
|
case *telemetry.TelemetryField_StringValue:
|
||||||
|
if vali, err := strconv.ParseInt(val.StringValue, 10, 32); err == nil {
|
||||||
|
return vali
|
||||||
|
}
|
||||||
|
case *telemetry.TelemetryField_Uint32Value:
|
||||||
|
vali, ok := value.(uint32)
|
||||||
|
if ok == true {
|
||||||
|
return vali
|
||||||
|
}
|
||||||
|
case *telemetry.TelemetryField_Uint64Value:
|
||||||
|
vali, ok := value.(uint64)
|
||||||
|
if ok == true {
|
||||||
|
return vali
|
||||||
|
}
|
||||||
|
} //switch
|
||||||
|
return nil
|
||||||
|
//Xformation supported is only from String
|
||||||
|
case "float":
|
||||||
|
switch val := field.ValueByType.(type) {
|
||||||
|
case *telemetry.TelemetryField_StringValue:
|
||||||
|
if valf, err := strconv.ParseFloat(val.StringValue, 64); err == nil {
|
||||||
|
return valf
|
||||||
|
}
|
||||||
|
} //switch
|
||||||
|
return nil
|
||||||
|
case "string":
|
||||||
|
return xformValueString(field)
|
||||||
|
case "int64":
|
||||||
|
switch val := field.ValueByType.(type) {
|
||||||
|
case *telemetry.TelemetryField_StringValue:
|
||||||
|
if vali, err := strconv.ParseInt(val.StringValue, 10, 64); err == nil {
|
||||||
|
return vali
|
||||||
|
}
|
||||||
|
case *telemetry.TelemetryField_Uint64Value:
|
||||||
|
return int64(value.(uint64))
|
||||||
|
} //switch
|
||||||
|
} //switch
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initMemPhys() {
|
||||||
|
c.nxpathMap["show processes memory physical"] = map[string]string{"processname": "string"}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initBgpV4() {
|
||||||
|
key := "show bgp ipv4 unicast"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 1)
|
||||||
|
c.nxpathMap[key]["aspath"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initCpu() {
|
||||||
|
key := "show processes cpu"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 5)
|
||||||
|
c.nxpathMap[key]["kernel_percent"] = "float"
|
||||||
|
c.nxpathMap[key]["idle_percent"] = "float"
|
||||||
|
c.nxpathMap[key]["process"] = "string"
|
||||||
|
c.nxpathMap[key]["user_percent"] = "float"
|
||||||
|
c.nxpathMap[key]["onesec"] = "float"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initResources() {
|
||||||
|
key := "show system resources"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["cpu_state_user"] = "float"
|
||||||
|
c.nxpathMap[key]["kernel"] = "float"
|
||||||
|
c.nxpathMap[key]["current_memory_status"] = "string"
|
||||||
|
c.nxpathMap[key]["load_avg_15min"] = "float"
|
||||||
|
c.nxpathMap[key]["idle"] = "float"
|
||||||
|
c.nxpathMap[key]["load_avg_1min"] = "float"
|
||||||
|
c.nxpathMap[key]["user"] = "float"
|
||||||
|
c.nxpathMap[key]["cpu_state_idle"] = "float"
|
||||||
|
c.nxpathMap[key]["load_avg_5min"] = "float"
|
||||||
|
c.nxpathMap[key]["cpu_state_kernel"] = "float"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPower() {
|
||||||
|
key := "show environment power"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 100)
|
||||||
|
c.nxpathMap[key]["reserve_sup"] = "string"
|
||||||
|
c.nxpathMap[key]["det_volt"] = "string"
|
||||||
|
c.nxpathMap[key]["heatsink_temp"] = "string"
|
||||||
|
c.nxpathMap[key]["det_pintot"] = "string"
|
||||||
|
c.nxpathMap[key]["det_iinb"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_input_current"] = "string"
|
||||||
|
c.nxpathMap[key]["modnum"] = "string"
|
||||||
|
c.nxpathMap[key]["trayfannum"] = "string"
|
||||||
|
c.nxpathMap[key]["modstatus_3k"] = "string"
|
||||||
|
c.nxpathMap[key]["fan2rpm"] = "string"
|
||||||
|
c.nxpathMap[key]["amps_alloced"] = "string"
|
||||||
|
c.nxpathMap[key]["all_inlets_connected"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_pow_out_actual_draw"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_redun_op_mode"] = "string"
|
||||||
|
c.nxpathMap[key]["curtemp"] = "string"
|
||||||
|
c.nxpathMap[key]["mod_model"] = "string"
|
||||||
|
c.nxpathMap[key]["fanmodel"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_output_current"] = "string"
|
||||||
|
c.nxpathMap[key]["majthres"] = "string"
|
||||||
|
c.nxpathMap[key]["input_type"] = "string"
|
||||||
|
c.nxpathMap[key]["allocated"] = "string"
|
||||||
|
c.nxpathMap[key]["fanhwver"] = "string"
|
||||||
|
c.nxpathMap[key]["clkhwver"] = "string"
|
||||||
|
c.nxpathMap[key]["fannum"] = "string"
|
||||||
|
c.nxpathMap[key]["watts_requested"] = "string"
|
||||||
|
c.nxpathMap[key]["cumulative_power"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_gridB_capacity"] = "string"
|
||||||
|
c.nxpathMap[key]["pow_used_by_mods"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_pow_alloc_budgeted"] = "string"
|
||||||
|
c.nxpathMap[key]["psumod"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_status_3k"] = "string"
|
||||||
|
c.nxpathMap[key]["temptype"] = "string"
|
||||||
|
c.nxpathMap[key]["regval"] = "string"
|
||||||
|
c.nxpathMap[key]["inlet_temp"] = "string"
|
||||||
|
c.nxpathMap[key]["det_cord"] = "string"
|
||||||
|
c.nxpathMap[key]["reserve_fan"] = "string"
|
||||||
|
c.nxpathMap[key]["det_pina"] = "string"
|
||||||
|
c.nxpathMap[key]["minthres"] = "string"
|
||||||
|
c.nxpathMap[key]["actual_draw"] = "string"
|
||||||
|
c.nxpathMap[key]["sensor"] = "string"
|
||||||
|
c.nxpathMap[key]["zone"] = "string"
|
||||||
|
c.nxpathMap[key]["det_iin"] = "string"
|
||||||
|
c.nxpathMap[key]["det_iout"] = "string"
|
||||||
|
c.nxpathMap[key]["det_vin"] = "string"
|
||||||
|
c.nxpathMap[key]["fan1rpm"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_gridA_capacity"] = "string"
|
||||||
|
c.nxpathMap[key]["fanperc"] = "string"
|
||||||
|
c.nxpathMap[key]["det_pout"] = "string"
|
||||||
|
c.nxpathMap[key]["alarm_str"] = "string"
|
||||||
|
c.nxpathMap[key]["zonespeed"] = "string"
|
||||||
|
c.nxpathMap[key]["det_total_cap"] = "string"
|
||||||
|
c.nxpathMap[key]["reserve_xbar"] = "string"
|
||||||
|
c.nxpathMap[key]["det_vout"] = "string"
|
||||||
|
c.nxpathMap[key]["watts_alloced"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_in_power"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_pow_input_actual_draw"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_output_voltage"] = "string"
|
||||||
|
c.nxpathMap[key]["det_name"] = "string"
|
||||||
|
c.nxpathMap[key]["tempmod"] = "string"
|
||||||
|
c.nxpathMap[key]["clockname"] = "string"
|
||||||
|
c.nxpathMap[key]["fanname"] = "string"
|
||||||
|
c.nxpathMap[key]["regnumstr"] = "string"
|
||||||
|
c.nxpathMap[key]["bitnumstr"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_slot"] = "string"
|
||||||
|
c.nxpathMap[key]["actual_out"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_input_voltage"] = "string"
|
||||||
|
c.nxpathMap[key]["psmodel"] = "string"
|
||||||
|
c.nxpathMap[key]["speed"] = "string"
|
||||||
|
c.nxpathMap[key]["clkmodel"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_redun_mode_3k"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_pow_capacity"] = "string"
|
||||||
|
c.nxpathMap[key]["amps"] = "string"
|
||||||
|
c.nxpathMap[key]["available_pow"] = "string"
|
||||||
|
c.nxpathMap[key]["reserve_supxbarfan"] = "string"
|
||||||
|
c.nxpathMap[key]["watts"] = "string"
|
||||||
|
c.nxpathMap[key]["det_pinb"] = "string"
|
||||||
|
c.nxpathMap[key]["det_vinb"] = "string"
|
||||||
|
c.nxpathMap[key]["ps_state"] = "string"
|
||||||
|
c.nxpathMap[key]["det_sw_alarm"] = "string"
|
||||||
|
c.nxpathMap[key]["regnum"] = "string"
|
||||||
|
c.nxpathMap[key]["amps_requested"] = "string"
|
||||||
|
c.nxpathMap[key]["fanrpm"] = "string"
|
||||||
|
c.nxpathMap[key]["actual_input"] = "string"
|
||||||
|
c.nxpathMap[key]["outlet_temp"] = "string"
|
||||||
|
c.nxpathMap[key]["tot_capa"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPtpCorrection() {
|
||||||
|
key := "show ptp corrections"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["sup-time"] = "string"
|
||||||
|
c.nxpathMap[key]["correction-val"] = "int64"
|
||||||
|
c.nxpathMap[key]["ptp-header"] = "string"
|
||||||
|
c.nxpathMap[key]["intf-name"] = "string"
|
||||||
|
c.nxpathMap[key]["ptp-end"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initTrans() {
|
||||||
|
key := "show interface transceiver details"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 100)
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_cur_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["current_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_max_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["serialnum"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_acc_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_max_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_temp_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["type"] = "string"
|
||||||
|
c.nxpathMap[key]["rx_pwr_0"] = "float"
|
||||||
|
c.nxpathMap[key]["rx_pwr_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["qsfp_or_cfp"] = "string"
|
||||||
|
c.nxpathMap[key]["protocol_type"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_cur_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["tec_current"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_max_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_min"] = "string"
|
||||||
|
c.nxpathMap[key]["current_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_acc_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["snr_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["rev"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_temp_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["current"] = "float"
|
||||||
|
c.nxpathMap[key]["rx_pwr_1"] = "float"
|
||||||
|
c.nxpathMap[key]["tec_current_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_cur_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["cisco_part_number"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_acc_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["temp_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["laser_freq_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_max_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["snr_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_cur_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_pwr_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_min_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_min_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["rx_pwr_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["tec_current_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_acc_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["rx_pwr_4"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_cur"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["rx_pwr_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["bit_encoding"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_acc"] = "string"
|
||||||
|
c.nxpathMap[key]["sfp"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_acc_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_min"] = "string"
|
||||||
|
c.nxpathMap[key]["current_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_max_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_cur_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["current_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_acc_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["snr_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_acc"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_len"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["txcvr_type"] = "string"
|
||||||
|
c.nxpathMap[key]["tec_current_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["volt_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["temp_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_min_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_freq"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_min_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_cur_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_max_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["fiber_type_byte0"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_freq_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_cur_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["partnum"] = "string"
|
||||||
|
c.nxpathMap[key]["snr"] = "float"
|
||||||
|
c.nxpathMap[key]["volt_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["connector_type"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_medium"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_pwr_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["cisco_vendor_id"] = "string"
|
||||||
|
c.nxpathMap[key]["cisco_ext_id"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_max_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_max"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_min_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_pwr_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["10gbe_code"] = "string"
|
||||||
|
c.nxpathMap[key]["cable_type"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_freq_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["rx_pwr_3"] = "float"
|
||||||
|
c.nxpathMap[key]["rx_pwr"] = "float"
|
||||||
|
c.nxpathMap[key]["volt_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_cur_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["temperature"] = "float"
|
||||||
|
c.nxpathMap[key]["voltage"] = "float"
|
||||||
|
c.nxpathMap[key]["tx_pwr"] = "float"
|
||||||
|
c.nxpathMap[key]["laser_temp_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["tx_speeds"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_min_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_min_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["ciscoid"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_pwr_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["cisco_product_id"] = "string"
|
||||||
|
c.nxpathMap[key]["info_not_available"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_temp"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_cur"] = "string"
|
||||||
|
c.nxpathMap[key]["fiber_type_byte1"] = "string"
|
||||||
|
c.nxpathMap[key]["tx_type"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_min_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_warn_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["temp_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["volt_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["rx_pwr_alrm_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["rx_pwr_2"] = "float"
|
||||||
|
c.nxpathMap[key]["tec_current_alrm_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_acc_alrm_lo"] = "string"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_max_alrm_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["temp_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["snr_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["laser_temp_warn_lo"] = "float"
|
||||||
|
c.nxpathMap[key]["pre_fec_ber_acc_warn_hi"] = "string"
|
||||||
|
c.nxpathMap[key]["laser_freq_warn_hi"] = "float"
|
||||||
|
c.nxpathMap[key]["uncorrect_ber_max"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIgmp() {
|
||||||
|
key := "show ip igmp groups vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["group-type"] = "string"
|
||||||
|
c.nxpathMap[key]["translate"] = "string"
|
||||||
|
c.nxpathMap[key]["sourceaddress"] = "string"
|
||||||
|
c.nxpathMap[key]["vrf-cntxt"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
c.nxpathMap[key]["group-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initVrfAll() {
|
||||||
|
key := "show ip igmp interface vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["if-name"] = "string"
|
||||||
|
c.nxpathMap[key]["static-group-map"] = "string"
|
||||||
|
c.nxpathMap[key]["rll"] = "string"
|
||||||
|
c.nxpathMap[key]["host-proxy"] = "string"
|
||||||
|
c.nxpathMap[key]["il"] = "string"
|
||||||
|
c.nxpathMap[key]["join-group-map"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
c.nxpathMap[key]["host-proxy-group-map"] = "string"
|
||||||
|
c.nxpathMap[key]["next-query"] = "string"
|
||||||
|
c.nxpathMap[key]["q-ver"] = "string"
|
||||||
|
c.nxpathMap[key]["if-status"] = "string"
|
||||||
|
c.nxpathMap[key]["un-solicited"] = "string"
|
||||||
|
c.nxpathMap[key]["ip-sum"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIgmpSnoop() {
|
||||||
|
key := "show ip igmp snooping"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["repsup"] = "string"
|
||||||
|
c.nxpathMap[key]["omf_enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["v3repsup"] = "string"
|
||||||
|
c.nxpathMap[key]["grepsup"] = "string"
|
||||||
|
c.nxpathMap[key]["lkupmode"] = "string"
|
||||||
|
c.nxpathMap[key]["description"] = "string"
|
||||||
|
c.nxpathMap[key]["vlinklocalgrpsup"] = "string"
|
||||||
|
c.nxpathMap[key]["gv3repsup"] = "string"
|
||||||
|
c.nxpathMap[key]["reportfloodall"] = "string"
|
||||||
|
c.nxpathMap[key]["leavegroupaddress"] = "string"
|
||||||
|
c.nxpathMap[key]["enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["omf"] = "string"
|
||||||
|
c.nxpathMap[key]["sq"] = "string"
|
||||||
|
c.nxpathMap[key]["sqr"] = "string"
|
||||||
|
c.nxpathMap[key]["eht"] = "string"
|
||||||
|
c.nxpathMap[key]["fl"] = "string"
|
||||||
|
c.nxpathMap[key]["reportfloodenable"] = "string"
|
||||||
|
c.nxpathMap[key]["snoop-on"] = "string"
|
||||||
|
c.nxpathMap[key]["glinklocalgrpsup"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIgmpSnoopGroups() {
|
||||||
|
key := "show ip igmp snooping groups"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["src-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["source"] = "string"
|
||||||
|
c.nxpathMap[key]["dyn-if-name"] = "string"
|
||||||
|
c.nxpathMap[key]["raddr"] = "string"
|
||||||
|
c.nxpathMap[key]["old-host"] = "string"
|
||||||
|
c.nxpathMap[key]["snoop-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
c.nxpathMap[key]["omf-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["src-expires"] = "string"
|
||||||
|
c.nxpathMap[key]["addr"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIgmpSnoopGroupDetails() {
|
||||||
|
key := "show ip igmp snooping groups detail"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["src-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["source"] = "string"
|
||||||
|
c.nxpathMap[key]["dyn-if-name"] = "string"
|
||||||
|
c.nxpathMap[key]["raddr"] = "string"
|
||||||
|
c.nxpathMap[key]["old-host"] = "string"
|
||||||
|
c.nxpathMap[key]["snoop-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
c.nxpathMap[key]["omf-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["src-expires"] = "string"
|
||||||
|
c.nxpathMap[key]["addr"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIgmpSnoopGroupsSumm() {
|
||||||
|
key := "show ip igmp snooping groups summary"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["src-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["source"] = "string"
|
||||||
|
c.nxpathMap[key]["dyn-if-name"] = "string"
|
||||||
|
c.nxpathMap[key]["raddr"] = "string"
|
||||||
|
c.nxpathMap[key]["old-host"] = "string"
|
||||||
|
c.nxpathMap[key]["snoop-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
c.nxpathMap[key]["omf-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["src-expires"] = "string"
|
||||||
|
c.nxpathMap[key]["addr"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initMrouter() {
|
||||||
|
key := "show ip igmp snooping mrouter"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initSnoopStats() {
|
||||||
|
key := "show ip igmp snooping statistics"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["ut"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPimInterface() {
|
||||||
|
key := "show ip pim interface vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["if-is-border"] = "string"
|
||||||
|
c.nxpathMap[key]["cached_if_status"] = "string"
|
||||||
|
c.nxpathMap[key]["genid"] = "string"
|
||||||
|
c.nxpathMap[key]["if-name"] = "string"
|
||||||
|
c.nxpathMap[key]["last-cleared"] = "string"
|
||||||
|
c.nxpathMap[key]["is-pim-vpc-svi"] = "string"
|
||||||
|
c.nxpathMap[key]["if-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["is-pim-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["pim-dr-address"] = "string"
|
||||||
|
c.nxpathMap[key]["hello-timer"] = "string"
|
||||||
|
c.nxpathMap[key]["pim-bfd-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["vpc-peer-nbr"] = "string"
|
||||||
|
c.nxpathMap[key]["nbr-policy-name"] = "string"
|
||||||
|
c.nxpathMap[key]["is-auto-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["if-status"] = "string"
|
||||||
|
c.nxpathMap[key]["jp-out-policy-name"] = "string"
|
||||||
|
c.nxpathMap[key]["if-addr-summary"] = "string"
|
||||||
|
c.nxpathMap[key]["if-dr"] = "string"
|
||||||
|
c.nxpathMap[key]["jp-in-policy-name"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPimNeigh() {
|
||||||
|
key := "show ip pim neighbor vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["longest-hello-intvl"] = "string"
|
||||||
|
c.nxpathMap[key]["if-name"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["expires"] = "string"
|
||||||
|
c.nxpathMap[key]["bfd-state"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPimRoute() {
|
||||||
|
key := "show ip pim route vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["rpf-nbr-1"] = "string"
|
||||||
|
c.nxpathMap[key]["rpf-nbr-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["register"] = "string"
|
||||||
|
c.nxpathMap[key]["sgexpire"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-bf-str"] = "string"
|
||||||
|
c.nxpathMap[key]["mcast-addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["immediate-bf-str"] = "string"
|
||||||
|
c.nxpathMap[key]["sgr-prune-list-bf-str"] = "string"
|
||||||
|
c.nxpathMap[key]["context-name"] = "string"
|
||||||
|
c.nxpathMap[key]["intf-name"] = "string"
|
||||||
|
c.nxpathMap[key]["immediate-timeout-bf-str"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-local"] = "string"
|
||||||
|
c.nxpathMap[key]["sgrexpire"] = "string"
|
||||||
|
c.nxpathMap[key]["timeout-bf-str"] = "string"
|
||||||
|
c.nxpathMap[key]["timeleft"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPimRp() {
|
||||||
|
key := "show ip pim rp vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 20)
|
||||||
|
c.nxpathMap[key]["is-bsr-forward-only"] = "string"
|
||||||
|
c.nxpathMap[key]["is-rpaddr-local"] = "string"
|
||||||
|
c.nxpathMap[key]["bsr-expires"] = "string"
|
||||||
|
c.nxpathMap[key]["autorp-expire-time"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-announce-policy-name"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-cand-policy-name"] = "string"
|
||||||
|
c.nxpathMap[key]["is-autorp-forward-only"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-owner-flags"] = "string"
|
||||||
|
c.nxpathMap[key]["df-bits-recovered"] = "string"
|
||||||
|
c.nxpathMap[key]["bs-timer"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-discovery-policy-name"] = "string"
|
||||||
|
c.nxpathMap[key]["arp-rp-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["auto-rp-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["autorp-expires"] = "string"
|
||||||
|
c.nxpathMap[key]["is-autorp-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["is-bsr-local"] = "string"
|
||||||
|
c.nxpathMap[key]["is-autorp-listen-only"] = "string"
|
||||||
|
c.nxpathMap[key]["autorp-dis-timer"] = "string"
|
||||||
|
c.nxpathMap[key]["bsr-rp-expires"] = "string"
|
||||||
|
c.nxpathMap[key]["static-rp-group-map"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-source"] = "string"
|
||||||
|
c.nxpathMap[key]["autorp-cand-address"] = "string"
|
||||||
|
c.nxpathMap[key]["autorp-up-time"] = "string"
|
||||||
|
c.nxpathMap[key]["is-bsr-enabled"] = "string"
|
||||||
|
c.nxpathMap[key]["bsr-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["is-bsr-listen-only"] = "string"
|
||||||
|
c.nxpathMap[key]["rpf-nbr-address"] = "string"
|
||||||
|
c.nxpathMap[key]["is-rp-local"] = "string"
|
||||||
|
c.nxpathMap[key]["is-autorp-local"] = "string"
|
||||||
|
c.nxpathMap[key]["bsr-policy-name"] = "string"
|
||||||
|
c.nxpathMap[key]["grange-grp"] = "string"
|
||||||
|
c.nxpathMap[key]["rp-addr"] = "string"
|
||||||
|
c.nxpathMap[key]["anycast-rp-addr"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPimStats() {
|
||||||
|
key := "show ip pim statistics vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 1)
|
||||||
|
c.nxpathMap[key]["vrf-name"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIntfBrief() {
|
||||||
|
key := "show interface brief"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 2)
|
||||||
|
c.nxpathMap[key]["speed"] = "string"
|
||||||
|
c.nxpathMap[key]["vlan"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initPimVrf() {
|
||||||
|
key := "show ip pim vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 1)
|
||||||
|
c.nxpathMap[key]["table-id"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIpMroute() {
|
||||||
|
key := "show ip mroute summary vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 40)
|
||||||
|
c.nxpathMap[key]["nat-mode"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-name"] = "string"
|
||||||
|
c.nxpathMap[key]["nat-route-type"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["mofrr-nbr"] = "string"
|
||||||
|
c.nxpathMap[key]["extranet_addr"] = "string"
|
||||||
|
c.nxpathMap[key]["stale-route"] = "string"
|
||||||
|
c.nxpathMap[key]["pending"] = "string"
|
||||||
|
c.nxpathMap[key]["bidir"] = "string"
|
||||||
|
c.nxpathMap[key]["expry_timer"] = "string"
|
||||||
|
c.nxpathMap[key]["mofrr-iif"] = "string"
|
||||||
|
c.nxpathMap[key]["group_addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["mpib-name"] = "string"
|
||||||
|
c.nxpathMap[key]["rpf"] = "string"
|
||||||
|
c.nxpathMap[key]["mcast-addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["route-mdt-iod"] = "string"
|
||||||
|
c.nxpathMap[key]["sr-oif"] = "string"
|
||||||
|
c.nxpathMap[key]["stats-rate-buf"] = "string"
|
||||||
|
c.nxpathMap[key]["source_addr"] = "string"
|
||||||
|
c.nxpathMap[key]["route-iif"] = "string"
|
||||||
|
c.nxpathMap[key]["rpf-nbr"] = "string"
|
||||||
|
c.nxpathMap[key]["translated-route-src"] = "string"
|
||||||
|
c.nxpathMap[key]["group_addr"] = "string"
|
||||||
|
c.nxpathMap[key]["lisp-src-rloc"] = "string"
|
||||||
|
c.nxpathMap[key]["stats-pndg"] = "string"
|
||||||
|
c.nxpathMap[key]["rate_buf"] = "string"
|
||||||
|
c.nxpathMap[key]["extranet_vrf_name"] = "string"
|
||||||
|
c.nxpathMap[key]["fabric-interest"] = "string"
|
||||||
|
c.nxpathMap[key]["translated-route-grp"] = "string"
|
||||||
|
c.nxpathMap[key]["internal"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-mpib-name"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["omd-vpc-svi"] = "string"
|
||||||
|
c.nxpathMap[key]["source_addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["stale-oif"] = "string"
|
||||||
|
c.nxpathMap[key]["core-interest"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-list-bitfield"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIpv6Mroute() {
|
||||||
|
key := "show ipv6 mroute summary vrf all"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 40)
|
||||||
|
c.nxpathMap[key]["nat-mode"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-name"] = "string"
|
||||||
|
c.nxpathMap[key]["nat-route-type"] = "string"
|
||||||
|
c.nxpathMap[key]["uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["mofrr-nbr"] = "string"
|
||||||
|
c.nxpathMap[key]["extranet_addr"] = "string"
|
||||||
|
c.nxpathMap[key]["stale-route"] = "string"
|
||||||
|
c.nxpathMap[key]["pending"] = "string"
|
||||||
|
c.nxpathMap[key]["bidir"] = "string"
|
||||||
|
c.nxpathMap[key]["expry_timer"] = "string"
|
||||||
|
c.nxpathMap[key]["mofrr-iif"] = "string"
|
||||||
|
c.nxpathMap[key]["group_addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["mpib-name"] = "string"
|
||||||
|
c.nxpathMap[key]["rpf"] = "string"
|
||||||
|
c.nxpathMap[key]["mcast-addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["route-mdt-iod"] = "string"
|
||||||
|
c.nxpathMap[key]["sr-oif"] = "string"
|
||||||
|
c.nxpathMap[key]["stats-rate-buf"] = "string"
|
||||||
|
c.nxpathMap[key]["source_addr"] = "string"
|
||||||
|
c.nxpathMap[key]["route-iif"] = "string"
|
||||||
|
c.nxpathMap[key]["rpf-nbr"] = "string"
|
||||||
|
c.nxpathMap[key]["translated-route-src"] = "string"
|
||||||
|
c.nxpathMap[key]["group_addr"] = "string"
|
||||||
|
c.nxpathMap[key]["lisp-src-rloc"] = "string"
|
||||||
|
c.nxpathMap[key]["stats-pndg"] = "string"
|
||||||
|
c.nxpathMap[key]["rate_buf"] = "string"
|
||||||
|
c.nxpathMap[key]["extranet_vrf_name"] = "string"
|
||||||
|
c.nxpathMap[key]["fabric-interest"] = "string"
|
||||||
|
c.nxpathMap[key]["translated-route-grp"] = "string"
|
||||||
|
c.nxpathMap[key]["internal"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-mpib-name"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-uptime"] = "string"
|
||||||
|
c.nxpathMap[key]["omd-vpc-svi"] = "string"
|
||||||
|
c.nxpathMap[key]["source_addrs"] = "string"
|
||||||
|
c.nxpathMap[key]["stale-oif"] = "string"
|
||||||
|
c.nxpathMap[key]["core-interest"] = "string"
|
||||||
|
c.nxpathMap[key]["oif-list-bitfield"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initVpc() {
|
||||||
|
key := "sys/vpc"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 5)
|
||||||
|
c.nxpathMap[key]["type2CompatQualStr"] = "string"
|
||||||
|
c.nxpathMap[key]["compatQualStr"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["issuFromVer"] = "string"
|
||||||
|
c.nxpathMap[key]["issuToVer"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initBgp() {
|
||||||
|
key := "sys/bgp"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 18)
|
||||||
|
c.nxpathMap[key]["dynRtMap"] = "string"
|
||||||
|
c.nxpathMap[key]["nhRtMap"] = "string"
|
||||||
|
c.nxpathMap[key]["epePeerSet"] = "string"
|
||||||
|
c.nxpathMap[key]["asn"] = "string"
|
||||||
|
c.nxpathMap[key]["peerImp"] = "string"
|
||||||
|
c.nxpathMap[key]["wght"] = "string"
|
||||||
|
c.nxpathMap[key]["assocDom"] = "string"
|
||||||
|
c.nxpathMap[key]["tblMap"] = "string"
|
||||||
|
c.nxpathMap[key]["unSupprMap"] = "string"
|
||||||
|
c.nxpathMap[key]["sessionContImp"] = "string"
|
||||||
|
c.nxpathMap[key]["allocLblRtMap"] = "string"
|
||||||
|
c.nxpathMap[key]["defMetric"] = "string"
|
||||||
|
c.nxpathMap[key]["password"] = "string"
|
||||||
|
c.nxpathMap[key]["retainRttRtMap"] = "string"
|
||||||
|
c.nxpathMap[key]["clusterId"] = "string"
|
||||||
|
c.nxpathMap[key]["localAsn"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["defOrgRtMap"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initCh() {
|
||||||
|
key := "sys/ch"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 10)
|
||||||
|
c.nxpathMap[key]["fanName"] = "string"
|
||||||
|
c.nxpathMap[key]["typeCordConnected"] = "string"
|
||||||
|
c.nxpathMap[key]["vendor"] = "string"
|
||||||
|
c.nxpathMap[key]["model"] = "string"
|
||||||
|
c.nxpathMap[key]["rev"] = "string"
|
||||||
|
c.nxpathMap[key]["vdrId"] = "string"
|
||||||
|
c.nxpathMap[key]["hardwareAlarm"] = "string"
|
||||||
|
c.nxpathMap[key]["unit"] = "string"
|
||||||
|
c.nxpathMap[key]["hwVer"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initIntf() {
|
||||||
|
key := "sys/intf"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 10)
|
||||||
|
c.nxpathMap[key]["descr"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["lastStCause"] = "string"
|
||||||
|
c.nxpathMap[key]["description"] = "string"
|
||||||
|
c.nxpathMap[key]["unit"] = "string"
|
||||||
|
c.nxpathMap[key]["operFECMode"] = "string"
|
||||||
|
c.nxpathMap[key]["operBitset"] = "string"
|
||||||
|
c.nxpathMap[key]["mdix"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initProcsys() {
|
||||||
|
key := "sys/procsys"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 10)
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["id"] = "string"
|
||||||
|
c.nxpathMap[key]["upTs"] = "string"
|
||||||
|
c.nxpathMap[key]["interval"] = "string"
|
||||||
|
c.nxpathMap[key]["memstatus"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initProc() {
|
||||||
|
key := "sys/proc"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 2)
|
||||||
|
c.nxpathMap[key]["processName"] = "string"
|
||||||
|
c.nxpathMap[key]["procArg"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initBfd() {
|
||||||
|
key := "sys/bfd/inst"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 4)
|
||||||
|
c.nxpathMap[key]["descr"] = "string"
|
||||||
|
c.nxpathMap[key]["vrfName"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initLldp() {
|
||||||
|
key := "sys/lldp"
|
||||||
|
c.nxpathMap[key] = make(map[string]string, 7)
|
||||||
|
c.nxpathMap[key]["sysDesc"] = "string"
|
||||||
|
c.nxpathMap[key]["portDesc"] = "string"
|
||||||
|
c.nxpathMap[key]["portIdV"] = "string"
|
||||||
|
c.nxpathMap[key]["chassisIdV"] = "string"
|
||||||
|
c.nxpathMap[key]["sysName"] = "string"
|
||||||
|
c.nxpathMap[key]["name"] = "string"
|
||||||
|
c.nxpathMap[key]["id"] = "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CiscoTelemetryMDT) initDb() {
|
||||||
|
c.nxpathMap = make(map[string]map[string]string, 200)
|
||||||
|
|
||||||
|
c.initPower()
|
||||||
|
c.initMemPhys()
|
||||||
|
c.initBgpV4()
|
||||||
|
c.initCpu()
|
||||||
|
c.initResources()
|
||||||
|
c.initPtpCorrection()
|
||||||
|
c.initTrans()
|
||||||
|
c.initIgmp()
|
||||||
|
c.initVrfAll()
|
||||||
|
c.initIgmpSnoop()
|
||||||
|
c.initIgmpSnoopGroups()
|
||||||
|
c.initIgmpSnoopGroupDetails()
|
||||||
|
c.initIgmpSnoopGroupsSumm()
|
||||||
|
c.initMrouter()
|
||||||
|
c.initSnoopStats()
|
||||||
|
c.initPimInterface()
|
||||||
|
c.initPimNeigh()
|
||||||
|
c.initPimRoute()
|
||||||
|
c.initPimRp()
|
||||||
|
c.initPimStats()
|
||||||
|
c.initIntfBrief()
|
||||||
|
c.initPimVrf()
|
||||||
|
c.initIpMroute()
|
||||||
|
c.initIpv6Mroute()
|
||||||
|
c.initVpc()
|
||||||
|
c.initBgp()
|
||||||
|
c.initCh()
|
||||||
|
c.initIntf()
|
||||||
|
c.initProcsys()
|
||||||
|
c.initProc()
|
||||||
|
c.initBfd()
|
||||||
|
c.initLldp()
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue