Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Description: Script for saving IPDRs for diagnosing hash issue of DPI tables
  5. # Author: Zolotarev Eugene zolotarev@protei.ru
  6. # Date: 26.03.2018
  7.  
  8. import json
  9. import re
  10. import os
  11. import datetime
  12. import time
  13. from time import sleep
  14. from shutil import copyfile
  15.  
  16.  
  17. def get_value(dct, keys):
  18. key = keys.pop(0)
  19.  
  20. if isinstance(dct.get(key, 0.0), dict):
  21. return get_value(dct[key], keys)
  22. else:
  23. return dct.get(key, 0.0)
  24.  
  25.  
  26. def get_files(dir, smask='', emask=''):
  27. files = os.listdir(dir)
  28. files = filter(lambda x: x.startswith(smask) and x.endswith(emask), files)
  29. files = [os.path.join(dir, file) for file in files]
  30. files = sorted(files, key=lambda log_file: os.path.getmtime(log_file))
  31.  
  32. return files
  33.  
  34.  
  35. def convert2timestamp(line, pattern):
  36. # date string -> timestamp mcs
  37. return time.mktime(datetime.datetime.strptime(pattern.findall(line)[0], "%Y%m%d_%H.%M.%S").timetuple())
  38.  
  39.  
  40. def take_current_timestamp():
  41. return time.mktime(datetime.datetime.now().timetuple())
  42.  
  43.  
  44. if __name__ == "__main__":
  45.  
  46. collection_log = '/usr/protei/log/zabbix/dpi/packet_engine.out'
  47. ipdrs_dir = '/usr/protei/data/FWUTech-TDE/arch/'
  48.  
  49. ipdr_save_dir = '/usr/protei/data/FWUTech-TDE/catch_hash/'
  50.  
  51. if not os.path.exists(ipdr_save_dir):
  52. os.mkdir(ipdr_save_dir)
  53.  
  54. path_to_qdrops = ['Receivers', 'Total', 'qdrops%']
  55. path_to_hwdrops = ['Receivers', 'Total', 'hwdrops%']
  56.  
  57. lines = ''
  58.  
  59. ipdr_time_pattern = re.compile('\d+_\d+\.\d+\.\d+')
  60.  
  61. while True:
  62. with open(collection_log) as collected_metrics:
  63. for line in collected_metrics.readlines():
  64. lines += line
  65. try:
  66. metrics_dict = json.loads(lines)
  67. except ValueError:
  68. sleep(60)
  69. continue
  70.  
  71. qdrops = float(get_value(metrics_dict, path_to_qdrops))
  72. hwdrops = float(get_value(metrics_dict, path_to_hwdrops))
  73.  
  74. if qdrops >= 15.0 or hwdrops >= 15.0:
  75. s_time = take_current_timestamp()
  76. sleep(300)
  77. e_time = take_current_timestamp()
  78.  
  79. ipdrs = get_files(ipdrs_dir, smask='tde-')
  80. for ipdr in ipdrs:
  81. ipdr_time = convert2timestamp(ipdr, ipdr_time_pattern)
  82. if s_time <= ipdr_time <= e_time:
  83. copyfile(ipdr, ipdr_save_dir + ipdr)
  84. break
  85. else:
  86. sleep(60)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement