Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- # Description: Script for saving IPDRs for diagnosing hash issue of DPI tables
- # Author: Zolotarev Eugene zolotarev@protei.ru
- # Date: 26.03.2018
- import json
- import re
- import os
- import datetime
- import time
- from time import sleep
- from shutil import copyfile
- def get_value(dct, keys):
- key = keys.pop(0)
- if isinstance(dct.get(key, 0.0), dict):
- return get_value(dct[key], keys)
- else:
- return dct.get(key, 0.0)
- def get_files(dir, smask='', emask=''):
- files = os.listdir(dir)
- files = filter(lambda x: x.startswith(smask) and x.endswith(emask), files)
- files = [os.path.join(dir, file) for file in files]
- files = sorted(files, key=lambda log_file: os.path.getmtime(log_file))
- return files
- def convert2timestamp(line, pattern):
- # date string -> timestamp mcs
- return time.mktime(datetime.datetime.strptime(pattern.findall(line)[0], "%Y%m%d_%H.%M.%S").timetuple())
- def take_current_timestamp():
- return time.mktime(datetime.datetime.now().timetuple())
- if __name__ == "__main__":
- collection_log = '/usr/protei/log/zabbix/dpi/packet_engine.out'
- ipdrs_dir = '/usr/protei/data/FWUTech-TDE/arch/'
- ipdr_save_dir = '/usr/protei/data/FWUTech-TDE/catch_hash/'
- if not os.path.exists(ipdr_save_dir):
- os.mkdir(ipdr_save_dir)
- path_to_qdrops = ['Receivers', 'Total', 'qdrops%']
- path_to_hwdrops = ['Receivers', 'Total', 'hwdrops%']
- lines = ''
- ipdr_time_pattern = re.compile('\d+_\d+\.\d+\.\d+')
- while True:
- with open(collection_log) as collected_metrics:
- for line in collected_metrics.readlines():
- lines += line
- try:
- metrics_dict = json.loads(lines)
- except ValueError:
- sleep(60)
- continue
- qdrops = float(get_value(metrics_dict, path_to_qdrops))
- hwdrops = float(get_value(metrics_dict, path_to_hwdrops))
- if qdrops >= 15.0 or hwdrops >= 15.0:
- s_time = take_current_timestamp()
- sleep(300)
- e_time = take_current_timestamp()
- ipdrs = get_files(ipdrs_dir, smask='tde-')
- for ipdr in ipdrs:
- ipdr_time = convert2timestamp(ipdr, ipdr_time_pattern)
- if s_time <= ipdr_time <= e_time:
- copyfile(ipdr, ipdr_save_dir + ipdr)
- break
- else:
- sleep(60)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement