spm_rules.py 2.89 KB
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
import re, copy,sys
from collections import deque

ifile = open(sys.argv[1],"r")

target_event = int(sys.argv[3])
target_event_sup = 5
rules_list = []
i = 0
for line in ifile:
rule = deque([])
line_split = line.replace(" ","").strip().split("-1")
STORE = True
pre_day = -1
for token in line_split:
m = re.search('\<([0-9]+)\>([0-9]+)', token)
if(m is not None):
day = int(m.group(1))
if(pre_day != -1):
day = int(m.group(1))-pre_day
pre_day = int(m.group(1))
event = m.group(2)
rule.append((day,event))
STORE = (event == str(target_event))
m = re.search('\#SUP:([0-9]+)', token)
if(m is not None):
sup = m.group(1)
STORE = (STORE and sup >= target_event_sup)
if(STORE):
rules_list.append(rule)
i += 1

rules_list = sorted(rules_list, key=len)

#print rules_list

rules_dict = {}

for rule in rules_list:
first_event = rule[0][1]
if(first_event not in rules_dict.keys()):
rule.popleft()
rules_dict[first_event] = [rule]
else:
rule.popleft()
rules_dict[first_event].append(rule)

#print rules_dict.keys()

ifile.close()


active_rules = {}
day_cnt = 0
ifile = open(sys.argv[2],"r")
for line in ifile:
line = line.replace("-2","").split("-1")
for day in line:
events = re.findall("\ ([0-9]+)",day)
for event in events:
if(str(event) == str(target_event)):
print str(day_cnt) + "> Failure"
if(str(event) in rules_dict.keys()):
rules_to_activate = copy.deepcopy(rules_dict[str(event)]) #check which rules should be enabled
for rule in rules_to_activate:
act_rule = rule.popleft()
act_day = act_rule[0]
act_event = act_rule[1]
if(str(act_event) == str(target_event)):
print str(day_cnt)+"> Warning in " + str(act_day) + " days expect a fault!"
continue
if(day_cnt+act_day not in active_rules.keys()):
active_rules[day_cnt+act_day] = {act_event:[rule]}
else:
if(act_event not in active_rules[day_cnt+act_day].keys()):
active_rules[day_cnt+act_day][act_event] = [rule]
else:
active_rules[day_cnt+act_day][act_event].append(rule)
if(day_cnt in active_rules.keys()):
check_rules = active_rules[day_cnt]
for event in events:
if(event in check_rules.keys()):
for rule in check_rules[event]:
if(not rule):
del rule
else:
act_rule = rule.popleft()
act_day = act_rule[0]
act_event = act_rule[1]
if(len(rule) == 0):
print str(day_cnt)+"> Warning in " + str(act_day) + " days expect a fault!"
if(day_cnt+act_day not in active_rules.keys()):
active_rules[day_cnt+act_day] = {act_event:[rule]}
else:
if(act_event not in active_rules[day_cnt+act_day].keys()):
active_rules[day_cnt+act_day][act_event] = [rule]
else:
active_rules[day_cnt+act_day][act_event].append(rule)
#print active_rules
day_cnt += 1
if(day_cnt-1 in active_rules.keys()):
del active_rules[day_cnt-1]
ifile.close()