@cryptotaxi247 / netdata-1 / commits / 357ace451

chore(go.d/snmp): use base units for interfaces function columns (#21674)

Ilya Mashchenko committed Jan 29, 2026 at 23:44 UTC 357ace4510459ea8d05e617e5a9cad00bd4838aa
4 files changed +46 -53
src/go/plugin/go.d/agent/jobmgr/manager_test.go
+13 -13
@@ -551,7 +551,7 @@ func TestManager_Run_Dyncfg_Get(t *testing.T) {
551 wantDyncfg: `
552
553 FUNCTION_RESULT_BEGIN 1-get 404 application/json
554 -{"status":404,"message":"The specified module 'success' job 'test' is not registered."}
554 +{"status":404,"errorMessage":"The specified module 'success' job 'test' is not registered."}
555 FUNCTION_RESULT_END
556 `,
557 }
@@ -658,7 +658,7 @@ FUNCTION_RESULT_END
658 wantRunning: nil,
659 wantDyncfg: `
660 FUNCTION_RESULT_BEGIN 1-userconfig 404 application/json
661 -{"status":404,"message":"The specified module 'success!' is not registered."}
661 +{"status":404,"errorMessage":"The specified module 'success!' is not registered."}
662 FUNCTION_RESULT_END
663 `,
664 }
@@ -818,7 +818,7 @@ func TestManager_Run_Dyncfg_Enable(t *testing.T) {
818 wantDyncfg: `
819
820 FUNCTION_RESULT_BEGIN 1-enable 404 application/json
821 -{"status":404,"message":"The specified module 'success' job 'test' is not registered."}
821 +{"status":404,"errorMessage":"The specified module 'success' job 'test' is not registered."}
822 FUNCTION_RESULT_END
823 `,
824 }
@@ -1044,7 +1044,7 @@ func TestManager_Run_Dyncfg_Disable(t *testing.T) {
1044 wantDyncfg: `
1045
1046 FUNCTION_RESULT_BEGIN 1-disable 404 application/json
1047 -{"status":404,"message":"The specified module 'success' job 'test' is not registered."}
1047 +{"status":404,"errorMessage":"The specified module 'success' job 'test' is not registered."}
1048 FUNCTION_RESULT_END
1049 `,
1050 }
@@ -1270,7 +1270,7 @@ func TestManager_Run_Dyncfg_Restart(t *testing.T) {
1270 wantDyncfg: `
1271
1272 FUNCTION_RESULT_BEGIN 1-restart 404 application/json
1273 -{"status":404,"message":"The specified module 'success' job 'test' is not registered."}
1273 +{"status":404,"errorMessage":"The specified module 'success' job 'test' is not registered."}
1274 FUNCTION_RESULT_END
1275 `,
1276 }
@@ -1310,7 +1310,7 @@ FUNCTION_RESULT_END
1310 CONFIG test:collector:success:test create accepted job /collectors/test/Jobs dyncfg 'type=dyncfg' 'schema get enable disable update restart test userconfig remove' 0x0000 0x0000
1311
1312 FUNCTION_RESULT_BEGIN 2-restart 405 application/json
1313 -{"status":405,"message":"Restarting data collection job is not allowed in 'accepted' state."}
1313 +{"status":405,"errorMessage":"Restarting data collection job is not allowed in 'accepted' state."}
1314 FUNCTION_RESULT_END
1315
1316 CONFIG test:collector:success:test status accepted
@@ -1414,7 +1414,7 @@ FUNCTION_RESULT_END
1414 CONFIG test:collector:success:test status disabled
1415
1416 FUNCTION_RESULT_BEGIN 3-restart 405 application/json
1417 -{"status":405,"message":"Restarting data collection job is not allowed in 'disabled' state."}
1417 +{"status":405,"errorMessage":"Restarting data collection job is not allowed in 'disabled' state."}
1418 FUNCTION_RESULT_END
1419
1420 CONFIG test:collector:success:test status disabled
@@ -1516,7 +1516,7 @@ func TestManager_Run_Dyncfg_Remove(t *testing.T) {
1516 wantDyncfg: `
1517
1518 FUNCTION_RESULT_BEGIN 1-remove 404 application/json
1519 -{"status":404,"message":"The specified module 'success' job 'test' is not registered."}
1519 +{"status":404,"errorMessage":"The specified module 'success' job 'test' is not registered."}
1520 FUNCTION_RESULT_END
1521 `,
1522 }
@@ -1603,15 +1603,15 @@ FUNCTION_RESULT_END
1603 CONFIG test:collector:success:discovered status running
1604
1605 FUNCTION_RESULT_BEGIN 1-remove 405 application/json
1606 -{"status":405,"message":"Removing jobs of type 'stock' is not supported. Only 'dyncfg' jobs can be removed."}
1606 +{"status":405,"errorMessage":"Removing jobs of type 'stock' is not supported. Only 'dyncfg' jobs can be removed."}
1607 FUNCTION_RESULT_END
1608
1609 FUNCTION_RESULT_BEGIN 2-remove 405 application/json
1610 -{"status":405,"message":"Removing jobs of type 'user' is not supported. Only 'dyncfg' jobs can be removed."}
1610 +{"status":405,"errorMessage":"Removing jobs of type 'user' is not supported. Only 'dyncfg' jobs can be removed."}
1611 FUNCTION_RESULT_END
1612
1613 FUNCTION_RESULT_BEGIN 3-remove 405 application/json
1614 -{"status":405,"message":"Removing jobs of type 'discovered' is not supported. Only 'dyncfg' jobs can be removed."}
1614 +{"status":405,"errorMessage":"Removing jobs of type 'discovered' is not supported. Only 'dyncfg' jobs can be removed."}
1615 FUNCTION_RESULT_END
1616 `,
1617 }
@@ -1736,7 +1736,7 @@ func TestManager_Run_Dyncfg_Update(t *testing.T) {
1736 wantDyncfg: `
1737
1738 FUNCTION_RESULT_BEGIN 1-update 404 application/json
1739 -{"status":404,"message":"The specified module 'success' job 'test' is not registered."}
1739 +{"status":404,"errorMessage":"The specified module 'success' job 'test' is not registered."}
1740 FUNCTION_RESULT_END
1741 `,
1742 }
@@ -1953,7 +1953,7 @@ func TestManager_Run_FunctionOnly(t *testing.T) {
1953 CONFIG test:collector:nofuncs:test create accepted job /collectors/test/Jobs user 'type=user,module=nofuncs,job=test' 'schema get enable disable update restart test userconfig' 0x0000 0x0000
1954
1955 FUNCTION_RESULT_BEGIN 1-enable 400 application/json
1956 -{"status":400,"message":"Invalid configuration. Failed to apply configuration: function_only is set but nofuncs module has no methods defined."}
1956 +{"status":400,"errorMessage":"Invalid configuration. Failed to apply configuration: function_only is set but nofuncs module has no methods defined."}
1957 FUNCTION_RESULT_END
1958
1959 CONFIG test:collector:nofuncs:test status failed
src/go/plugin/go.d/collector/snmp/func_interfaces.go
+12 -19
@@ -250,13 +250,6 @@ func ptrToAny(p *float64) any {
250 return *p
251 }
252
253 -func ptrToAnyScale(p *float64, scale float64) any {
254 - if p == nil {
255 - return nil
256 - }
257 - return *p / scale
258 -}
259 -
253 func sumRates(vals ...*float64) *float64 {
254 var sum float64
255 hasValue := false
@@ -290,22 +283,22 @@ var snmpAllColumns = []snmpColumn{
283 {ColumnMeta: funcapi.ColumnMeta{Name: "Type Group", Tooltip: "Custom mapping of IANA ifType into groups", Type: funcapi.FieldTypeString, Visible: true, Sort: funcapi.FieldSortAscending, Summary: funcapi.FieldSummaryCount, Filter: funcapi.FieldFilterMultiselect, Sortable: true}, Value: func(e *ifaceEntry) any { return e.ifTypeGroup }},
284 {ColumnMeta: funcapi.ColumnMeta{Name: "Admin Status", Tooltip: "Administrative status: up, down, testing", Type: funcapi.FieldTypeString, Visible: true, Sort: funcapi.FieldSortAscending, Summary: funcapi.FieldSummaryCount, Filter: funcapi.FieldFilterMultiselect, Sortable: true}, Value: func(e *ifaceEntry) any { return e.adminStatus }},
285 {ColumnMeta: funcapi.ColumnMeta{Name: "Oper Status", Tooltip: "Operational status: up, down, testing, unknown, dormant, notPresent, lowerLayerDown", Type: funcapi.FieldTypeString, Visible: true, Sort: funcapi.FieldSortAscending, Summary: funcapi.FieldSummaryCount, Filter: funcapi.FieldFilterMultiselect, Sortable: true, Chart: &funcapi.ChartOptions{Group: "OperationalStatus", Title: "Operational Status", IsDefault: true, DefaultGroupBy: "Oper Status"}, GroupBy: &funcapi.GroupByOptions{}}, Value: func(e *ifaceEntry) any { return e.operStatus }},
293 - {ColumnMeta: funcapi.ColumnMeta{Name: "Traffic In", Tooltip: "Traffic In", Type: funcapi.FieldTypeFloat, Units: "Mbits", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "Traffic", IsDefault: true, DefaultGroupBy: "Type"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.trafficIn, 1_000_000) }},
294 - {ColumnMeta: funcapi.ColumnMeta{Name: "Traffic Out", Tooltip: "Traffic Out", Type: funcapi.FieldTypeFloat, Units: "Mbits", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "Traffic"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.trafficOut, 1_000_000) }},
295 - {ColumnMeta: funcapi.ColumnMeta{Name: "Unicast In", Tooltip: "Unicast In", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "UnicastPackets", Title: "Unicast Packets"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.ucastPktsIn, 1_000) }},
296 - {ColumnMeta: funcapi.ColumnMeta{Name: "Unicast Out", Tooltip: "Unicast Out", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "UnicastPackets"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.ucastPktsOut, 1_000) }},
297 - {ColumnMeta: funcapi.ColumnMeta{Name: "Broadcast In", Tooltip: "Broadcast In", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "BroadcastPackets", Title: "Broadcast Packets"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.bcastPktsIn, 1_000) }},
298 - {ColumnMeta: funcapi.ColumnMeta{Name: "Broadcast Out", Tooltip: "Broadcast Out", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "BroadcastPackets"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.bcastPktsOut, 1_000) }},
299 - {ColumnMeta: funcapi.ColumnMeta{Name: "Packets In", Tooltip: "Packets In", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any {
300 - return ptrToAnyScale(sumRates(e.rates.ucastPktsIn, e.rates.bcastPktsIn, e.rates.mcastPktsIn), 1_000)
286 + {ColumnMeta: funcapi.ColumnMeta{Name: "Traffic In", Tooltip: "Traffic In", Type: funcapi.FieldTypeFloat, Units: "bit/s", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "Traffic", IsDefault: true, DefaultGroupBy: "Type"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.trafficIn) }},
287 + {ColumnMeta: funcapi.ColumnMeta{Name: "Traffic Out", Tooltip: "Traffic Out", Type: funcapi.FieldTypeFloat, Units: "bit/s", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "Traffic"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.trafficOut) }},
288 + {ColumnMeta: funcapi.ColumnMeta{Name: "Unicast In", Tooltip: "Unicast In", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "UnicastPackets", Title: "Unicast Packets"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.ucastPktsIn) }},
289 + {ColumnMeta: funcapi.ColumnMeta{Name: "Unicast Out", Tooltip: "Unicast Out", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "UnicastPackets"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.ucastPktsOut) }},
290 + {ColumnMeta: funcapi.ColumnMeta{Name: "Broadcast In", Tooltip: "Broadcast In", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "BroadcastPackets", Title: "Broadcast Packets"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.bcastPktsIn) }},
291 + {ColumnMeta: funcapi.ColumnMeta{Name: "Broadcast Out", Tooltip: "Broadcast Out", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "BroadcastPackets"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.bcastPktsOut) }},
292 + {ColumnMeta: funcapi.ColumnMeta{Name: "Packets In", Tooltip: "Packets In", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any {
293 + return ptrToAny(sumRates(e.rates.ucastPktsIn, e.rates.bcastPktsIn, e.rates.mcastPktsIn))
294 }},
302 - {ColumnMeta: funcapi.ColumnMeta{Name: "Packets Out", Tooltip: "Packets Out", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any {
303 - return ptrToAnyScale(sumRates(e.rates.ucastPktsOut, e.rates.bcastPktsOut, e.rates.mcastPktsOut), 1_000)
295 + {ColumnMeta: funcapi.ColumnMeta{Name: "Packets Out", Tooltip: "Packets Out", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any {
296 + return ptrToAny(sumRates(e.rates.ucastPktsOut, e.rates.bcastPktsOut, e.rates.mcastPktsOut))
297 }},
298 {ColumnMeta: funcapi.ColumnMeta{Name: "Errors In", Tooltip: "Errors In", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.errorsIn) }},
299 {ColumnMeta: funcapi.ColumnMeta{Name: "Errors Out", Tooltip: "Errors Out", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.errorsOut) }},
300 {ColumnMeta: funcapi.ColumnMeta{Name: "Discards In", Tooltip: "Discards In", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.discardsIn) }},
301 {ColumnMeta: funcapi.ColumnMeta{Name: "Discards Out", Tooltip: "Discards Out", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: true, Transform: funcapi.FieldTransformNumber, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.discardsOut) }},
309 - {ColumnMeta: funcapi.ColumnMeta{Name: "Multicast In", Tooltip: "Multicast In", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "MulticastPackets", Title: "Multicast Packets"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.mcastPktsIn, 1_000) }},
310 - {ColumnMeta: funcapi.ColumnMeta{Name: "Multicast Out", Tooltip: "Multicast Out", Type: funcapi.FieldTypeFloat, Units: "Kpps", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "MulticastPackets"}}, Value: func(e *ifaceEntry) any { return ptrToAnyScale(e.rates.mcastPktsOut, 1_000) }},
302 + {ColumnMeta: funcapi.ColumnMeta{Name: "Multicast In", Tooltip: "Multicast In", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "MulticastPackets", Title: "Multicast Packets"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.mcastPktsIn) }},
303 + {ColumnMeta: funcapi.ColumnMeta{Name: "Multicast Out", Tooltip: "Multicast Out", Type: funcapi.FieldTypeFloat, Units: "packets/s", Visualization: funcapi.FieldVisualBar, Visible: false, Transform: funcapi.FieldTransformNumber, DecimalPoints: 2, Sort: funcapi.FieldSortDescending, Summary: funcapi.FieldSummarySum, Filter: funcapi.FieldFilterRange, Sortable: true, Chart: &funcapi.ChartOptions{Group: "MulticastPackets"}}, Value: func(e *ifaceEntry) any { return ptrToAny(e.rates.mcastPktsOut) }},
304 }
src/go/plugin/go.d/collector/snmp/metadata.yaml
+20 -20
@@ -542,40 +542,40 @@ modules:
542 description: "Current operational state of the interface: up (operational and passing traffic), down (not operational), testing (in test mode), unknown (status cannot be determined), dormant (waiting for external actions), notPresent (interface removed but configuration remains), or lowerLayerDown (interface down due to lower-layer issues)"
543 - name: Traffic In
544 type: float
545 - unit: "Mbits"
546 - description: Inbound network traffic rate in megabits per second. High values indicate heavy inbound data flow that may require capacity planning.
545 + unit: "bit/s"
546 + description: Inbound network traffic rate in bits per second. High values indicate heavy inbound data flow that may require capacity planning.
547 - name: Traffic Out
548 type: float
549 - unit: "Mbits"
550 - description: Outbound network traffic rate in megabits per second. High values indicate heavy outbound data flow. Compare with Traffic In to identify asymmetric usage patterns.
549 + unit: "bit/s"
550 + description: Outbound network traffic rate in bits per second. High values indicate heavy outbound data flow. Compare with Traffic In to identify asymmetric usage patterns.
551 - name: Unicast In
552 type: float
553 - unit: "Kpps"
553 + unit: "packets/s"
554 visibility: hidden
555 - description: Rate of unicast packets (destined for a single recipient) received per second in thousands. Normal traffic pattern for point-to-point communications.
555 + description: Rate of unicast packets (destined for a single recipient) received per second. Normal traffic pattern for point-to-point communications.
556 - name: Unicast Out
557 type: float
558 - unit: "Kpps"
558 + unit: "packets/s"
559 visibility: hidden
560 - description: Rate of unicast packets (addressed to a single destination) transmitted per second in thousands.
560 + description: Rate of unicast packets (addressed to a single destination) transmitted per second.
561 - name: Broadcast In
562 type: float
563 - unit: "Kpps"
563 + unit: "packets/s"
564 visibility: hidden
565 - description: Rate of broadcast packets (sent to all nodes on network) received per second in thousands. High values may indicate network storms, ARP flooding, or misconfigured devices.
565 + description: Rate of broadcast packets (sent to all nodes on network) received per second. High values may indicate network storms, ARP flooding, or misconfigured devices.
566 - name: Broadcast Out
567 type: float
568 - unit: "Kpps"
568 + unit: "packets/s"
569 visibility: hidden
570 - description: Rate of broadcast packets transmitted per second in thousands. Consistently high broadcast rates can degrade network performance.
570 + description: Rate of broadcast packets transmitted per second. Consistently high broadcast rates can degrade network performance.
571 - name: Packets In
572 type: float
573 - unit: "Kpps"
574 - description: Total inbound packet rate (sum of unicast, broadcast, and multicast) per second in thousands. Useful for overall interface load assessment.
573 + unit: "packets/s"
574 + description: Total inbound packet rate (sum of unicast, broadcast, and multicast) per second. Useful for overall interface load assessment.
575 - name: Packets Out
576 type: float
577 - unit: "Kpps"
578 - description: Total outbound packet rate (sum of unicast, broadcast, and multicast) per second in thousands.
577 + unit: "packets/s"
578 + description: Total outbound packet rate (sum of unicast, broadcast, and multicast) per second.
579 - name: Errors In
580 type: float
581 unit: "packets/s"
@@ -596,14 +596,14 @@ modules:
596 description: Rate of outbound packets deliberately discarded. Can indicate output queue overflows, ACL drops, or security policy rejections.
597 - name: Multicast In
598 type: float
599 - unit: "Kpps"
599 + unit: "packets/s"
600 visibility: hidden
601 - description: Rate of multicast packets (destined for a group) received per second in thousands. Common in video streaming, multicast applications, and routing protocols.
601 + description: Rate of multicast packets (destined for a group) received per second. Common in video streaming, multicast applications, and routing protocols.
602 - name: Multicast Out
603 type: float
604 - unit: "Kpps"
604 + unit: "packets/s"
605 visibility: hidden
606 - description: Rate of multicast packets transmitted per second in thousands.
606 + description: Rate of multicast packets transmitted per second.
607 performance: |
608 Uses cached SNMP data only, no additional SNMP requests are triggered:<br/>• Responses are instantaneous from memory cache<br/>• Large devices with many interfaces may return many rows
609 security: |
src/go/plugin/go.d/pkg/ndexec/ndexec_test.go
+1 -1
@@ -71,7 +71,7 @@ exec "$@"
71 "nonzero_with_trimmed_stderr": {
72 helperPath: helper,
73 argv: []string{longErr},
74 - timeout: time.Second,
74 + timeout: 5 * time.Second,
75 wantErr: true,
76 errContains: []string{"stderr:", "truncated"},
77 },