def parse_golden_config(mdreq, device_map_name):
    golden_config_dict = {}
    namespace_name = ""
    tunnel_all_namespace = ""
    # Get the generic namespace name from the specified config file
    CONFIG_FILE_NODE = "/nkn/log_analyzer/config/config_file/url"
    try:
        filename = mdreq.query(CONFIG_FILE_NODE)
    except KeyError as e:
        dpiloganalyzer_log.info("Not able to query the config-file/log-analyzer node. Defauling to local")
        filename = "local"
    if filename == "local":
        filename = header.DEFAULT_GOLDEN_CONFIG
    else:
        filename = header.MFC_CONFIG
    generic_namespace_name = gen_utils.get_generic_namespace_name(filename)
    with open(filename, "r") as fp:
        for line in fp:
            if "delivery protocol http client-request tunnel-all" in line:
                tunnel_all_namespace = line.split()[1].strip()
            if " domain " in line:
                lst = line.split()
                namespace_name = lst[1].strip()
                # Skip the generic namespace and the default one
                if (
                    namespace_name == "default"
                    or namespace_name == generic_namespace_name
                    or namespace_name == tunnel_all_namespace
                ):
                    continue
                if lst[3] == "regex":
                    domain_pattern = lst[4][1:-1].strip()
                else:
                    if lst[3].strip() == "any":
                        domain_pattern = ".*"
                    else:
                        domain_pattern = lst[3].strip()
                golden_config_dict[namespace_name] = [compile_regex(domain_pattern)]
            if "match uri" in line:
                if (
                    namespace_name == "default"
                    or namespace_name == generic_namespace_name
                    or namespace_name == tunnel_all_namespace
                ):
                    continue
                lst = line.split()
                if lst[4].strip() == "regex":
                    uri_pattern = lst[5][1:-1].strip()
                else:
                    uri_pattern = "^" + lst[4].strip() + ".*"
                pattern_list = golden_config_dict[namespace_name]
                pattern_list.append(compile_regex(uri_pattern))
    return golden_config_dict
Esempio n. 2
0
def parse_golden_config(mdreq, device_map_name):
    golden_config_dict = {}
    namespace_name = ""
    tunnel_all_namespace = ""
    #Get the generic namespace name from the specified config file
    CONFIG_FILE_NODE = '/nkn/log_analyzer/config/config_file/url'
    try:
        filename = mdreq.query(CONFIG_FILE_NODE)
    except KeyError as e:
        dpiloganalyzer_log.info(
            "Not able to query the config-file/log-analyzer node. Defauling to local"
        )
        filename = 'local'
    if filename == 'local':
        filename = header.DEFAULT_GOLDEN_CONFIG
    else:
        filename = header.MFC_CONFIG
    generic_namespace_name = gen_utils.get_generic_namespace_name(filename)
    with open(filename, 'r') as fp:
        for line in fp:
            if 'delivery protocol http client-request tunnel-all' in line:
                tunnel_all_namespace = line.split()[1].strip()
            if ' domain ' in line:
                lst = line.split()
                namespace_name = lst[1].strip()
                #Skip the generic namespace and the default one
                if namespace_name == 'default' or namespace_name == generic_namespace_name or namespace_name == tunnel_all_namespace:
                    continue
                if lst[3] == 'regex':
                    domain_pattern = lst[4][1:-1].strip()
                else:
                    if lst[3].strip() == 'any':
                        domain_pattern = '.*'
                    else:
                        domain_pattern = lst[3].strip()
                golden_config_dict[namespace_name] = [
                    compile_regex(domain_pattern)
                ]
            if 'match uri' in line:
                if namespace_name == 'default' or namespace_name == generic_namespace_name or namespace_name == tunnel_all_namespace:
                    continue
                lst = line.split()
                if lst[4].strip() == 'regex':
                    uri_pattern = lst[5][1:-1].strip()
                else:
                    uri_pattern = "^" + lst[4].strip() + '.*'
                pattern_list = golden_config_dict[namespace_name]
                pattern_list.append(compile_regex(uri_pattern))
    return golden_config_dict
Esempio n. 3
0
def read_mfc_accesslog(analyzer_conf_dict):
	global checksum_dict
	global mfc_result_file
	global mfc_pbr_file
	global mfcloganalyzer_log
	mfc_result_file = mfc_header.RESULT_FILE
	mfc_pbr_file = mfc_header.PBR_FILE
	##TEMP FIX. Generate pbr and analyzer log files with timestamp appended to it's name
	if os.path.isfile(mfc_header.RESULT_FILE):
		mfc_result_file = mfc_header.RESULT_FILE + "_" + str(time.time())
	if os.path.isfile(mfc_header.PBR_FILE):
		mfc_pbr_file = mfc_header.PBR_FILE + "_" + str(time.time())
	#Logger settings
	logformatter = logging.Formatter('%(asctime)s;%(message)s')
	#Use the custom log rotation handler which gzip's the old rotated log file
	handler = gen_utils.NewRotatingFileHandler(mfc_header.LOG_FILE, maxBytes=mfc_header.MAXLOG_SIZE, backupCount=mfc_header.LOGBACKP_COUNT)
	handler.setFormatter(logformatter)
	mfcloganalyzer_log = logging.getLogger('__name__')
	mfcloganalyzer_log.setLevel(logging.DEBUG)
	#Point to the custom log handler
	mfcloganalyzer_log.addHandler(handler)
	#Get the generic namespace name from the specified config file
	filename = analyzer_conf_dict['mfc_config_file']
	generic_namespace_name = gen_utils.get_generic_namespace_name(filename)
	if  generic_namespace_name == None:
		    mfcloganalyzer_log.info("No generic namespace name found in the mfc configuration file")
	#Load the saved checksum_dict dictionary data
	mfc_accesslog_path = analyzer_conf_dict['mfc_accesslog_path']
	os.chdir(mfc_accesslog_path)
	if os.path.isfile('log_analyzer_checksum_dict.pickle'):
		with open('log_analyzer_checksum_dict.pickle', 'rb') as f:
			checksum_dict =  pickle.load(f)
	#Parse the mfc accesslog and dump the namespace name and the list of dest-ip' in a file
	while True:
		parse_mfc_accesslog(generic_namespace_name, analyzer_conf_dict, mfc_accesslog_path)
		time.sleep(3)
	return 0