Skip to content
Snippets Groups Projects
Commit f53dc935 authored by David Schmitz's avatar David Schmitz
Browse files

feature/generic_mitigation_stats: start to work on multiple (JUNOS SNMP+Nokia)...

feature/generic_mitigation_stats: start to work on multiple (JUNOS SNMP+Nokia) router mitigation stats support
parent c13a8fcd
Branches
No related tags found
No related merge requests found
......@@ -567,6 +567,8 @@ NETCONF_PORT = 830
# generic mitigation statistics support
MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS="mitigation_stats_collector_specific_junos_snmp"
#MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS="mitigation_stats_collector_specific_nokia"
#MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS="mitigation_stats_collector_specific_multi"
##############################################################################
##############################################################################
......
......@@ -130,10 +130,13 @@ def get_nokia_stats():
logger.info("get_nokia_stats(): before creating manager")
#multiprocessing.set_start_method('spawn')
## hack to make current celery worker process non-daemonic, so it can reuse multiprocessing:
#del (multiprocessing.current_process()._config)['daemon']
#manager = multiprocessing.Manager()
import queue
#q = queue.Queue()
##q = queue.Queue()
manager = queue
logger.info("get_nokia_stats(): after creating manager")
......@@ -145,7 +148,7 @@ def get_nokia_stats():
if option_oneshot:
logger.info("get_nokia_stats(): option_oneshot")
logger.info("get_nokia_stats(): option_oneshotx ROUTERS="+str(ROUTERS))
router_data = {router['name']: query_router_once(router) for router in ROUTERS}
......
......@@ -11,6 +11,9 @@ if hasattr(settings, "MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS") and settin
elif hasattr(settings, "MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS") and settings.MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS == "mitigation_stats_collector_specific_junos_snmp":
from utils import mitigation_stats_collector_specific_junos_snmp as mitigation_stats_collector_specific_class
mitigation_stats_collector_specific = mitigation_stats_collector_specific_class.MitigationStatisticCollectorSpecific_JunosSnmp()
elif hasattr(settings, "MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS") and settings.MITIGATION_STATISTIC_COLLECTOR_SPECIFIC_CLASS == "mitigation_stats_collector_specific_multi":
from utils import mitigation_stats_collector_specific_multi as mitigation_stats_collector_specific_class
mitigation_stats_collector_specific = mitigation_stats_collector_specific_class.MitigationStatisticCollectorSpecific_Multi()
else: # default is junos_snmp for compatibility
from utils import mitigation_stats_collector_specific_junos_snmp as mitigation_stats_collector_specific_class
mitigation_stats_collector_specific = mitigation_stats_collector_specific_class.MitigationStatisticCollectorSpecific_JunosSnmp()
......
# -*- coding: utf-8 -*- vim:fileencoding=utf-8:
# vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab
from pysnmp.hlapi.asyncore import *
from django.conf import settings
from datetime import datetime, timedelta
import json
import os
import time
import re
from flowspec.models import Route
from utils.route_spec_utils import get_rulename_by_ruleparams__generic, unify_ratelimit_value
from utils.mitigation_stats_collector_specific_base import MitigationStatisticCollectorSpecific_Base
from utils.mitigation_stats_collector_specific_junos_snmp import MitigationStatisticCollectorSpecific_JunosSnmp
from utils.mitigation_stats_collector_specific_nokia import MitigationStatisticCollectorSpecific_Nokia
import flowspec.logging_utils
logger = flowspec.logging_utils.logger_init_default(__name__, "celery_multistats.log", False)
#
class MitigationStatisticCollectorSpecific_Multi(MitigationStatisticCollectorSpecific_Base):
#
# to be overriden in sub classes
def get_new_mitigation_statistic_data(self):
return self.get_statistic_data__from_multiple_sources()
# to be overriden in sub classes
def get_statistic_data_rule_key(self, ruleobj):
return get_rulename_by_ruleparams__generic(ruleobj)
def get_statistic_data__from_multiple_sources(self):
# TODO: run all parallel:
mitigation_stats_collector_specific1 = MitigationStatisticCollectorSpecific_Nokia()
stats_data1 = mitigation_stats_collector_specific1.get_new_mitigation_statistic_data()
mitigation_stats_collector_specific2 = MitigationStatisticCollectorSpecific_JunosSnmp()
stats_data2 = mitigation_stats_collector_specific2.get_new_mitigation_statistic_data()
# TODO: merge data
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment