MCPcopy Create free account
hub / github.com/cvmfs/cvmfs / Parser

Class Parser

add-ons/python/parser.py:34–117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32
33
34class Parser:
35 def __init__(self, filename=None, timestamp=datetime.now(tz=None)):
36 self.counters = {}
37 self.warm_cache = False
38 self.repository = ""
39 self.current_timestamp = timestamp.replace(microsecond=0).isoformat()
40 self.seen_header = False
41 if filename is not None:
42 self.parse(filename)
43
44 @staticmethod
45 def parse_boolean(string):
46 return string == "yes" or string == "true" \
47 or string == "TRUE" or string == "True"
48
49 def __parseline(self, line):
50 if line[0] == "#":
51 parameter = line[1:-1].replace(" ", "").split("=")
52 if parameter[0] == "warm_cache":
53 self.warm_cache = Parser.parse_boolean(parameter[1])
54 elif parameter[0] == "repo":
55 self.repository = parameter[1].split(".")[0]
56 else:
57 # Parse only lines which come after the header line
58 if self.seen_header:
59 params = line.strip().split("|")
60 if len(params) == 3:
61 counter = Counter(params[0], params[1], params[2])
62 if counter.name in self.counters:
63 self.counters[counter.name].values += counter.values
64 else:
65 self.counters[counter.name] = counter
66 elif line.strip() == "Name|Value|Description":
67 self.seen_header = True
68
69 def parse(self, filename):
70 datafile = open(filename, "r")
71 for line in datafile:
72 self.__parseline(line)
73 datafile.close()
74
75 def to_csv(self, filename):
76 csv = open(filename, "w")
77
78 csv.write(self.current_timestamp + ";" + self.repository + "\n")
79 for counter in self.counters.values():
80 csv.write(counter.name + ";" + str(counter.avg()) + "\n")
81 csv.close()
82
83 @staticmethod
84 def to_csv_comparison(parser1, parser2, filename):
85 csv = open(filename, "w")
86 csv.write(";origin_avg;origin_std;external_avg;external_std\n")
87 for key in parser1.counters:
88 csv.write(parser1.counters[key].name + ";" +
89 str(parser1.counters[key].avg()).replace(".", ",") + ";" +
90 str(parser1.counters[key].std()).replace(".", ",") + ";" +
91 str(parser2.counters[key].avg()).replace(".", ",") + ";" +

Callers 2

mainFunction · 0.90
parse_filesFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected