]> arthur.barton.de Git - netdata.git/blobdiff - python.d/phpfpm.chart.py
Merge pull request #1807 from l2isbad/elasticsearch_plugin_p26
[netdata.git] / python.d / phpfpm.chart.py
old mode 100755 (executable)
new mode 100644 (file)
index 7f2da9c..b79a35d
@@ -15,7 +15,7 @@ retries = 60
 #     'update_every': update_every,
 #     'retries': retries,
 #     'priority': priority,
-#     'url': 'http://localhost/status'
+#     'url': 'http://localhost/status?full&json'
 # }}
 
 # charts order (can be overridden if you want less charts, or different order)
@@ -23,37 +23,37 @@ ORDER = ['connections', 'requests', 'performance', 'request_duration', 'request_
 
 CHARTS = {
     'connections': {
-        'options': [None, 'PHP-FPM Active Connections', 'connections', 'phpfpm', 'phpfpm.connections', 'line'],
+        'options': [None, 'PHP-FPM Active Connections', 'connections', 'active connections', 'phpfpm.connections', 'line'],
         'lines': [
             ["active"],
             ["maxActive", 'max active'],
             ["idle"]
         ]},
     'requests': {
-        'options': [None, 'PHP-FPM Requests', 'requests/s', 'phpfpm', 'phpfpm.requests', 'line'],
+        'options': [None, 'PHP-FPM Requests', 'requests/s', 'requests', 'phpfpm.requests', 'line'],
         'lines': [
             ["requests", None, "incremental"]
         ]},
     'performance': {
-        'options': [None, 'PHP-FPM Performance', 'status', 'phpfpm', 'phpfpm.performance', 'line'],
+        'options': [None, 'PHP-FPM Performance', 'status', 'performance', 'phpfpm.performance', 'line'],
         'lines': [
             ["reached", 'max children reached'],
             ["slow", 'slow requests']
         ]},
     'request_duration': {
-        'options': [None, 'PHP-FPM Request Duration', 'milliseconds', 'phpfpm', 'phpfpm.request_duration', 'line'],
+        'options': [None, 'PHP-FPM Request Duration', 'milliseconds', 'request duration', 'phpfpm.request_duration', 'line'],
         'lines': [
             ["maxReqDur", 'max request duration'],
             ["avgReqDur", 'average request duration']
         ]},
     'request_cpu': {
-        'options': [None, 'PHP-FPM Request CPU', 'percent', 'phpfpm', 'phpfpm.request_cpu', 'line'],
+        'options': [None, 'PHP-FPM Request CPU', 'percent', 'request CPU', 'phpfpm.request_cpu', 'line'],
         'lines': [
             ["maxReqCPU", 'max request cpu'],
             ["avgReqCPU", 'average request cpu']
         ]},
     'request_mem': {
-        'options': [None, 'PHP-FPM Request Memory', 'kilobytes', 'phpfpm', 'phpfpm.request_mem', 'line'],
+        'options': [None, 'PHP-FPM Request Memory', 'kilobytes', 'request memory', 'phpfpm.request_mem', 'line'],
         'lines': [
             ["maxReqMem", 'max request memory'],
             ["avgReqMem", 'average request memory']
@@ -88,30 +88,52 @@ class Service(UrlService):
         except AttributeError:
             return None
 
-        try:
-            raw_json = json.loads(raw)
-        except ValueError:
-            return None
+        if '?json' in self.url or '&json' in self.url:
+            try:
+                raw_json = json.loads(raw)
+            except ValueError:
+                return None
+            data = {}
+            for k,v in raw_json.items():
+                if k in self.assignment:
+                    data[self.assignment[k]] = v
 
-        data = {self.assignment[k]: v for k, v in raw_json.items() if k in self.assignment}
+            if '&full' in self.url or '?full' in self.url:
+                c = 0
+                sum_val = {}
+                for proc in raw_json['processes']:
+                    if proc['state'] != 'Idle':
+                        continue
+                    c += 1
+                    for k, v in self.proc_assignment.items():
+                        d = proc[k]
+                        if v == 'ReqDur':
+                            d = d/1000
+                        if v == 'ReqMem':
+                            d = d/1024
+                        if 'max' + v not in data or data['max' + v] < d:
+                            data['max' + v] = d
+                        if 'avg' + v not in sum_val:
+                            sum_val['avg' + v] = 0
+                            data['avg' + v] = 0
+                        sum_val['avg' + v] += d
+                if len(sum_val):
+                    for k, v in sum_val.items():
+                        data[k] = v/c
 
-        c = 0
-        for proc in raw_json['processes']:
-            if proc['state'] != 'Idle':
-                continue
-            c += 1
-            for k, v in self.proc_assignment.items():
-                d = proc[k]
-                if v == 'ReqDur':
-                    d = d/1000
-                if v == 'ReqMem':
-                    d = d/1024
-                if 'max' + v not in data or data['max' + v] < d:
-                    data['max' + v] = d
-                if 'avg' + v not in data:
-                    data['avg' + v] = 0
-                data['avg' + v] = (data['avg' + v] + d) / c
+            if len(data) == 0:
+                return None
+            return data
 
+        raw = raw.split('\n')
+        data = {}
+        for row in raw:
+            tmp = row.split(":")
+            if str(tmp[0]) in self.assignment:
+                try:
+                    data[self.assignment[tmp[0]]] = int(tmp[1])
+                except (IndexError, ValueError):
+                    pass
         if len(data) == 0:
             return None
         return data