varnish module fixes
lgz committed
Nov 3, 2017 at 11:32 UTC
05d8772ffcd5ad9691b889375f35c2e4b8d84b0a
1 file changed
+21
-17
python.d/varnish.chart.py
+21
-17
@@ -105,15 +105,10 @@ class Service(SimpleService):
105
def __init__(self, configuration=None, name=None):
106
SimpleService.__init__(self, configuration=configuration, name=name)
107
self.varnish = find_binary('varnishstat')
108
- self.rgx_all = compile(r'([A-Z]+\.)?([\d\w_.]+)\s+(\d+)')
109
- # Could be
110
- # VBE.boot.super_backend.pipe_hdrbyte (new)
111
- # or
112
- # VBE.default2(127.0.0.2,,81).bereq_bodybytes (old)
113
- # Regex result: [('super_backend', 'beresp_hdrbytes', '0'), ('super_backend', 'beresp_bodybytes', '0')]
114
- self.rgx_bck = (re.compile(r'VBE.([\d\w_.]+)\(.*?\).(beresp[\w_]+)\s+(\d+)'),
115
- re.compile(r'VBE\.[\d\w-]+\.([\w\d_]+).(beresp[\w_]+)\s+(\d+)'))
108
+ self.regex_all = re.compile(r'([A-Z]+\.)?([\d\w_.]+)\s+(\d+)')
109
+ self.regex_backend = None
110
self.cache_prev = list()
111
+ self.backend_list = list()
112
113
def check(self):
114
# Cant start without 'varnishstat' command
@@ -129,18 +124,27 @@ class Service(SimpleService):
124
return False
125
126
# 2. Output is parsable (list is not empty after regex findall)
132
- is_parsable = self.rgx_all.findall(reply)
133
- if not is_parsable:
127
+ found = self.regex_all.findall(reply)
128
+ if not found:
129
self.error('Cant parse output...')
130
return False
131
132
# We need to find the right regex for backend parse
138
- self.backend_list = self.rgx_bck[0].findall(reply)[::2]
133
+ # Could be
134
+ # VBE.boot.super_backend.pipe_hdrbyte (new)
135
+ # or
136
+ # VBE.default2(127.0.0.2,,81).bereq_bodybytes (old)
137
+ # Regex result: [('super_backend', 'beresp_hdrbytes', '0'), ('super_backend', 'beresp_bodybytes', '0')]
138
+
139
+ regex1 = re.compile(r'VBE.([\d\w_.]+)\(.*?\).(beresp[\w_]+)\s+(\d+)')
140
+ regex2 = re.compile(r'VBE\.[\d\w-]+\.([\w\d_]+).(beresp[\w_]+)\s+(\d+)')
141
+
142
+ self.backend_list = regex1.findall(reply)[::2]
143
if self.backend_list:
140
- self.rgx_bck = self.rgx_bck[0]
144
+ self.regex_backend = regex1
145
else:
142
- self.backend_list = self.rgx_bck[1].findall(reply)[::2]
143
- self.rgx_bck = self.rgx_bck[1]
146
+ self.backend_list = self.regex2.findall(reply)[::2]
147
+ self.regex_backend = regex2
148
149
self.create_charts()
150
return True
@@ -164,15 +168,15 @@ class Service(SimpleService):
168
:return: dict
169
"""
170
raw_data = self._get_raw_data()
167
- data_all = self.rgx_all.findall(raw_data)
168
- data_backend = self.rgx_bck.findall(raw_data)
171
+ data_all = self.regex_all.findall(raw_data)
172
+ data_backend = self.regex_backend.findall(raw_data)
173
174
if not data_all:
175
return None
176
177
# 1. ALL data from 'varnishstat -1'. t - type(MAIN, MEMPOOL etc)
178
to_netdata = dict((k, int(v)) for t, k, v in data_all)
175
-
179
+
180
# 2. ADD backend statistics
181
to_netdata.update(dict(('_'.join([n, k]), int(v)) for n, k, v in data_backend))
182