From d328ad10af76b40db2af17d776da16a06367d279 Mon Sep 17 00:00:00 2001 From: David Schmitz <schmitz@lrz.de> Date: Wed, 27 Feb 2019 12:55:39 +0000 Subject: [PATCH] statistics rule mapping: fix to support also fragmentation options; update --- flowspec/junos.py | 12 +++++++----- flowspec/snmpstats.py | 19 +++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/flowspec/junos.py b/flowspec/junos.py index 1015daad..a6ae8a04 100644 --- a/flowspec/junos.py +++ b/flowspec/junos.py @@ -205,6 +205,8 @@ def get_ports(rule): if result != '': result += ',' result += 'srcport' + translate_ports(rule.sourceport) + if result != '': + result += ',' return result def translate_frag(fragment_string): #TODO get number mapping right, order matters! @@ -219,11 +221,12 @@ def translate_frag(fragment_string): #TODO get number mapping right, order matte elif fragment_string == "not-a-fragment": result="!:02"; else: - result=":00" # TODO + #result="00" # TODO + result=str(fragment_string) # TODO return result def translate_frag_list(frag_list): - result = ",".join([translate_frag(frag) for frag in frag_list]) # needs to be sorted + result = ",".join([translate_frag(str(frag)) for frag in frag_list]) # needs to be sorted return result def get_frag(rule): @@ -231,7 +234,7 @@ def get_frag(rule): if rule.fragmenttype: tmp = translate_frag_list(rule.fragmenttype.all()) if tmp != "": - result = ',frag'+tmp + result = 'frag'+tmp+',' return result def create_junos_name(rule): @@ -245,8 +248,7 @@ def create_junos_name(rule): # ports name += get_ports(rule) #frag = '' - frag = get_frag(rule) - name += frag + name += get_frag(rule) if name[-1] == ',': name = name[:-1] return name diff --git a/flowspec/snmpstats.py b/flowspec/snmpstats.py index f06f8d97..a098d5b2 100644 --- a/flowspec/snmpstats.py +++ b/flowspec/snmpstats.py @@ -190,19 +190,18 @@ def helper_stats_store_parse_ts(ts_string): def helper_rule_ts_parse(ts_string): try: ts = datetime.strptime(ts_string, '%Y-%m-%d %H:%M:%S+00:00') # TODO TZ offset assumed to be 00:00 - except Exception as e: - logger.info("helper_rule_ts_parse(): ts_string="+str(ts_string)+": got exception "+str(e)) - ts = None - - if ts==None: # other db may hav other time fmt: - logger.info("helper_rule_ts_parse(): trying with milli seconds fmt") + except ValueError as e: + #logger.info("helper_rule_ts_parse(): trying with milli seconds fmt") try: ts = datetime.strptime(ts_string, '%Y-%m-%d %H:%M:%S.%f+00:00') # TODO TZ offset assumed to be 00:00 except Exception as e: - logger.info("helper_rule_ts_parse(): ts_string="+str(ts_string)+": got exception "+str(e)) + logger.info("helper_rule_ts_parse(): ts_string="+str(ts_string)+": got exception "+str(type(e))+": "+str(e)) ts = None - - logger.info("helper_rule_ts_parse(): => ts="+str(ts)) + except Exception as e: + logger.info("helper_rule_ts_parse(): ts_string="+str(ts_string)+": got exception "+str(type(e))+": "+str(e)) + ts = None + + #logger.info("helper_rule_ts_parse(): => ts="+str(ts)) return ts def poll_snmp_statistics(): @@ -303,7 +302,7 @@ def poll_snmp_statistics(): #logger.info("snmpstats: STATISTICS_PER_RULE ruleobj.id="+str(rule_id)) #logger.info("snmpstats: STATISTICS_PER_RULE ruleobj.status="+rule_status) flowspec_params_str=create_junos_name(ruleobj) - #logger.info("snmpstats: STATISTICS_PER_RULE flowspec_params_str="+str(flowspec_params_str)) + logger.info("snmpstats: STATISTICS_PER_RULE flowspec_params_str="+str(flowspec_params_str)) if rule_status=="ACTIVE": try: -- GitLab