From 1f8a85453c315b445c56836426abcfbc8f84a610 Mon Sep 17 00:00:00 2001 From: shiraez Date: Mon, 22 Jul 2024 14:58:31 +0000 Subject: [PATCH] Fix port_rate.lua to prevent negative values in BPS counters after counter clear --- orchagent/port_rates.lua | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/orchagent/port_rates.lua b/orchagent/port_rates.lua index c29977d153..7582d7998c 100644 --- a/orchagent/port_rates.lua +++ b/orchagent/port_rates.lua @@ -10,6 +10,14 @@ local function logit(msg) logtable[#logtable+1] = tostring(msg) end +local function calc_diff(new, last) + if new < last then + return 0 + else + return (new - last) + end +end + local counters_db = ARGV[1] local counters_table_name = ARGV[2] local rates_table_name = "RATES" @@ -58,8 +66,8 @@ local function compute_rate(port) local out_octets_last = redis.call('HGET', rates_table_name .. ':' .. port, 'SAI_PORT_STAT_IF_OUT_OCTETS_last') -- Calculate new rates values - local rx_bps_new = (in_octets - in_octets_last) / delta * 1000 - local tx_bps_new = (out_octets - out_octets_last) / delta * 1000 + local rx_bps_new = calc_diff(in_octets, in_octets_last) / delta * 1000 + local tx_bps_new = calc_diff(out_octets, out_octets_last) / delta * 1000 local rx_pps_new = ((in_ucast_pkts + in_non_ucast_pkts) - (in_ucast_pkts_last + in_non_ucast_pkts_last)) / delta * 1000 local tx_pps_new = ((out_ucast_pkts + out_non_ucast_pkts) - (out_ucast_pkts_last + out_non_ucast_pkts_last)) / delta * 1000