@cryptotaxi247 / netdata-1 / commits / 9d3639f5a

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