X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=python.d%2Fvarnish.chart.py;h=2665bb383b687d3ebb5b2e8acefb1acf98df784f;hb=f17e83b6e88008842d04eff3e0ed3575533446d7;hp=9d2c780e973eda08a33c9cc271752e153a5704d2;hpb=08c67d4f8f52ac93c5f689228b5f1c74b9f75e77;p=netdata.git diff --git a/python.d/varnish.chart.py b/python.d/varnish.chart.py index 9d2c780e..2665bb38 100644 --- a/python.d/varnish.chart.py +++ b/python.d/varnish.chart.py @@ -4,10 +4,8 @@ from base import SimpleService from re import compile -from os import access as is_executable, X_OK from subprocess import Popen, PIPE - # default module values (can be overridden per job in `config`) # update_every = 2 priority = 60000 @@ -39,6 +37,7 @@ CHARTS = {'backend_health': ['esi_errors_b', None, 'incremental', 1, 1], ['esi_warnings_b', None, 'incremental', 1, 1], ['sess_fail_b', None, 'incremental', 1, 1], + ['sc_pipe_overflow_b', None, 'incremental', 1, 1], ['sess_pipe_overflow_b', None, 'incremental', 1, 1]], 'options': [None, 'Misbehavior', 'problems', 'Problems summary', 'varnish.bad', 'line']}, 'expunge': @@ -60,9 +59,11 @@ CHARTS = {'backend_health': ['s0.g_bytes', 'allocated', 'absolute', -1, 1048576]], 'options': [None, 'Memory usage', 'megabytes', 'Memory usage', 'varnish.memory_usage', 'stacked']}, 'session': - {'lines': [['sess_conn', 'conn', 'incremental', 1, 1], - ['client_req', 'requests', 'incremental', 1, 1], - ['sess_dropped', 'dropped', 'incremental', 1, 1]], + {'lines': [['sess_conn', 'sess_conn', 'incremental', 1, 1], + ['client_req', 'client_requests', 'incremental', 1, 1], + ['client_conn', 'client_conn', 'incremental', 1, 1], + ['client_drop', 'client_drop', 'incremental', 1, 1], + ['sess_dropped', 'sess_dropped', 'incremental', 1, 1]], 'options': [None, 'Sessions', 'units', 'Client metrics', 'varnish.session', 'line']}, 'threads': {'lines': [['threads', None, 'absolute', 1, 1], @@ -77,18 +78,12 @@ CHARTS = {'backend_health': 'options': [None, 'Varnish uptime', 'seconds', 'Uptime', 'varnish.uptime', 'line']} } -DIRECTORIES = ['/bin/', '/usr/bin/', '/sbin/', '/usr/sbin/'] - class Service(SimpleService): def __init__(self, configuration=None, name=None): SimpleService.__init__(self, configuration=configuration, name=name) - try: - self.varnish = [''.join([directory, 'varnishstat']) for directory in DIRECTORIES - if is_executable(''.join([directory, 'varnishstat']), X_OK)][0] - except IndexError: - self.varnish = False - self.rgx_all = compile(r'([A-Z]+\.)([\d\w_.]+)\s+(\d+)') + self.varnish = self.find_binary('varnishstat') + self.rgx_all = compile(r'([A-Z]+\.)?([\d\w_.]+)\s+(\d+)') # Could be # VBE.boot.super_backend.pipe_hdrbyte (new) # or @@ -101,7 +96,7 @@ class Service(SimpleService): def check(self): # Cant start without 'varnishstat' command if not self.varnish: - self.error('\'varnishstat\' command was not found in %s or not executable by netdata' % DIRECTORIES) + self.error('Can\'t locate \'varnishstat\' binary or binary is not executable by netdata') return False # If command is present and we can execute it we need to make sure.. @@ -114,7 +109,7 @@ class Service(SimpleService): # 2. Output is parsable (list is not empty after regex findall) is_parsable = self.rgx_all.findall(reply) if not is_parsable: - self.error('Cant parse output (only varnish version 4+ supported)') + self.error('Cant parse output...') return False # We need to find the right regex for backend parse @@ -123,7 +118,7 @@ class Service(SimpleService): self.rgx_bck = self.rgx_bck[0] else: self.backend_list = self.rgx_bck[1].findall(reply)[::2] - self.rgx_bck = self.rgx_back[1] + self.rgx_bck = self.rgx_bck[1] # We are about to start! self.create_charts() @@ -142,7 +137,7 @@ class Service(SimpleService): if not raw_data: return None - return raw_data + return raw_data.decode() def _get_data(self): """ @@ -157,10 +152,10 @@ class Service(SimpleService): return None # 1. ALL data from 'varnishstat -1'. t - type(MAIN, MEMPOOL etc) - to_netdata = {k: int(v) for t, k, v in data_all} + to_netdata = dict([(k, int(v)) for t, k, v in data_all]) # 2. ADD backend statistics - to_netdata.update({'_'.join([n, k]): int(v) for n, k, v in data_backend}) + to_netdata.update(dict([('_'.join([n, k]), int(v)) for n, k, v in data_backend])) # 3. ADD additional keys to dict # 3.1 Cache hit/miss/hitpass OVERALL in percent @@ -185,9 +180,10 @@ class Service(SimpleService): self.cache_prev = [to_netdata.get('cache_hit', 0), to_netdata.get('cache_miss', 0), to_netdata.get('cache_hitpass', 0)] # 3.3 Problems summary chart - for elem in ['backend_busy', 'backend_unhealthy', 'esi_errors', 'esi_warnings', 'losthdr', 'sess_drop', + for elem in ['backend_busy', 'backend_unhealthy', 'esi_errors', 'esi_warnings', 'losthdr', 'sess_drop', 'sc_pipe_overflow', 'sess_fail', 'sess_pipe_overflow', 'threads_destroyed', 'threads_failed', 'threads_limited', 'thread_queue_len']: - to_netdata[''.join([elem, '_b'])] = to_netdata.get(elem, 0) + if to_netdata.get(elem) is not None: + to_netdata[''.join([elem, '_b'])] = to_netdata.get(elem) # Ready steady go! return to_netdata @@ -207,7 +203,8 @@ class Service(SimpleService): #self.order.extend(extra_charts) # Create static charts - self.definitions = {chart: values for chart, values in CHARTS.items() if chart in self.order} + #self.definitions = {chart: values for chart, values in CHARTS.items() if chart in self.order} + self.definitions = CHARTS # Create dynamic backend charts if self.backend_list: