]> arthur.barton.de Git - netdata.git/blobdiff - python.d/web_log.chart.py
web_log plugin: add GET dimension from start. Always green now
[netdata.git] / python.d / web_log.chart.py
index e49fe80248c4ae4004adb35b9cb8b2e3a0286637..9497b3d8d14d5031c57d839bda52cc439baee2a2 100644 (file)
@@ -55,6 +55,7 @@ CHARTS = {
     'http_method': {
         'options': [None, 'Requests Per HTTP Method', 'requests/s', 'http methods', 'web_log.http_method', 'stacked'],
         'lines': [
+            ['GET', 'GET', 'incremental', 1, 1]
         ]},
     'requests_per_ipproto': {
         'options': [None, 'Requests Per IP Protocol', 'requests/s', 'ip protocols', 'web_log.requests_per_ipproto',
@@ -104,7 +105,7 @@ class Service(LogService):
                      'resp_time_avg': 0, 'unique_cur_ipv4': 0, 'unique_cur_ipv6': 0, '2xx': 0,
                      '5xx': 0, '3xx': 0, '4xx': 0, '1xx': 0, '0xx': 0, 'unmatched': 0, 'req_ipv4': 0,
                      'req_ipv6': 0, 'unique_tot_ipv4': 0, 'unique_tot_ipv6': 0, 'successful_requests': 0,
-                     'redirects': 0, 'bad_requests': 0, 'server_errors': 0, 'other_requests': 0}
+                     'redirects': 0, 'bad_requests': 0, 'server_errors': 0, 'other_requests': 0, 'GET': 0}
 
     def check(self):
         """
@@ -233,44 +234,38 @@ class Service(LogService):
             find_regex_return(msg='Custom log: search OK but contains no named subgroups'
                                   ' (you need to use ?P<subgroup_name>)')
         else:
-            basic_values = {'address', 'method', 'url', 'code', 'bytes_sent'} - set(match_dict)
-
-            if basic_values:
+            mandatory_dict = {'address': r'[\da-f.:]+',
+                              'code': r'[1-9]\d{2}',
+                              'method': r'[A-Z]+',
+                              'bytes_sent': r'\d+|-'}
+            optional_dict = {'resp_length': r'\d+',
+                             'resp_time': r'[\d.]+'}
+
+            mandatory_values = set(mandatory_dict) - set(match_dict)
+            if mandatory_values:
                 return find_regex_return(msg='Custom log: search OK but some mandatory keys (%s) are missing'
-                                         % list(basic_values))
+                                         % list(mandatory_values))
+            else:
+                for key in mandatory_dict:
+                    if not re.search(mandatory_dict[key], match_dict[key]):
+                        return find_regex_return(msg='Custom log: can\'t parse "%s": %s'
+                                                     % (key, match_dict[key]))
+
+            optional_values = set(optional_dict) & set(match_dict)
+            for key in optional_values:
+                if not re.search(optional_dict[key], match_dict[key]):
+                    return find_regex_return(msg='Custom log: can\'t parse "%s": %s'
+                                                 % (key, match_dict[key]))
+
+            dot_in_time = '.' in match_dict.get('resp_time', '')
+            if dot_in_time:
+                self.resp_time_func = lambda time: time * (resp_time_func or 1000000)
             else:
-                if not re.search(r'[\da-f.:]+', match_dict['address']):
-                    return find_regex_return(msg='Custom log: can\'t parse "address": %s'
-                                                 % match_dict['address'])
-                if not re.search(r'[1-9]\d{2}', match_dict['code']):
-                    return find_regex_return(msg='Custom log: can\'t parse "code": %s'
-                                                 % match_dict['code'])
-                if not re.search(r'[A-Z]+', match_dict['method']):
-                    return find_regex_return(msg='Custom log: can\'t parse "method": %s'
-                                                 % match_dict['method'])
-                if not re.search(r'\d+|-', match_dict['bytes_sent']):
-                    return find_regex_return(msg='Custom log: can\'t parse "bytes_sent": %s'
-                                                 % match_dict['bytes_sent'])
-
-            if 'resp_length' in match_dict:
-                if not re.search(r'\d+', match_dict['resp_length']):
-                    return find_regex_return(msg='Custom log: can\'t parse "resp_length": %s'
-                                                 % match_dict['resp_length'])
-
-            if 'resp_time' in match_dict:
-                if not re.search(r'[\d.]+', match_dict['resp_length']):
-                    return find_regex_return(msg='Custom log: can\'t parse "resp_time": %s'
-                                                 % match_dict['resp_time'])
-                else:
-                    if '.' in match_dict['resp_time']:
-                        self.resp_time_func = lambda time: time * (resp_time_func or 1000000)
-                    else:
-                        self.resp_time_func = lambda time: time * (resp_time_func or 1)
+                self.resp_time_func = lambda time: time * (resp_time_func or 1)
 
             self.regex = regex
             return find_regex_return(match_dict=match_dict,
-                                     log_name='web_access',
-                                     msg='We are fine')
+                                     log_name='web_access')
 
     def find_regex(self, last_line):
         """
@@ -380,7 +375,8 @@ class Service(LogService):
                               ' web_log.detailed_response_codes stacked 1 %s\n' % (job_name, self.update_every)
         self.http_method_chart = 'CHART %s.http_method' \
                                  ' "" "Requests Per HTTP Method" requests/s "http methods"' \
-                                 ' web_log.http_method stacked 2 %s\n' % (job_name, self.update_every)
+                                 ' web_log.http_method stacked 2 %s\n' \
+                                 'DIMENSION GET GET incremental\n' % (job_name, self.update_every)
 
         # Remove 'request_time' chart from ORDER if resp_time not in match_dict
         if 'resp_time' not in match_dict: