]> arthur.barton.de Git - netdata.git/commitdiff
Merge pull request #2022 from l2isbad/dns_query_time_fixes master
authorCosta Tsaousis <costa@tsaousis.gr>
Sun, 26 Mar 2017 03:48:07 +0000 (06:48 +0300)
committerGitHub <noreply@github.com>
Sun, 26 Mar 2017 03:48:07 +0000 (06:48 +0300)
dns_query_time plugin: replace "." with "_" in dimensions

python.d/dns_query_time.chart.py
python.d/fail2ban.chart.py
python.d/ovpn_status_log.chart.py
python.d/smartd_log.chart.py

index 527e5b8ef9f2d63f09abfc33fa5e481d83c46c59..9053d9a1ba26099af84d3e9bdfff9acb7c1cde94 100644 (file)
@@ -1,3 +1,7 @@
+# -*- coding: utf-8 -*-
+# Description: dns_query_time netdata python.d module
+# Author: l2isbad
+
 try:
     from time import monotonic as time
 except ImportError:
@@ -57,17 +61,18 @@ class Service(SimpleService):
 
         data = self._get_data(timeout=1)
 
-        down_servers = [s[2:] for s in data if data[s] == -100]
-        if down_servers:
-            self.info('Removed due to non response %s' % down_servers)
-            self.server_list = [s for s in self.server_list if s not in down_servers]
-        if self.server_list:
-            self._data_from_check = data
-            self.order, self.definitions = create_charts(aggregate=self.aggregate, server_list=self.server_list)
-            self.info(str({'domains': len(self.domains), 'servers': self.server_list}))
-            return True
-        else:
-            return False
+        down_servers = [s for s in data if data[s] == -100]
+        for down in down_servers:
+            down = down[3:].replace('_', '.')
+            self.info('Removed due to non response %s' % down)
+            self.server_list.remove(down)
+            if not self.server_list:
+                return False
+
+        self._data_from_check = data
+        self.order, self.definitions = create_charts(aggregate=self.aggregate, server_list=self.server_list)
+        self.info(str({'domains': len(self.domains), 'servers': self.server_list}))
+        return True
 
     def _get_data(self, timeout=None):
         return dns_request(self.server_list, timeout or self.timeout, self.domains)
@@ -87,9 +92,9 @@ def dns_request(server_list, timeout, domains):
             dns.query.udp(request, ns, timeout=t)
             dns_end = time()
             query_time = round((dns_end - dns_start) * 1000)
-            q.put({''.join(['ns', ns]): query_time})
+            q.put({'_'.join(['ns', ns.replace('.', '_')]): query_time})
         except dns.exception.Timeout:
-            q.put({''.join(['ns', ns]): -100})
+            q.put({'_'.join(['ns', ns.replace('.', '_')]): -100})
 
     for server in server_list:
         th = Thread(target=dns_req, args=(server, timeout, que))
@@ -113,17 +118,18 @@ def check_ns(ns):
 def create_charts(aggregate, server_list):
     if aggregate:
         order = ['dns_group']
-        definitions = {'dns_group': {'options': [None, "DNS Response Time", "ms", 'name servers',
-                                                 'resp.time', 'line'], 'lines': []}}
+        definitions = {'dns_group': {'options': [None, 'DNS Response Time', 'ms', 'name servers',
+                                                 'dns_query_time.response_time', 'line'], 'lines': []}}
         for ns in server_list:
-            definitions['dns_group']['lines'].append([''.join(['ns', ns]), ns, 'absolute'])
+            definitions['dns_group']['lines'].append(['_'.join(['ns', ns.replace('.', '_')]), ns, 'absolute'])
 
         return order, definitions
     else:
-        order = [''.join(['dns_', ns]) for ns in server_list]
+        order = [''.join(['dns_', ns.replace('.', '_')]) for ns in server_list]
         definitions = dict()
         for ns in server_list:
-            definitions[''.join(['dns_', ns])] = {'options': [None, "DNS Response Time", "ms", ns,
-                                                              'resp.time', 'area'],
-                                                  'lines': [[''.join(['ns', ns]), ns, 'absolute']]}
+            definitions[''.join(['dns_', ns.replace('.', '_')])] = {'options': [None, 'DNS Response Time', 'ms', ns,
+                                                                                'dns_query_time.response_time', 'area'],
+                                                                    'lines': [['_'.join(['ns', ns.replace('.', '_')]),
+                                                                               ns, 'absolute']]}
         return order, definitions
index ce95ff9480a2230b374703db85390a2b9c4605f9..85d0ade618006adb707a9d6b5ea20f1156b2be0a 100644 (file)
@@ -93,10 +93,10 @@ class Service(LogService):
 
     def create_dimensions(self):
         self.definitions = {
-            'jails_bans': {'options': [None, "Jails Ban Statistics", "bans/s", 'bans', 'jail.bans', 'line'],
-                            'lines': []},
-            'jails_in_jail': {'options': [None, "Currently In Jail", "ip addresses", 'in jail', 'jail.in_jail', 'line'],
-                            'lines': []},
+            'jails_bans': {'options': [None, 'Jails Ban Statistics', "bans/s", 'bans', 'jail.bans', 'line'],
+                           'lines': []},
+            'jails_in_jail': {'options': [None, 'Banned IPs (since the last restart of netdata)', 'IPs',
+                                          'in jail', 'jail.in_jail', 'line'], 'lines': []},
                            }
         for jail in self.jails_list:
             self.definitions['jails_bans']['lines'].append([jail, jail, 'incremental'])
index c5fca002af67d143089594bcb45b33eab58cd672..b3cc6723fff2878251468db596d25871837a1e24 100644 (file)
@@ -3,7 +3,7 @@
 # Author: l2isbad
 
 from base import SimpleService
