Fix parsing of 'show protocols' with bird 1.4

The current parsing was broken because of a change in the date format.

Actually, the new method is much simpler, and should resist small syntax
changes in Bird's output.  We don't use an ugly regexp anymore.

Important limitation: parsing will be messed up if the date contains a
space character.  This does not happen with the default date format of
both bird 1.3 and bird 1.4, but since the date format is configurable in
bird, it may happen anyway.
This commit is contained in:
Baptiste Jonglez 2014-02-12 15:47:27 +01:00
parent af2c305049
commit e502129656

15
lg.py
View file

@ -217,8 +217,6 @@ def whois():
SUMMARY_UNWANTED_PROTOS = ["Kernel", "Static", "Device"]
SUMMARY_RE_MATCH = r"(?P<name>[\w_]+)\s+(?P<proto>\w+)\s+(?P<table>\w+)\s+(?P<state>\w+)\s+(?P<since>((|\d\d\d\d-\d\d-\d\d\s)(|\d\d:)\d\d:\d\d|\w\w\w\d\d))($|\s+(?P<info>.*))"
@app.route("/summary/<hosts>")
@app.route("/summary/<hosts>/<proto>")
@ -245,9 +243,16 @@ def summary(hosts, proto="ipv4"):
for line in res[1:]:
line = line.strip()
if line and (line.split() + [""])[1] not in SUMMARY_UNWANTED_PROTOS:
m = re.match(SUMMARY_RE_MATCH, line)
if m:
data.append(m.groupdict())
split = line.split()
if len(split) >= 5:
props = dict()
props["name"] = split[0]
props["proto"] = split[1]
props["table"] = split[2]
props["state"] = split[3]
props["since"] = split[4]
props["info"] = ' '.join(split[5:]) if len(split) > 5 else ""
data.append(props)
else:
app.logger.warning("couldn't parse: %s", line)