From 93f70e23f4a18980d36d8412eb392c7375e5fce8 Mon Sep 17 00:00:00 2001 From: David Schmitz <schmitz@lrz.de> Date: Fri, 26 Apr 2024 06:02:43 +0000 Subject: [PATCH] fix/wrong_ratelimit_stats: start to work on ability for remembering value matched offset for handling edited active rules which changes of rate-limit --- flowspec/snmpstats.py | 19 +++++++++++++++++-- flowspec/tasks.py | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/flowspec/snmpstats.py b/flowspec/snmpstats.py index a702a092..265d2e16 100644 --- a/flowspec/snmpstats.py +++ b/flowspec/snmpstats.py @@ -460,14 +460,29 @@ def poll_snmp_statistics(): counter = {"ts": nowstr, "value": val_dropped} else: logger.info("poll_snmp_statistics(): 1b STATISTICS_PER_RULE rule_id="+str(rule_id)) + try: val_dropped = newdata[flowspec_params_str][xtype_default] except Exception: val_dropped = 1 + try: val_matched = newdata[flowspec_params_str][xtype] + + key_remember_oldmatched = str(rule_id)+".remember_oldmatched_offset" + try: + last_matched__remember_offset_value = history_per_rule[key_remember_oldmatched]["value_matched"] + last_matched__remember_offset_value__pkts = last_matched__remember_offset_value["packets"] + last_matched__remember_offset_value__bytes = last_matched__remember_offset_value["bytes"] + except: + last_matched__remember_offset_value__pkts = 0 + last_matched__remember_offset_value__bytes = 0 + except Exception: val_matched = 1 + + ## + counter = { "ts": nowstr, "value": val_dropped, "value_matched": val_matched } counter_is_null = False @@ -647,8 +662,8 @@ def remember_oldmatched__for_changed_ratelimitrules_whileactive(rule_id, route_o try: last_matched__measurement_value = history_per_rule[key_last_measurement]["value_matched"] - last_matched__measurement_value__pkts = last_matched__measurement_value__pkts["packets"] - last_matched__measurement_value__bytes = last_matched__measurement_value__pkts["bytes"] + last_matched__measurement_value__pkts = last_matched__measurement_value["packets"] + last_matched__measurement_value__bytes = last_matched__measurement_value["bytes"] except: last_matched__measurement_value__pkts = 0 last_matched__measurement_value__bytes = 0 diff --git a/flowspec/tasks.py b/flowspec/tasks.py index 03010877..c0bbe5c0 100644 --- a/flowspec/tasks.py +++ b/flowspec/tasks.py @@ -488,7 +488,7 @@ def snmp_add_initial_zero_value(routepk, route_id, add_initial_value=True, zero_ try: logger.info("snmp_add_initial_zero_value(): (3) routepk="+str(routepk)+" route_id="+str(route_id)+" add_initial_value="+str(add_initial_value)+" zero_or_null="+str(zero_or_null)+" reset_remember_last_value="+str(reset_remember_last_value)+" update_remember_last_value="+str(update_remember_last_value)) snmpstats.remember_oldmatched__for_changed_ratelimitrules_whileactive(route_id, route) - logger.debug("snmp_add_initial_zero_value(): routepk="+str(routepk)+","+str(zero_or_null)+" remember_oldmatched__for_changed_ratelimitrules_whileactive sucesss") + logger.info("snmp_add_initial_zero_value(): (4) routepk="+str(routepk)+","+str(zero_or_null)+" remember_oldmatched__for_changed_ratelimitrules_whileactive sucesss") except Exception as e: logger.error("snmp_add_initial_zero_value(): routepk="+str(routepk)+","+str(zero_or_null)+" remember_oldmatched__for_changed_ratelimitrules_whileactive failed: "+str(e)) -- GitLab