118 lines
2.3 KiB
Python
Executable File
118 lines
2.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# Process the main results
|
|
#
|
|
import sys
|
|
|
|
class buffer:
|
|
|
|
def __init__(self, name="unnamed", prefix=">>>"):
|
|
self.claims = {}
|
|
self.count = 0
|
|
self.name = name
|
|
self.prefix = prefix
|
|
|
|
def reset(self):
|
|
self.count = 0
|
|
self.claims = {}
|
|
|
|
def size(self):
|
|
return self.count
|
|
|
|
def add(self,(cl, hl), match=-1):
|
|
# cleanup cl
|
|
usloc = cl.rfind("_")
|
|
if usloc != -1:
|
|
# cut off any underscore stuff (ignore for now)
|
|
cl = cl[:usloc]
|
|
|
|
# possibly add
|
|
if not (cl,hl) in self.claims.keys():
|
|
if match >= 0:
|
|
self.claims[(cl,hl)] = [match]
|
|
else:
|
|
self.claims[(cl,hl)] = []
|
|
self.count = self.count + 1
|
|
elif match >= 0 and match not in self.claims[(cl,hl)]:
|
|
self.claims[(cl,hl)].append(match)
|
|
|
|
def dump(self):
|
|
if self.size() == 0:
|
|
return
|
|
|
|
print "Dumping buffer " + self.name
|
|
print
|
|
counted = 0
|
|
for (cl,hl) in self.claims.keys():
|
|
# Determine whether to print
|
|
#
|
|
toprint = True
|
|
if cl.rfind("Nisynch") != -1:
|
|
# Nisynch claim
|
|
# Construct comparable Niagree claim
|
|
newcl = cl.replace("Nisynch","Niagree")
|
|
# Now check whether this one occurs
|
|
if (newcl,hl) in self.claims.keys():
|
|
toprint = False
|
|
|
|
if toprint:
|
|
res = self.prefix
|
|
res = res + "\t" + cl
|
|
res = res + "\t" + str(self.claims[(cl,hl)])
|
|
res = res + "\t" + str(hl)
|
|
print res
|
|
counted = counted + 1
|
|
print
|
|
print "Count: " + str(counted) + " in " + self.name
|
|
print
|
|
self.reset()
|
|
|
|
|
|
def ignore_this(data):
|
|
if (data[3].rfind(" SV") != -1):
|
|
# Server role!
|
|
return True
|
|
else:
|
|
# Not including the server role
|
|
return False
|
|
|
|
def main():
|
|
|
|
buf_big = buffer("[Global]",">>>G")
|
|
buf_small = buffer("[Local]", ">>>L")
|
|
match = -1
|
|
|
|
line = sys.stdin.readline()
|
|
while line != "":
|
|
# Clean input
|
|
line = line.strip()
|
|
data = line.split("\t")
|
|
|
|
# Is it an attack thing?
|
|
if data[0] != "***":
|
|
# Nope
|
|
buf_small.dump()
|
|
print line
|
|
# Maybe it reports the match type?
|
|
matchprefix = "Testing match "
|
|
loc = line.rfind(matchprefix)
|
|
if loc != -1:
|
|
match = int(line[loc + len(matchprefix)])
|
|
print "Detected match type", match
|
|
else:
|
|
if not ignore_this(data):
|
|
# Yes!
|
|
claim = data[3]
|
|
helpers = "\t".join(data[4:])
|
|
buf_big.add((claim,helpers), match)
|
|
buf_small.add((claim,helpers), match)
|
|
|
|
# Proceed to next line
|
|
line = sys.stdin.readline()
|
|
|
|
buf_small.dump()
|
|
buf_big.dump()
|
|
|
|
|
|
main()
|