From 3ddc82c2d8d11eec53ed5faa8db969a1bb81f8bb Mon Sep 17 00:00:00 2001 From: Thomas Lin Date: Wed, 1 Jan 2020 07:10:53 -0500 Subject: [PATCH] Fixed inaccurate 'node_network_speed_bytes' when speeds are low (#1580) Integer division and the order of operations when converting Mbps to Bps results in a loss of accuracy if the interface speeds are set low. e.g. 100 Mbps is reported as 12000000 Bps, should be 12500000 10 Mbps is reported as 1000000 Bps, should be 1250000 Signed-off-by: Thomas Lin --- CHANGELOG.md | 1 + collector/netclass_linux.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b65a3008..2f85f512 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ * [BUGFIX] Strip path.rootfs from mountpoint labels #1421 * [BUGFIX] Fix empty string in path.rootfs #1464 * [BUGFIX] Fix typo in cpufreq metric names #1510 +* [BUGFIX] Fix network speed math #1580 ## 0.18.1 / 2019-06-04 diff --git a/collector/netclass_linux.go b/collector/netclass_linux.go index 8d8a984e..cbfcb628 100644 --- a/collector/netclass_linux.go +++ b/collector/netclass_linux.go @@ -144,7 +144,7 @@ func (c *netClassCollector) Update(ch chan<- prometheus.Metric) error { } if ifaceInfo.Speed != nil { - speedBytes := int64(*ifaceInfo.Speed / 8 * 1000 * 1000) + speedBytes := int64(*ifaceInfo.Speed * 1000 * 1000 / 8) pushMetric(ch, c.subsystem, "speed_bytes", speedBytes, ifaceInfo.Name, prometheus.GaugeValue) }