role service-bird-lg: add patch to fix parsing
This commit is contained in:
parent
30a5897c36
commit
1d72eb8439
2 changed files with 65 additions and 0 deletions
59
roles/service-bird-lg/files/simplify-parsing.patch
Normal file
59
roles/service-bird-lg/files/simplify-parsing.patch
Normal file
|
@ -0,0 +1,59 @@
|
|||
From 0e45d90b7044225125ef92568deb4305f815224f Mon Sep 17 00:00:00 2001
|
||||
From: Baptiste Jonglez <baptiste--git@jonglez.org>
|
||||
Date: Wed, 12 Feb 2014 15:47:27 +0100
|
||||
Subject: [PATCH] Simplify parsing of 'show protocols' to avoid future
|
||||
breakages
|
||||
|
||||
The current parsing method (ugly regexp) is hard to understand and prone
|
||||
to breakage:
|
||||
|
||||
- Bird 1.4 changed the date format, which broke the parser ()
|
||||
- Bird 2.0 changed the format of the "Table" field, which again broke the parser (#36)
|
||||
|
||||
The new method is much simpler, does not involve any regexp, and should
|
||||
thus resist small syntax changes in Bird's output.
|
||||
|
||||
Important limitation: parsing will be messed up if the date contains a
|
||||
space character. There is no space in the default date format of Bird
|
||||
(checked with Bird 1.3 to Bird 2.0), but since the date format is
|
||||
configurable in Bird, it may happen anyway. In particular, setting
|
||||
"timeformat protocol iso long" in Bird will break bird-lg's parser.
|
||||
|
||||
Fixes #36
|
||||
---
|
||||
lg.py | 15 ++++++++++-----
|
||||
1 file changed, 10 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/lg.py b/lg.py
|
||||
index b4bdd8b..6a9f4e7 100644
|
||||
--- a/lg.py
|
||||
+++ b/lg.py
|
||||
@@ -223,8 +223,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>")
|
||||
@@ -251,9 +249,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)
|
||||
|
|
@ -7,6 +7,12 @@
|
|||
notify:
|
||||
- restart bird-lg-webservice
|
||||
|
||||
- name: apply patch simplify-parsing
|
||||
patch:
|
||||
src: simplify-parsing.patch
|
||||
basedir: "{{ lg_path }}"
|
||||
strip: 1
|
||||
|
||||
- name: write vhost lookingglass.conf
|
||||
template:
|
||||
src: lookingglass_vhost.conf.j2
|
||||
|
|
Loading…
Reference in a new issue