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:
parent
ffafef27cd
commit
717354c503
1 changed files with 10 additions and 5 deletions
15
lg.py
15
lg.py
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue