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
},