From 2b857de3d70d986ea826d2eb5cc493cbf4228498 Mon Sep 17 00:00:00 2001 From: Pavlo Sumkin Date: Fri, 29 Nov 2024 20:53:47 +0100 Subject: [PATCH 1/4] GROUNDWORK-3736 improve SNMP previousValueCache --- connectors/snmp/model.go | 148 ++- connectors/snmp/snmp_test.go | 1886 +++++++++++++++++----------------- 2 files changed, 1016 insertions(+), 1018 deletions(-) diff --git a/connectors/snmp/model.go b/connectors/snmp/model.go index 992443d7..3b11c36d 100644 --- a/connectors/snmp/model.go +++ b/connectors/snmp/model.go @@ -20,6 +20,11 @@ const FiveMinutes = 300 // PreviousValueCache cache to handle "Delta" metrics var previousValueCache = cache.New(-1, -1) +type cachedMetric struct { + InterfaceMetric + ts int64 +} + type MonitoringState struct { sync.Mutex // [deviceName]Device @@ -79,60 +84,60 @@ func (device *DeviceExt) retrieveMonitoredServices(metricDefinitions map[string] } timestamp := transit.NewTimestamp() + ts := timestamp.Unix() for _, iFace := range device.Interfaces { - var bytesInPrev, bytesOutPrev, bytesInX64Prev, bytesOutX64Prev int64 = -1, -1, -1, -1 - if val, ok := previousValueCache.Get(fmt.Sprintf("%s:%s:%s", device.Name, iFace.Name, clients.IfInOctets)); ok { - bytesInPrev = val.(int64) - } - if val, ok := previousValueCache.Get(fmt.Sprintf("%s:%s:%s", device.Name, iFace.Name, clients.IfOutOctets)); ok { - bytesOutPrev = val.(int64) - } - if val, ok := previousValueCache.Get(fmt.Sprintf("%s:%s:%s", device.Name, iFace.Name, clients.IfHCInOctets)); ok { - bytesInX64Prev = val.(int64) - } - if val, ok := previousValueCache.Get(fmt.Sprintf("%s:%s:%s", device.Name, iFace.Name, clients.IfHCOutOctets)); ok { - bytesOutX64Prev = val.(int64) - } - var metricsBuilder []connectors.MetricBuilder - for mib, metric := range iFace.Metrics { - if metricDefinition, has := metricDefinitions[metric.Mib]; has { - var unitType transit.UnitType - var value interface{} - unitType = transit.UnitCounter - value = metric.Value + for key := range clients.NonMibMetrics { + if metricDefinition, has := metricDefinitions[key]; has { + metricBuilder := makeMetricBuilder(metricDefinition, key, timestamp) - switch mib { - case clients.IfInOctets, clients.IfOutOctets, clients.IfHCInOctets, clients.IfHCOutOctets: - value = metric.Value * 8 - } + switch key { + case clients.BytesPerSecondIn: + if prev, ok := previousValueCache.Get(makeCK(device.Name, iFace.Name, clients.IfHCInOctets)); ok { + prev := prev.(cachedMetric) + v := (iFace.Metrics[clients.IfHCInOctets].Value - prev.Value) / (ts - prev.ts) + metricBuilder.Value = v + metricsBuilder = append(metricsBuilder, metricBuilder) + } else if prev, ok := previousValueCache.Get(makeCK(device.Name, iFace.Name, clients.IfInOctets)); ok { + prev := prev.(cachedMetric) + v := (iFace.Metrics[clients.IfInOctets].Value - prev.Value) / (ts - prev.ts) + metricBuilder.Value = v + metricsBuilder = append(metricsBuilder, metricBuilder) + } - metricBuilder := connectors.MetricBuilder{ - Name: metric.Key, - CustomName: metricDefinition.CustomName, - ComputeType: metricDefinition.ComputeType, - Expression: metricDefinition.Expression, - UnitType: unitType, - Warning: metricDefinition.WarningThreshold, - Critical: metricDefinition.CriticalThreshold, - StartTimestamp: timestamp, - EndTimestamp: timestamp, - Graphed: metricDefinition.Graphed, - - Value: nil, + case clients.BytesPerSecondOut: + if prev, ok := previousValueCache.Get(makeCK(device.Name, iFace.Name, clients.IfHCOutOctets)); ok { + prev := prev.(cachedMetric) + v := (iFace.Metrics[clients.IfHCOutOctets].Value - prev.Value) / (ts - prev.ts) + metricBuilder.Value = v + metricsBuilder = append(metricsBuilder, metricBuilder) + } else if prev, ok := previousValueCache.Get(makeCK(device.Name, iFace.Name, clients.IfOutOctets)); ok { + prev := prev.(cachedMetric) + v := (iFace.Metrics[clients.IfOutOctets].Value - prev.Value) / (ts - prev.ts) + metricBuilder.Value = v + metricsBuilder = append(metricsBuilder, metricBuilder) + } } + } + } - ck := fmt.Sprintf("%s:%s:%s", device.Name, iFace.Name, mib) - isDelta, isPreviousPresent, valueToSet := calculateValue(metricDefinition.MetricType, unitType, - ck, value) - - if !isDelta || (isDelta && isPreviousPresent) { - metricBuilder.Value = valueToSet + for mib, metric := range iFace.Metrics { + if metricDefinition, has := metricDefinitions[metric.Mib]; has { + metricBuilder := makeMetricBuilder(metricDefinition, metric.Key, timestamp) + + ck := makeCK(device.Name, iFace.Name, mib) + if isDelta(metricDefinition.MetricType) { + if prev, ok := previousValueCache.Get(ck); ok { + metricBuilder.Value = metric.Value - prev.(cachedMetric).Value + metricsBuilder = append(metricsBuilder, metricBuilder) + } + } else { + metricBuilder.Value = metric.Value metricsBuilder = append(metricsBuilder, metricBuilder) } - previousValueCache.SetDefault(ck, metric.Value) + previousValueCache.SetDefault(ck, cachedMetric{metric, ts}) // log.Debug(). // Interface("_ck", ck). @@ -144,21 +149,6 @@ func (device *DeviceExt) retrieveMonitoredServices(metricDefinitions map[string] } } - for key := range clients.NonMibMetrics { - if metricDefinition, has := metricDefinitions[key]; has { - switch key { - case clients.BytesPerSecondIn: - metricBuilder := calculateBytesPerSecond(key, metricDefinition, - iFace.Metrics[clients.IfInOctets].Value*8, iFace.Metrics[clients.IfHCInOctets].Value*8, bytesInPrev, bytesInX64Prev, timestamp) - metricsBuilder = append(metricsBuilder, metricBuilder) - case clients.BytesPerSecondOut: - metricBuilder := calculateBytesPerSecond(key, metricDefinition, - iFace.Metrics[clients.IfOutOctets].Value*8, iFace.Metrics[clients.IfHCOutOctets].Value*8, bytesOutPrev, bytesOutX64Prev, timestamp) - metricsBuilder = append(metricsBuilder, metricBuilder) - } - } - } - mService, err := connectors.BuildServiceForMetrics(iFace.Name, device.Name, metricsBuilder) if err != nil { log.Err(err).Msgf("could not create monitored service '%s:%s'", device.Name, iFace.Name) @@ -195,30 +185,15 @@ func calculateHostStatus(lastOk float64) transit.MonitorStatus { return transit.HostUnreachable } -func calculateValue(metricKind transit.MetricKind, unitType transit.UnitType, - metricName string, currentValue interface{}) (bool, bool, interface{}) { - if strings.EqualFold(string(metricKind), string(transit.Delta)) { - if previousValue, present := previousValueCache.Get(metricName); present { - switch unitType { - case transit.UnitCounter: - previousValueCache.SetDefault(metricName, currentValue.(int64)) - currentValue = currentValue.(int64) - previousValue.(int64) - } - return true, true, currentValue.(int64) - } - return true, false, currentValue.(int64) - } - return false, false, currentValue.(int64) +func isDelta(k transit.MetricKind) bool { + return strings.EqualFold(string(k), string(transit.Delta)) } -func calculateBytesPerSecond(metricName string, metricDefinition transit.MetricDefinition, current, currentX64, previous, - previousX64 int64, timestamp *transit.Timestamp) connectors.MetricBuilder { - seconds := int(connectors.CheckInterval.Seconds()) - result := (current - previous) / int64(seconds) - if currentX64 > 0 && previousX64 > 0 { - result = (currentX64 - previousX64) / int64(seconds) - } +func makeCK(deviceName, iFaceName, mib string) string { + return fmt.Sprintf("%s:%s:%s", deviceName, iFaceName, mib) +} +func makeMetricBuilder(metricDefinition transit.MetricDefinition, metricName string, timestamp *transit.Timestamp) connectors.MetricBuilder { return connectors.MetricBuilder{ Name: metricName, CustomName: metricDefinition.CustomName, @@ -230,7 +205,16 @@ func calculateBytesPerSecond(metricName string, metricDefinition transit.MetricD StartTimestamp: timestamp, EndTimestamp: timestamp, Graphed: metricDefinition.Graphed, - - Value: result, } } + +/** +## [Consider SNMP Counters: Frequently Asked Questions](https://www.cisco.com/c/en/us/support/docs/ip/simple-network-management-protocol-snmp/26007-faq-snmpcounter.html) + +Q. When do 64-bit counters be used? + A. [RFC 2233](https://www.ietf.org/rfc/rfc2233.txt) adopted expanded 64-bit counters for high capacity interfaces in which 32-bit counters do not provide enough capacity and wrap too fast. + +> [!Note] +> Cisco IOS Software does not support 64-bit counters for interface speeds of less than 20 Mbps. +> This means that 64-bit counters are not supported on 10 Mb Ethernet ports. Only 100 Mb Fast-Ethernet and other high speed ports support 64-bit counters. +*/ diff --git a/connectors/snmp/snmp_test.go b/connectors/snmp/snmp_test.go index 7684f217..4dbf9681 100644 --- a/connectors/snmp/snmp_test.go +++ b/connectors/snmp/snmp_test.go @@ -19,6 +19,13 @@ func TestRetrieveMonitoredResources(t *testing.T) { // 1st call for set previousValueCache _ = state.retrieveMonitoredResources(metricDefinitions) + + for k, v := range previousValueCache.Items() { + prev := v.Object.(cachedMetric) + prev.ts, prev.Value = prev.ts-60, prev.Value-10 + previousValueCache.SetDefault(k, prev) + } + // 2nd call for deltas monitoredResources := state.retrieveMonitoredResources(metricDefinitions) ts := transit.NewTimestamp() @@ -27,6 +34,10 @@ func TestRetrieveMonitoredResources(t *testing.T) { // assert.Equal(t, monitoredResourcesExp, monitoredResources) monitoredResourcesJSON, _ := json.Marshal(monitoredResources) monitoredResourcesExpJSON, _ := json.Marshal(monitoredResourcesExp) + + println(`--`) + println(string(monitoredResourcesJSON)) + println(`--`) assert.JSONEq(t, string(monitoredResourcesExpJSON), string(monitoredResourcesJSON)) } @@ -56,7 +67,8 @@ func normalizeData(mr []transit.MonitoredResource, ts *transit.Timestamp) { // data from 8.7.0 func seedTest() (*MonitoringState, map[string]transit.MetricDefinition, []transit.MonitoredResource, error) { - metricDefinitionsJSON := []byte(`{ + metricDefinitionsJSON := []byte(` +{ "ifHCInOctets": { "computeType": "Query", "criticalThreshold": -1, @@ -173,7 +185,8 @@ func seedTest() (*MonitoringState, map[string]transit.MetricDefinition, []transi } }`) - devicesJSON := []byte(`{ + devicesJSON := []byte(` +{ "c2801": { "Community": "public", "IP": "172.21.0.1", @@ -512,1735 +525,1736 @@ func seedTest() (*MonitoringState, map[string]transit.MetricDefinition, []transi } }`) - mResourcesJSON := []byte(`[ + mResourcesJSON := []byte(` +[ { - "lastCheckTime": "1696286942511", "name": "c2801", - "nextCheckTime": "1696287002511", + "type": "host", + "status": "HOST_UP", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", "services": [ { - "lastCheckTime": "1696286942511", + "name": "Fa0/0", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", "metrics": [ { + "metricName": "Inbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "Inbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "Inbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 4571497819, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCInOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCInOctets_wn", "sampleType": "Warning", + "label": "Inbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCInOctets_cr", "sampleType": "Critical", + "label": "Inbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 1117565447404, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCOutOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCOutOctets_wn", "sampleType": "Warning", + "label": "Inbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCOutOctets_cr", "sampleType": "Critical", + "label": "Inbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 1056838668599, - "valueType": "IntegerType" - } + ] }, { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, "metricName": "Interface Speed", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 100000000 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 100000000, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", - "thresholds": [ - { - "label": "Inbound Octets_wn", - "sampleType": "Warning", - "value": { - "integerValue": -1, - "valueType": "IntegerType" - } - }, - { - "label": "Inbound Octets_cr", - "sampleType": "Critical", - "value": { - "integerValue": -1, - "valueType": "IntegerType" - } - } - ], - "unit": "1", "value": { - "integerValue": 5168872940, - "valueType": "IntegerType" - } - } - ], - "name": "Fa0/0.1003", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" - }, - { - "lastCheckTime": "1696286942511", - "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", - "metrics": [ - { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "valueType": "IntegerType", + "integerValue": 10 }, - "metricName": "ifHCOutOctets", - "sampleType": "Value", + "unit": "1", "thresholds": [ { - "label": "ifHCOutOctets_wn", "sampleType": "Warning", + "label": "Outbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCOutOctets_cr", "sampleType": "Critical", + "label": "Outbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 701607891810, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Interface Speed", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "Outbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "Outbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 100000000, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Octets_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Octets_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 12516361641, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCInOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "ifHCInOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "ifHCInOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 10118157154, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCOutOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCInOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCInOctets_wn", "sampleType": "Warning", + "label": "ifHCOutOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCInOctets_cr", "sampleType": "Critical", + "label": "ifHCOutOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 433423156649, - "valueType": "IntegerType" - } + ] } - ], - "name": "Fa0/1.1002", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" + ] }, { - "lastCheckTime": "1696286942511", + "name": "Fa0/0.1003", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", "metrics": [ { + "metricName": "Inbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCOutOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCOutOctets_wn", "sampleType": "Warning", + "label": "Inbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCOutOctets_cr", "sampleType": "Critical", + "label": "Inbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 1060101949781, - "valueType": "IntegerType" - } + ] }, { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, "metricName": "Interface Speed", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 100000000 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 100000000, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Errors", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Errors_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Errors_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCInOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Discards_wn", "sampleType": "Warning", + "label": "ifHCInOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Discards_cr", "sampleType": "Critical", + "label": "ifHCInOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCOutOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Discards_wn", "sampleType": "Warning", + "label": "ifHCOutOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Discards_cr", "sampleType": "Critical", + "label": "ifHCOutOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } - }, + ] + } + ] + }, + { + "name": "Fa0/1", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", + "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", + "metrics": [ { + "metricName": "Inbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "Inbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "Inbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 7834935633, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCInOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCInOctets_wn", "sampleType": "Warning", + "label": "Inbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCInOctets_cr", "sampleType": "Critical", + "label": "Inbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 1127994685160, - "valueType": "IntegerType" - } + ] }, { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, - "metricName": "Inbound Errors", + "metricName": "Inbound Octets", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Errors_wn", "sampleType": "Warning", + "label": "Inbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Errors_cr", "sampleType": "Critical", + "label": "Inbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Interface Speed", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 100000000 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Octets_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Octets_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 15598148020, - "valueType": "IntegerType" - } - } - ], - "name": "Fa0/0", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" - }, - { - "lastCheckTime": "1696286942511", - "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", - "metrics": [ + ] + }, { + "metricName": "Outbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Errors", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Errors_wn", "sampleType": "Warning", + "label": "Outbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Errors_cr", "sampleType": "Critical", + "label": "Outbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Octets_wn", "sampleType": "Warning", + "label": "Outbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Octets_cr", "sampleType": "Critical", + "label": "Outbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 12516412475, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Discards_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Discards_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCInOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Discards_wn", "sampleType": "Warning", + "label": "ifHCInOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Discards_cr", "sampleType": "Critical", + "label": "ifHCInOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCOutOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "ifHCOutOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "ifHCOutOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", + ] + } + ] + }, + { + "name": "Fa0/1.1002", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", + "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", + "metrics": [ + { + "metricName": "Inbound Octets", + "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, "value": { - "integerValue": 13599427499, - "valueType": "IntegerType" - } + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", + "thresholds": [ + { + "sampleType": "Warning", + "label": "Inbound Octets_wn", + "value": { + "valueType": "IntegerType", + "integerValue": -1 + } + }, + { + "sampleType": "Critical", + "label": "Inbound Octets_cr", + "value": { + "valueType": "IntegerType", + "integerValue": -1 + } + } + ] }, { + "metricName": "Interface Speed", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCInOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 100000000 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCInOctets_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCInOctets_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 433423207483, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCOutOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCOutOctets_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCOutOctets_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 705089162575, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCInOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Interface Speed", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "ifHCInOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "ifHCInOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 100000000, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCOutOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Errors", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Errors_wn", "sampleType": "Warning", + "label": "ifHCOutOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Errors_cr", "sampleType": "Critical", + "label": "ifHCOutOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] } - ], - "name": "Fa0/1", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" + ] }, { - "lastCheckTime": "1696286942511", + "name": "Lo6774", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", "metrics": [ { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, "metricName": "Inbound Discards", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Discards_wn", "sampleType": "Warning", + "label": "Inbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Discards_cr", "sampleType": "Critical", + "label": "Inbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, "metricName": "Inbound Errors", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Errors_wn", "sampleType": "Warning", + "label": "Inbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Errors_cr", "sampleType": "Critical", + "label": "Inbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Discards_wn", "sampleType": "Warning", + "label": "Inbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Discards_cr", "sampleType": "Critical", + "label": "Inbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Interface Speed", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 4294967295 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Octets_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Octets_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 18957178352, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "Outbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "Outbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Interface Speed", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "Outbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "Outbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 4294967295, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Errors", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Errors_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Errors_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" - } - } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } - } - ], - "name": "Nu0", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" - }, - { - "lastCheckTime": "1696286942511", - "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", - "metrics": [ + "valueType": "IntegerType", + "integerValue": -1 + } + } + ] + }, { + "metricName": "ifHCInOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "ifHCInOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "ifHCInOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCOutOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCInOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCInOctets_wn", "sampleType": "Warning", + "label": "ifHCOutOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCInOctets_cr", "sampleType": "Critical", + "label": "ifHCOutOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } - }, + ] + } + ] + }, + { + "name": "Nu0", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", + "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", + "metrics": [ { + "metricName": "Inbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCOutOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCOutOctets_wn", "sampleType": "Warning", + "label": "Inbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCOutOctets_cr", "sampleType": "Critical", + "label": "Inbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Interface Speed", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "Inbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "Inbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 4294967295, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Errors", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Errors_wn", "sampleType": "Warning", + "label": "Inbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Errors_cr", "sampleType": "Critical", + "label": "Inbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Interface Speed", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 4294967295 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Discards_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Discards_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Errors", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Errors_wn", "sampleType": "Warning", + "label": "Outbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Errors_cr", "sampleType": "Critical", + "label": "Outbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Errors", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Discards_wn", "sampleType": "Warning", + "label": "Outbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Discards_cr", "sampleType": "Critical", + "label": "Outbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Octets_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Octets_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] } - ], - "name": "Lo6774", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" + ] }, { - "lastCheckTime": "1696286942511", + "name": "Tu0", + "type": "service", + "owner": "c2801", + "status": "SERVICE_OK", + "lastCheckTime": "1732834159762", + "nextCheckTime": "1732834159762", "lastPluginOutput": "Interface Operational State is UP, Administrative state is UP", "metrics": [ { + "metricName": "Inbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Interface Speed", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Interface Speed_wn", "sampleType": "Warning", + "label": "Inbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Interface Speed_cr", "sampleType": "Critical", + "label": "Inbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 9000, - "valueType": "IntegerType" - } + ] }, { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, "metricName": "Inbound Errors", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Errors_wn", "sampleType": "Warning", + "label": "Inbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Errors_cr", "sampleType": "Critical", + "label": "Inbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Inbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Discards_wn", "sampleType": "Warning", + "label": "Inbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Discards_cr", "sampleType": "Critical", + "label": "Inbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Interface Speed", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Outbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 9000 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Octets_wn", "sampleType": "Warning", + "label": "Interface Speed_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Octets_cr", "sampleType": "Critical", + "label": "Interface Speed_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 3422103643, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Discards", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCOutOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCOutOctets_wn", "sampleType": "Warning", + "label": "Outbound Discards_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCOutOctets_cr", "sampleType": "Critical", + "label": "Outbound Discards_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 514523244431, - "valueType": "IntegerType" - } + ] }, { - "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" - }, "metricName": "Outbound Errors", "sampleType": "Value", + "interval": { + "endTime": "1732834159762", + "startTime": "1732834159762" + }, + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Outbound Errors_wn", "sampleType": "Warning", + "label": "Outbound Errors_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Outbound Errors_cr", "sampleType": "Critical", + "label": "Outbound Errors_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "Outbound Octets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Discards", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Discards_wn", "sampleType": "Warning", + "label": "Outbound Octets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Discards_cr", "sampleType": "Critical", + "label": "Outbound Octets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 0, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCInOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "Inbound Octets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "Inbound Octets_wn", "sampleType": "Warning", + "label": "ifHCInOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "Inbound Octets_cr", "sampleType": "Critical", + "label": "ifHCInOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 24994843692, - "valueType": "IntegerType" - } + ] }, { + "metricName": "ifHCOutOctets", + "sampleType": "Value", "interval": { - "endTime": "1696286942511", - "startTime": "1696286942511" + "endTime": "1732834159762", + "startTime": "1732834159762" }, - "metricName": "ifHCInOctets", - "sampleType": "Value", + "value": { + "valueType": "IntegerType", + "integerValue": 10 + }, + "unit": "1", "thresholds": [ { - "label": "ifHCInOctets_wn", "sampleType": "Warning", + "label": "ifHCOutOctets_wn", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } }, { - "label": "ifHCInOctets_cr", "sampleType": "Critical", + "label": "ifHCOutOctets_cr", "value": { - "integerValue": -1, - "valueType": "IntegerType" + "valueType": "IntegerType", + "integerValue": -1 } } - ], - "unit": "1", - "value": { - "integerValue": 836743667074, - "valueType": "IntegerType" - } + ] } - ], - "name": "Tu0", - "nextCheckTime": "1696287002511", - "owner": "c2801", - "status": "SERVICE_OK", - "type": "service" + ] } - ], - "status": "HOST_UP", - "type": "host" + ] } ]`) From 3988fb1fe0f0360118fd8b3109b2f91d04496dfe Mon Sep 17 00:00:00 2001 From: Pavlo Sumkin Date: Fri, 29 Nov 2024 20:57:08 +0100 Subject: [PATCH 2/4] GROUNDWORK-3736 improve SNMP LastOK --- connectors/snmp/clients/nediClient.go | 6 +++--- connectors/snmp/model.go | 5 ++--- connectors/snmp/snmp_test.go | 3 +-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/connectors/snmp/clients/nediClient.go b/connectors/snmp/clients/nediClient.go index f21d5951..5b2694b0 100644 --- a/connectors/snmp/clients/nediClient.go +++ b/connectors/snmp/clients/nediClient.go @@ -38,14 +38,14 @@ type Device struct { Name string IP string Community string - LastOK float64 + LastOK int64 } type Monitoring struct { Name string IP string Device string - LastOK float64 + LastOK int64 } type Interface struct { @@ -331,7 +331,7 @@ func (client *NediClient) getMonitoredDevices() (map[string]Monitoring, error) { var monitor Monitoring monitor.Name = fields[colName].(string) monitor.Device = fields[colDevice].(string) - monitor.LastOK = fields[colLastOK].(float64) + monitor.LastOK = int64(fields[colLastOK].(float64)) ip := fields[colMonIP] ipVal, err := getInt(ip) diff --git a/connectors/snmp/model.go b/connectors/snmp/model.go index 3b11c36d..7bf825ed 100644 --- a/connectors/snmp/model.go +++ b/connectors/snmp/model.go @@ -176,12 +176,11 @@ func (device *DeviceExt) retrieveMonitoredServices(metricDefinitions map[string] return mServices } -func calculateHostStatus(lastOk float64) transit.MonitorStatus { +func calculateHostStatus(lastOk int64) transit.MonitorStatus { now := time.Now().Unix() // in seconds - if (float64(now) - lastOk) < FiveMinutes { + if (now - lastOk) < FiveMinutes { return transit.HostUp } - return transit.HostUnreachable } diff --git a/connectors/snmp/snmp_test.go b/connectors/snmp/snmp_test.go index 4dbf9681..03d9ccba 100644 --- a/connectors/snmp/snmp_test.go +++ b/connectors/snmp/snmp_test.go @@ -2267,9 +2267,8 @@ func seedTest() (*MonitoringState, map[string]transit.MetricDefinition, []transi if err := json.Unmarshal(devicesJSON, &state.devices); err != nil { return nil, nil, nil, err } - lastOK := float64(time.Now().Unix()) for k, d := range state.devices { - d.LastOK = lastOK + d.LastOK = time.Now().Unix() state.devices[k] = d } From 13d4c8915fe37d3d92f19c90635c2413ac045faa Mon Sep 17 00:00:00 2001 From: Pavlo Sumkin Date: Thu, 28 Nov 2024 14:35:28 +0100 Subject: [PATCH 3/4] GROUNDWORK-3736 improve SNMP logging --- connectors/snmp/clients/nediClient.go | 80 ++++++++++++--------------- connectors/snmp/clients/snmpClient.go | 43 +++++++------- 2 files changed, 55 insertions(+), 68 deletions(-) diff --git a/connectors/snmp/clients/nediClient.go b/connectors/snmp/clients/nediClient.go index 5b2694b0..f3016f9c 100644 --- a/connectors/snmp/clients/nediClient.go +++ b/connectors/snmp/clients/nediClient.go @@ -75,19 +75,18 @@ func (client *NediClient) GetDevices() ([]Device, error) { path, err := client.getConnectionString(tableDevices, "", "") if err != nil { - log.Err(err).Msg("could not get NeDi connection string") - return nil, errors.New("failed to get NeDi connection string") + msg := "could not get NeDi connection string" + log.Err(err).Msg(msg) + return nil, errors.New(msg) } - log.Debug().Msgf("performing NeDi Get Devices request: %s", *path) r, err := executeGet(*path) if err != nil { - log.Err(err). - Str("request", *path). - Msg("could not execute NeDi request") - return nil, errors.New("failed to execute NeDi request") + msg := "could not execute NeDi request" + log.Err(err).Str("request", *path).Msg(msg) + return nil, errors.New(msg) } - log.Debug().Bytes("response", r).Msg("NeDi Get Devices response") + log.Debug().Str("request", *path).Bytes("response", r).Msg("NeDi Get Devices") return parseDevices(r, monitored) } @@ -100,19 +99,18 @@ func (client *NediClient) GetDeviceInterfaces(device string) ([]Interface, error query := colDevice + " = " + device path, err := client.getConnectionString(tableInterfaces, query, "") if err != nil { - log.Err(err).Msg("could not get NeDi connection string") - return nil, errors.New("failed to get NeDi connection string") + msg := "could not get NeDi connection string" + log.Err(err).Msg(msg) + return nil, errors.New(msg) } - log.Debug().Msgf("performing NeDi Get Interfaces request: %s", *path) r, err := executeGet(*path) if err != nil { - log.Err(err). - Str("request", *path). - Msg("could not execute NeDi request") - return nil, errors.New("failed to execute NeDi request") + msg := "could not execute NeDi request" + log.Err(err).Str("request", *path).Msg(msg) + return nil, errors.New(msg) } - log.Debug().Bytes("response", r).Msg("NeDi Get Interfaces response") + log.Debug().Str("request", *path).Bytes("response", r).Msg("NeDi Get Interfaces") return parseInterfaces(r), nil } @@ -149,7 +147,7 @@ func parseDevices(bytes []byte, monitored map[string]Monitoring) ([]Device, erro case string: device.Name = name default: - log.Warn().Msgf("skipping device '%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping device by name '%s:%v' of unsupported type %T", colDevice, name, name) continue } @@ -162,7 +160,7 @@ func parseDevices(bytes []byte, monitored map[string]Monitoring) ([]Device, erro ipVal, err := getInt(ip) if err != nil { - log.Warn().Msgf("skipping device '%s:%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping device by ip '%s:%s:%v' of unsupported type %T", device.Name, colDevIP, ip, ip) continue } @@ -172,7 +170,7 @@ func parseDevices(bytes []byte, monitored map[string]Monitoring) ([]Device, erro case string: device.Community = community default: - log.Warn().Msgf("skipping device '%s:%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping device by community '%s:%s:%v' of unsupported type %T", device.Name, colReadComm, community, community) continue } @@ -196,7 +194,7 @@ func parseInterfaces(response []byte) []Interface { case string: iFace.Name = name default: - log.Warn().Msgf("skipping interface '%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping interface by name '%s:%v' of unsupported type %T", colIfName, name, name) continue } @@ -205,7 +203,7 @@ func parseInterfaces(response []byte) []Interface { case string: iFace.Device = device default: - log.Warn().Msgf("skipping interface '%s:%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping interface by device '%s:%s:%v' of unsupported type %T", iFace.Name, colDevice, device, device) continue } @@ -214,13 +212,13 @@ func parseInterfaces(response []byte) []Interface { if statVal, err := getInt(status); err == nil { iFace.Status = statVal } else { - log.Warn().Msgf("skipping interface '%s:%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping interface by status '%s:%s:%v' of unsupported type %T", iFace.Name, colIfStat, status, status) } idxVal, err := getInt(index) if err != nil { - log.Warn().Msgf("skipping interface '%s:%s:%v' of unsupported type %T", + log.Warn().Msgf("skipping interface by index '%s:%s:%v' of unsupported type %T", iFace.Name, colIfIndex, index, index) continue } @@ -232,46 +230,41 @@ func parseInterfaces(response []byte) []Interface { } func parseResponse(bytes []byte) []map[string]interface{} { - log.Debug(). - Bytes("response", bytes). - Msg("parsing NeDi response") - var response []interface{} if err := json.Unmarshal(bytes, &response); err != nil { log.Err(err).Bytes("response", bytes).Msg("could not parse NeDi response") return nil } - var res []map[string]interface{} + dbg := log.Debug().Bytes("response", bytes) + res := make([]map[string]interface{}, 0, len(response)-1) + skip := 0 for i, r := range response { - log.Debug(). - Interface("obj", r). - Msg("parsing NeDi response object") if i == 0 { - log.Debug().Msg("skipping system information") + // log.Debug().Msg("skipping system information") continue } switch r := r.(type) { case map[string]interface{}: res = append(res, r) default: - log.Warn(). - Interface("obj", r). - Msgf("skipping response object of unsupported type %T", r) + skip++ continue } } - log.Debug(). - Interface("res", res). - Msg("parsing NeDi response completed") + if skip > 0 { + dbg.Int("skipped parts of unsupported type", skip) + } + dbg.Interface("res", res). + Msg("parsing NeDi response") + return res } func executeGet(url string) ([]byte, error) { s, r, err := clients.SendRequest(http.MethodGet, url, nil, nil, nil) if err != nil || s != 200 || r == nil { - log.Error(). - Err(err). + log.Err(err). Int("status", s). Bytes("response", r). Msg("could not send request") @@ -312,19 +305,18 @@ func int2ip(val int) string { func (client *NediClient) getMonitoredDevices() (map[string]Monitoring, error) { path, err := client.getConnectionString(tableMonitoring, "", "") if err != nil { - msg := "failed to get NeDi monitoring connection string" + msg := "could not get NeDi monitoring connection string" log.Err(err).Msg(msg) return nil, errors.New(msg) } - log.Debug().Msgf("performing NeDi Get Monitoring request: %s", *path) response, err := executeGet(*path) if err != nil { msg := "could not execute NeDi monitoring request" - log.Err(err).Msg(msg) + log.Err(err).Str("request", *path).Msg(msg) return nil, errors.New(msg) } - log.Debug().Bytes("response", response).Msg("NeDi Get Monitoring response") + log.Debug().Str("request", *path).Bytes("response", response).Msg("NeDi Get Monitoring response") monitors := make(map[string]Monitoring) for _, fields := range parseResponse(response) { diff --git a/connectors/snmp/clients/snmpClient.go b/connectors/snmp/clients/snmpClient.go index ec63a70c..5cb50d2a 100644 --- a/connectors/snmp/clients/snmpClient.go +++ b/connectors/snmp/clients/snmpClient.go @@ -2,6 +2,7 @@ package clients import ( "errors" + "fmt" "strings" "time" @@ -107,17 +108,16 @@ func (client *SnmpClient) GetSnmpData(mibs []string, target string, secData *uti return nil, errors.New("no metrics (mibs) provided") } - log.Info().Msgf("------ starting SNMP metric gathering for target '%s'", target) + log.Debug().Msgf("------ starting SNMP metric gathering for target '%s'", target) goSnmp, err := setup(target, secData) if err != nil { log.Err(err).Msg("SNMP setup failed") - return nil, errors.New("SNMP setup failed") + return nil, fmt.Errorf("SNMP setup failed: %w", err) } - err = goSnmp.Connect() - if err != nil { + if err := goSnmp.Connect(); err != nil { log.Err(err).Msg("SNMP connect failed") - return nil, errors.New("SNMP connect failed") + return nil, fmt.Errorf("SNMP connect failed: %w", err) } defer goSnmp.Conn.Close() @@ -125,9 +125,9 @@ func (client *SnmpClient) GetSnmpData(mibs []string, target string, secData *uti for _, mib := range mibs { mibData, e := getSnmpData(mib, goSnmp) // go get the snmp if e != nil { + // reconnect in case of error goSnmp.Conn.Close() - err = goSnmp.Connect() - if err != nil { + if err := goSnmp.Connect(); err != nil { log.Err(err).Msg("SNMP connect failed") } log.Err(e).Msgf("could not get data for target '%s' + mib '%s'", target, mib) @@ -137,7 +137,7 @@ func (client *SnmpClient) GetSnmpData(mibs []string, target string, secData *uti data = append(data, *mibData) } } - log.Info().Msgf("------ completed for target '%s'", target) + log.Debug().Msgf("------ completed for target '%s'", target) return data, nil } @@ -150,11 +150,9 @@ func setup(target string, secData *utils.SecurityData) (*snmp.GoSNMP, error) { } func setupV2c(target string, community *utils.SecurityData) (*snmp.GoSNMP, error) { - err := validate(target, community) - - if err != nil { + if err := validate(target, community); err != nil { log.Err(err).Msg("could not setup snmp v2c") - return nil, errors.New("validation failed") + return nil, fmt.Errorf("validation failed: %w", err) } return &snmp.GoSNMP{ @@ -169,10 +167,9 @@ func setupV2c(target string, community *utils.SecurityData) (*snmp.GoSNMP, error } func setupV3(target string, community *utils.SecurityData) (*snmp.GoSNMP, error) { - err := validate(target, community) - if err != nil { + if err := validate(target, community); err != nil { log.Err(err).Msg("could not setup snmp v3") - return nil, errors.New("validation failed") + return nil, fmt.Errorf("validation failed: %w", err) } var msgFlags snmp.SnmpV3MsgFlags @@ -261,7 +258,7 @@ func getSnmpData(mib string, goSnmp *snmp.GoSNMP) (*SnmpMetricData, error) { return nil, errors.New("missing mib") } - log.Info().Msgf("-- start getting MIB: %s", mib) + log.Debug().Msgf("-- start getting MIB: %s", mib) snmpMetric := AvailableMetrics[mib] if snmpMetric == nil { @@ -280,19 +277,17 @@ func getSnmpData(mib string, goSnmp *snmp.GoSNMP) (*SnmpMetricData, error) { data.SnmpMetric = *snmpMetric walkHandler := func(dataUnit snmp.SnmpPDU) error { - log.Info().Msgf("-- walk Handler: data unit name: '%s', value: '%s'", - dataUnit.Name, dataUnit.Value) - var val SnmpValue - val.Name = dataUnit.Name + dbg := log.Debug().Interface("SnmpPDU", dataUnit) + val := SnmpValue{Name: dataUnit.Name} switch v := dataUnit.Value.(type) { case uint: val.Value = int64(v) - log.Info().Msgf("*** parsed value for %s: %d", val.Name, val.Value) + dbg.Interface("val", val).Msg("walkHandler: parsed") case uint64: val.Value = int64(v) - log.Info().Msgf("*** parsed value for %s: %d", val.Name, val.Value) + dbg.Interface("val", val).Msg("walkHandler: parsed") default: - log.Warn().Msgf("value '%s' of unsupported type for %s", v, dataUnit.Name) + dbg.Msgf("walkHandler: unsupported type %T", v) } data.Values = append(data.Values, val) return nil @@ -303,7 +298,7 @@ func getSnmpData(mib string, goSnmp *snmp.GoSNMP) (*SnmpMetricData, error) { if err != nil { return nil, err } else { - log.Info().Msgf("-- end getting MIB: %s", mib) + log.Debug().Msgf("-- end getting MIB: %s", mib) } return &data, nil From 2df584a6db3c395ae10a9e31dcf4d596b6068c26 Mon Sep 17 00:00:00 2001 From: Pavlo Sumkin Date: Tue, 17 Dec 2024 17:16:11 +0100 Subject: [PATCH 4/4] GROUNDWORK-3736 force sending inventory on config --- connectors/snmp/cmd.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/connectors/snmp/cmd.go b/connectors/snmp/cmd.go index 36ce1176..19bc1f01 100644 --- a/connectors/snmp/cmd.go +++ b/connectors/snmp/cmd.go @@ -113,6 +113,10 @@ func configHandler(data []byte) { if err == nil { cfgChksum = chk } + + /* Force sending inventory */ + invChksum = nil + /* Restart periodic loop */ cancel() ctxCancel, cancel = context.WithCancel(context.Background())