#
# Uses the query log.
#
-# Parameters:
+# Parameters:
#
# config (required)
# autoconf (optional - used by munin-config)
avgs.type GAUGE
avgs.min 0
avgs.info Moving 5 minute average time to perform search
-avgs.label Average time to response
avgr.label Average reverse time
avgr.draw LINE
avgr.type GAUGE
avgr.min 0
-avgr.info Moving 5 minute average time to perform search
-avgr.label Average time to response
+avgr.info Moving 5 minute average time to perform reverse
-max.label Slowest time to response
+max.label Slowest time to response (1/100)
max.draw LINE
max.type GAUGE
max.min 0
-max.info Slowest query in last 5 minutes"""
+max.info Slowest query in last 5 minutes (unit: 100s)"""
ENTRY_REGEX = re.compile(r'\[[^]]+\] (?P<dur>[0-9.]+) (?P<numres>\d+) (?P<type>[a-z]+) ')
TIME_REGEX = re.compile(r'\[(?P<t_year>\d\d\d\d)-(?P<t_month>\d\d)-(?P<t_day>\d\d) (?P<t_hour>\d\d):(?P<t_min>\d\d):(?P<t_sec>\d\d)[0-9.]*\] ')
""" A query log file, unpacked. """
def __init__(self, filename):
- self.fd = open(filename, encoding='utf-8')
+ self.fd = open(filename, encoding='utf-8', errors='replace')
self.len = os.path.getsize(filename)
def __del__(self):
def loglines(self):
for l in self.fd:
e = ENTRY_REGEX.match(l)
- if e is None:
- raise ValueError("Invalid log line:", l)
- yield e.groupdict()
+ if e is not None:
+ yield e.groupdict()
if __name__ == '__main__':
print('avgs.value', 0 if numsearch == 0 else sumsearch/numsearch)
print('avgr.value', 0 if numrev == 0 else sumrev/numrev)
- print('max.value', maxres)
+ print('max.value', maxres/100.0)