role service-bird-lg: add patch to fix parsing

This commit is contained in:
Julian Labus 2018-09-25 16:43:35 +02:00
parent 30a5897c36
commit 1d72eb8439
No known key found for this signature in database
GPG Key ID: 8AF209F2C6B3572A
2 changed files with 65 additions and 0 deletions

View 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)

View File

@ -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