diff --git a/flowspec/tasks.py b/flowspec/tasks.py index 6bae98a1e6064e81eef8e08c9a21109a8011b9ef..a6767759b59eada98b6e5cdf2014706d30c8272f 100644 --- a/flowspec/tasks.py +++ b/flowspec/tasks.py @@ -389,11 +389,11 @@ def mitigation_stats_lock_create(wait=0): time.sleep(1) return success; -def snmp_lock_remove(): +def mitigation_stats_lock_remove(): try: os.rmdir(settings.SNMP_POLL_LOCK) except Exception as e: - logger.error("snmp_lock_remove(): failed "+str(e)) + logger.error("mitigation_stats_lock_remove(): failed "+str(e)) def exit_process(): #import sys @@ -418,7 +418,7 @@ def poll_snmp_statistics(): #@shared_task(ignore_result=True, time_limit=580, soft_time_limit=550) @shared_task(ignore_result=True, max_retries=0) def mitigation_stats_poll_statistics(): - from utils import junossnmpstats + from utils.mitigation_stats_collector import mitigation_stats_collector_specific if not mitigation_stats_lock_create(0): return @@ -437,10 +437,10 @@ def mitigation_stats_poll_statistics(): pid = os.getpid() logger.info("mitigation_stats_poll_statistics(): in child process (pid="+str(pid)+", ppid="+str(ppid)+")") try: - junossnmpstats.poll_snmp_statistics() + mitigation_stats_collector_specific.poll_snmp_statistics() except Exception as e: logger.error("mitigation_stats_poll_statistics(): exception occured in snmp poll (pid="+str(pid)+", ppid="+str(ppid)+"): "+str(e)) - snmp_lock_remove() + mitigation_stats_lock_remove() #exit_process() # not used anymore: will lead to exit of parent process @@ -458,20 +458,20 @@ def mitigation_stats_poll_statistics(): ## -def mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, snmpstats, add_initial_value=True, zero_or_null=True, reset_remember_last_value=True, update_remember_last_value=False): +def mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, mitigation_stats_collector_specific, add_initial_value=True, zero_or_null=True, reset_remember_last_value=True, update_remember_last_value=False): logger.info("mitigation_stats_add_initial_zero_value_inner(): called: 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)) if add_initial_value: try: - snmpstats.add_initial_zero_value(route_id, route, zero_or_null) + mitigation_stats_collector_specific.add_initial_zero_value(route_id, route, zero_or_null) logger.debug("mitigation_stats_add_initial_zero_value_inner(): (1) routepk="+str(routepk)+","+str(zero_or_null)+" add_initial_zero_value sucesss") except Exception as e: logger.error("mitigation_stats_add_initial_zero_value_inner(): (1) routepk="+str(routepk)+","+str(zero_or_null)+" add_initial_zero_value failed: "+str(e)) if reset_remember_last_value: try: - snmpstats.clean_oldmatched__for_changed_ratelimitrules_whileactive(route_id, route) + mitigation_stats_collector_specific.clean_oldmatched__for_changed_ratelimitrules_whileactive(route_id, route) logger.debug("mitigation_stats_add_initial_zero_value_inner(): (2) routepk="+str(routepk)+","+str(zero_or_null)+" clean_oldmatched__for_changed_ratelimitrules_whileactive sucesss") except Exception as e: logger.error("mitigation_stats_add_initial_zero_value_inner(): (2) routepk="+str(routepk)+","+str(zero_or_null)+" clean_oldmatched__for_changed_ratelimitrules_whileactive failed: "+str(e)) @@ -479,7 +479,7 @@ def mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, snmp elif update_remember_last_value: try: logger.info("mitigation_stats_add_initial_zero_value_inner(): (3a) 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) + mitigation_stats_collector_specific.remember_oldmatched__for_changed_ratelimitrules_whileactive(route_id, route) logger.info("mitigation_stats_add_initial_zero_value_inner(): (3b) routepk="+str(routepk)+","+str(zero_or_null)+" remember_oldmatched__for_changed_ratelimitrules_whileactive sucesss") except Exception as e: logger.error("mitigation_stats_add_initial_zero_value_inner(): (4) routepk="+str(routepk)+","+str(zero_or_null)+" remember_oldmatched__for_changed_ratelimitrules_whileactive failed: "+str(e)) @@ -487,7 +487,7 @@ def mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, snmp @shared_task(ignore_result=True, max_retries=0) def mitigation_stats_add_initial_zero_value(routepk, route_id, add_initial_value=True, zero_or_null=True, reset_remember_last_value=True, update_remember_last_value=False): - from utils import junossnmpstats + from utils.mitigation_stats_collector import mitigation_stats_collector_specific logger.info("mitigation_stats_add_initial_zero_value(): 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)) route = None @@ -503,7 +503,7 @@ def mitigation_stats_add_initial_zero_value(routepk, route_id, add_initial_value if not use_fork: - mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, junossnmpstats, add_initial_value=add_initial_value, zero_or_null=zero_or_null, reset_remember_last_value=reset_remember_last_value, update_remember_last_value=update_remember_last_value) + mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, mitigation_stats_collector_specific, add_initial_value=add_initial_value, zero_or_null=zero_or_null, reset_remember_last_value=reset_remember_last_value, update_remember_last_value=update_remember_last_value) else: signal.signal(signal.SIGCHLD, handleSIGCHLD) @@ -520,7 +520,7 @@ def mitigation_stats_add_initial_zero_value(routepk, route_id, add_initial_value pid = os.getpid() logger.info("mitigation_stats_add_initial_zero_value(): in child process (pid="+str(pid)+", ppid="+str(ppid)+")") - mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, junossnmpstats, add_initial_value=add_initial_value, zero_or_null=zero_or_null, reset_remember_last_value=reset_remember_last_value, update_remember_last_value=update_remember_last_value) + mitigation_stats_add_initial_zero_value_inner(routepk, route_id, route, mitigation_stats_collector_specific, add_initial_value=add_initial_value, zero_or_null=zero_or_null, reset_remember_last_value=reset_remember_last_value, update_remember_last_value=update_remember_last_value) #exit_process() diff --git a/flowspy/settings.py.dist b/flowspy/settings.py.dist index d37d671ce45e5fade7bf6e5789a895257487ed94..ee68bedace2c9d0075b47e045543d97bb0627c55 100644 --- a/flowspy/settings.py.dist +++ b/flowspy/settings.py.dist @@ -552,6 +552,12 @@ NETCONF_USER = "" NETCONF_PASS = "" NETCONF_PORT = 830 +############################################################################## +############################################################################## +# generic mitigation statistics support + +MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS="mitigation_stats_collector_specific_junos_snmp" + ############################################################################## ############################################################################## # SNMP statistic fetching diff --git a/utils/mitigation_stats_collector.py b/utils/mitigation_stats_collector.py new file mode 100644 index 0000000000000000000000000000000000000000..b721aad436d993dfe5882b0d3194b1b3e021dc90 --- /dev/null +++ b/utils/mitigation_stats_collector.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- vim:fileencoding=utf-8: +# vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab + +# ../flowspy/settings.py.dist +# ../flowspy/settings.py +from django.conf import settings + +if hasattr(settings, "MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS") and settings.PROXY_CLASS == "mitigation_stats_collector_specific_junos_snmp": + from utils import mitigation_stats_collector_specific_junos_snmp as mitigation_stats_collector_specific +else: # default is junos_snmp for compatibility + from utils import mitigation_stats_collector_specific_junos_snmp as mitigation_stats_collector_specific + + diff --git a/utils/junossnmpstats.py b/utils/mitigation_stats_collector_specific_junos_snmp.py similarity index 99% rename from utils/junossnmpstats.py rename to utils/mitigation_stats_collector_specific_junos_snmp.py index 4ed46e546f454ba38632405956acaa9d57d56854..c4e113ecca4d2c5a1c0b0b1b8d88eb3a7f6fbaf9 100644 --- a/utils/junossnmpstats.py +++ b/utils/mitigation_stats_collector_specific_junos_snmp.py @@ -320,6 +320,9 @@ def helper_get_countertype_of_rule(ruleobj): # +def poll_mitigation_statistics(): + return poll_snmp_statistics() + def poll_snmp_statistics(): logger.debug("poll_snmp_statistics(): polling SNMP statistics.")