-from re import compile, findall, search, subn
+from re import compile as r_compile
 priority = 60000
 retries = 60
 update_every = 10
@@ -11,35 +11,41 @@ update_every = 10
 ORDER = ['users', 'traffic']
 CHARTS = {
     'users': {
-        'options': [None, 'OpenVPN active users', 'active users', 'Users', 'openvpn_status.users', 'line'],
+        'options': [None, 'OpenVPN Active Users', 'active users', 'users', 'openvpn_status.users', 'line'],
         'lines': [
             ["users", None, "absolute"],
         ]},
     'traffic': {
-        'options': [None, 'OpenVPN traffic', 'kilobit/s', 'Traffic', 'openvpn_status.traffic', 'area'],
+        'options': [None, 'OpenVPN Traffic', 'Kb/s', 'traffic', 'openvpn_status.traffic', 'area'],
         'lines': [
             ["in", None, "incremental", 8, 1000], ["out", None, "incremental", 8, -1000]
         ]},
 
 }
 
+
 class Service(SimpleService):
     def __init__(self, configuration=None, name=None):
         SimpleService.__init__(self, configuration=configuration, name=name)
         self.order = ORDER
         self.definitions = CHARTS
         self.log_path = self.configuration.get('log_path')
-        self.regex_data_inter = compile(r'(?<=Since ).*?(?=.ROUTING)')
-        self.regex_data_final = compile(r'\d{1,3}(?:\.\d{1,3}){3}[:0-9,. ]*')
-        self.regex_users = compile(r'\d{1,3}(?:\.\d{1,3}){3}:\d+')
-        self.regex_traffic = compile(r'(?<=(?:,| ))\d+(?=(?:,| ))')
+        self.regex_data_inter = r_compile(r'(?<=Since ).*?(?=.ROUTING)')
+        self.regex_data_final = r_compile(r'\d{1,3}(?:\.\d{1,3}){3}[:0-9,. ]*')
+        self.regex_users = r_compile(r'\d{1,3}(?:\.\d{1,3}){3}:\d+')
+        self.regex_traffic = r_compile(r'(?<=(?:,| ))\d+(?=(?:,| ))')
 
     def check(self):
-        if not self._get_raw_data():
+        if not (self.log_path and isinstance(self.log_path, str)):
+            self.error('\'log_path\' is not defined')
+            return False
+
+        data = self._get_data()
+        if not data:
             self.error('Make sure that the openvpn status log file exists and netdata has permission to read it')
             return False
         else:
-            self.info('Plugin was started succesfully')
+            self._data_from_check = data
             return True
 
     def _get_raw_data(self):
@@ -47,13 +53,14 @@ class Service(SimpleService):
         Open log file
         :return: str
         """
+
         try:
             with open(self.log_path, 'rt') as log:
                 result = log.read()
-        except Exception:
+        except OSError:
             return None
         else:
-            return result
+            return result or None
 
     def _get_data(self):
         """
@@ -62,16 +69,20 @@ class Service(SimpleService):
         """
 
         raw_data = self._get_raw_data()
-        try:
-            data_inter = self.regex_data_inter.search(' '.join(raw_data.splitlines())).group()
-        except AttributeError:
-            data_inter = ''
+        if not raw_data:
+            return None
+
+        data_inter = self.regex_data_inter.search(' '.join(raw_data.splitlines()))
+        if not data_inter:
+            return None
+        else:
+            data_inter = data_inter.group()
 
         data_final = ' '.join(self.regex_data_final.findall(data_inter))
         users = self.regex_users.subn('', data_final)[1]
         traffic = self.regex_traffic.findall(data_final)
 
-        bytes_in = sum([int(traffic[i]) for i in range(len(traffic)) if (i + 1) % 2 is 1])
-        bytes_out = sum([int(traffic[i]) for i in range(len(traffic)) if (i + 1) % 2 is 0])
+        bytes_in = sum(int(traffic[i[0]]) for i in enumerate(traffic) if (i[0] + 1) % 2 is 1)
+        bytes_out = sum(int(traffic[i[0]]) for i in enumerate(traffic) if (i[0] + 1) % 2 is 0)
 
         return {'users': users, 'in': bytes_in, 'out': bytes_out}
index e8037237931d8ce7846b3c0d389f3c36591e1510..f9adaf1c5ec5e65c8c5d2135987c4d69192b5a60 100644 (file)
@@ -2,7 +2,7 @@
 # Description: smart netdata python.d module
 # Author: l2isbad, vorph1
 
-from re import compile
+from re import compile as r_compile
 from os import listdir, access, R_OK
 from os.path import isfile, join, getsize, basename, isdir
 try:
@@ -101,7 +101,7 @@ NAMED_DISKS = namedtuple('disks', ['name', 'size', 'number'])
 class Service(SimpleService):
     def __init__(self, configuration=None, name=None):
         SimpleService.__init__(self, configuration=configuration, name=name)
-        self.regex = compile(r'(\d+);(\d+);(\d+)')
+        self.regex = r_compile(r'(\d+);(\d+);(\d+)')
         self.log_path = self.configuration.get('log_path', '/var/log/smartd')
         self.raw_values = self.configuration.get('raw_values')
         self.attr = self.configuration.get('smart_attributes', [])
@@ -208,7 +208,7 @@ class Service(SimpleService):
 
         for k, v in dict([(k, v) for k, v in SMART_ATTR.items() if k in ORDER]).items():
             self.definitions.update({''.join(['attrid', k]): {
-                                      'options': [None, v, units, v, 'smartd.attrid' + k, 'line'],
+                                      'options': [None, v, units, v.lower(), 'smartd.attrid' + k, 'line'],
                                        'lines': create_lines(k)}})
 
 def find_disks_in_log_path(log_path):