keep backwards compatible and support json without full
Clint Armstrong committed
Sep 21, 2016 at 14:20 UTC
9d3639f5a8d847eaf59463f6a88893231e3674d0
1 file changed
+36
-24
python.d/phpfpm.chart.py
+36
-24
@@ -15,7 +15,7 @@ retries = 60
15
# 'update_every': update_every,
16
# 'retries': retries,
17
# 'priority': priority,
18
-# 'url': 'http://localhost/status'
18
+# 'url': 'http://localhost/status?full&json'
19
# }}
20
21
# charts order (can be overridden if you want less charts, or different order)
@@ -88,30 +88,42 @@ class Service(UrlService):
88
except AttributeError:
89
return None
90
91
- try:
92
- raw_json = json.loads(raw)
93
- except ValueError:
94
- return None
95
-
96
- data = {self.assignment[k]: v for k, v in raw_json.items() if k in self.assignment}
97
-
98
- c = 0
99
- for proc in raw_json['processes']:
100
- if proc['state'] != 'Idle':
101
- continue
102
- c += 1
103
- for k, v in self.proc_assignment.items():
104
- d = proc[k]
105
- if v == 'ReqDur':
106
- d = d/1000
107
- if v == 'ReqMem':
108
- d = d/1024
109
- if 'max' + v not in data or data['max' + v] < d:
110
- data['max' + v] = d
111
- if 'avg' + v not in data:
112
- data['avg' + v] = 0
113
- data['avg' + v] = (data['avg' + v] + d) / c
91
+ if '?json' in self.url or '&json' in self.url:
92
+ try:
93
+ raw_json = json.loads(raw)
94
+ except ValueError:
95
+ return None
96
+ data = {self.assignment[k]: v for k, v in raw_json.items() if k in self.assignment}
97
+ if '&full' in self.url or '?full' in self.url:
98
+ c = 0
99
+ for proc in raw_json['processes']:
100
+ if proc['state'] != 'Idle':
101
+ continue
102
+ c += 1
103
+ for k, v in self.proc_assignment.items():
104
+ d = proc[k]
105
+ if v == 'ReqDur':
106
+ d = d/1000
107
+ if v == 'ReqMem':
108
+ d = d/1024
109
+ if 'max' + v not in data or data['max' + v] < d:
110
+ data['max' + v] = d
111
+ if 'avg' + v not in data:
112
+ data['avg' + v] = 0
113
+ data['avg' + v] = (data['avg' + v] + d) / c
114
+ if len(data) == 0:
115
+ return None
116
+ return data
117
118
+ raw = raw.split('\n')
119
+ data = {}
120
+ for row in raw:
121
+ tmp = row.split(":")
122
+ if str(tmp[0]) in self.assignment:
123
+ try:
124
+ data[self.assignment[tmp[0]]] = int(tmp[1])
125
+ except (IndexError, ValueError):
126
+ pass
127
if len(data) == 0:
128
return None
129
return data