better logging
paulfantom committed
Jul 15, 2016 at 15:53 UTC
efa910bcc46671c515bc9f981eec90acc1b92dba
5 files changed
+48
-21
plugins.d/python.d.plugin
+16
-6
@@ -291,6 +291,7 @@ class PythonCharts(object):
291
except Exception as e:
292
msg.debug("This shouldn't happen. NO " + prefix + " IN LIST:" + str(self.jobs) + " ERROR: " + str(e))
293
294
+ # TODO remove section below and remove `reason`.
295
prefix += ": "
296
if reason is None:
297
return
@@ -320,11 +321,13 @@ class PythonCharts(object):
321
"""
322
i = 0
323
overridden = []
324
+ self.debug("all job objects:", str(self.jobs))
325
while i < len(self.jobs):
326
job = self.jobs[i]
327
try:
328
if not job.check():
327
- self._stop(job, "failed check")
329
+ self.error("check function failed.")
330
+ self._stop(job)
331
else:
332
msg.debug(job.chart_name, ": check succeeded")
333
i += 1
@@ -343,9 +346,13 @@ class PythonCharts(object):
346
except Exception:
347
pass
348
except AttributeError:
346
- self._stop(job, "no check")
349
+ self._stop(job)
350
+ self.error("cannot find check() function.")
351
except (UnboundLocalError, Exception) as e:
348
- self._stop(job, "misbehaving. Reason:" + str(e))
352
+ self.error(str(e))
353
+ self._stop(job)
354
+ self.debug("overridden job names:", str(overridden))
355
+ self.debug("all remaining job objects:", str(self.jobs))
356
357
def create(self):
358
"""
@@ -359,7 +366,8 @@ class PythonCharts(object):
366
job = self.jobs[i]
367
try:
368
if not job.create():
362
- self._stop(job, "failed create")
369
+ self.error("create function failed.")
370
+ self._stop(job)
371
else:
372
chart = job.chart_name
373
sys.stdout.write(
@@ -375,9 +383,11 @@ class PythonCharts(object):
383
# sys.stdout.flush()
384
i += 1
385
except AttributeError:
378
- self._stop(job, "no create")
386
+ self.error("cannot find create() function.")
387
+ self._stop(job)
388
except (UnboundLocalError, Exception) as e:
380
- self._stop(job, "misbehaving. Reason: " + str(e))
389
+ self.error(str(e))
390
+ self._stop(job)
391
392
def update(self):
393
"""
python.d/hddtemp.chart.py
+7
-2
@@ -46,6 +46,7 @@ class Service(SocketService):
46
try:
47
raw = self._get_raw_data().split("|")[:-1]
48
except AttributeError:
49
+ self.error("no data received")
50
return None
51
data = {}
52
for i in range(len(raw) // 5):
@@ -54,7 +55,12 @@ class Service(SocketService):
55
except ValueError:
56
val = 0
57
data[raw[i*5+1].replace("/dev/", "")] = val
57
- return data
58
+
59
+ if len(data) == 0:
60
+ self.error("received data doesn't have needed records")
61
+ return None
62
+ else:
63
+ return data
64
65
def check(self):
66
"""
@@ -64,7 +70,6 @@ class Service(SocketService):
70
self._parse_config()
71
data = self._get_data()
72
if data is None:
67
- self.error("No data received")
73
return False
74
75
for name in data:
python.d/python_modules/base.py
+16
-10
@@ -6,7 +6,6 @@ import time
6
import sys
7
import os
8
import socket
9
-import resource
9
try:
10
import urllib.request as urllib2
11
except ImportError:
@@ -96,7 +95,7 @@ class BaseService(threading.Thread):
95
if self.timetable['next'] > t_start:
96
#msg.debug(self.chart_name + " will be run in " +
97
# str(int((self.timetable['next'] - t_start) * 1000)) + " ms")
99
- msg.debug(self.chart_name,"will be run in", str(int((self.timetable['next'] - t_start) * 1000)), "ms")
98
+ msg.debug(self.chart_name, "will be run in", str(int((self.timetable['next'] - t_start) * 1000)), "ms")
99
return True
100
101
since_last = int((t_start - self.timetable['last']) * 1000000)
@@ -109,6 +108,7 @@ class BaseService(threading.Thread):
108
"ms (update_every:", str(self.timetable['freq'] * 1000),
109
"ms, latency:", str(int((t_start - self.timetable['next']) * 1000)), "ms")
110
if not self.update(since_last):
111
+ self.error("update function failed.")
112
return False
113
t_end = time.time()
114
self.timetable['next'] = t_end - (t_end % self.timetable['freq']) + self.timetable['freq']
@@ -137,7 +137,7 @@ class BaseService(threading.Thread):
137
try:
138
status = self._run_once()
139
except Exception as e:
140
- msg.error("Something wrong: " + str(e))
140
+ msg.error("Something wrong: ", str(e))
141
return
142
if status:
143
time.sleep(self.timetable['next'] - time.time())
@@ -150,7 +150,8 @@ class BaseService(threading.Thread):
150
else:
151
time.sleep(self.timetable['freq'])
152
153
- def _format(self, *args):
153
+ @staticmethod
154
+ def _format(*args):
155
params = []
156
append = params.append
157
for p in args:
@@ -424,13 +425,13 @@ class UrlService(SimpleService):
425
try:
426
f = urllib2.urlopen(self.url, timeout=self.update_every)
427
except Exception as e:
427
- msg.error(self.__module__, str(e))
428
+ msg.error(str(e))
429
return None
430
431
try:
432
raw = f.read().decode('utf-8')
433
except Exception as e:
433
- msg.error(self.__module__, str(e))
434
+ msg.error(str(e))
435
finally:
436
f.close()
437
return raw
@@ -507,13 +508,14 @@ class SocketService(SimpleService):
508
if self.request != "".encode():
509
try:
510
sock.send(self.request)
510
- except Exception:
511
+ except Exception as e:
512
try:
513
sock.shutdown(1)
514
sock.close()
515
except:
516
pass
517
self.sock = None
518
+ self.error(str(e))
519
return None
520
521
size = 2
@@ -581,6 +583,7 @@ class LogService(SimpleService):
583
if os.path.getsize(self.log_path) < self._last_position:
584
self._last_position = 0
585
elif os.path.getsize(self.log_path) == self._last_position:
586
+ self.debug("Log file hasn't changed. No new data.")
587
return None
588
with open(self.log_path, "r") as fp:
589
fp.seek(self._last_position)
@@ -588,11 +591,13 @@ class LogService(SimpleService):
591
lines.append(line)
592
self._last_position = fp.tell()
593
except Exception as e:
591
- self.error(self.__module__, str(e))
594
+ self.error(str(e))
595
596
if len(lines) != 0:
597
return lines
595
- return None
598
+ else:
599
+ self.error("No data collected.")
600
+ return None
601
602
def check(self):
603
"""
@@ -636,13 +641,14 @@ class ExecutableService(SimpleService):
641
try:
642
p = Popen(self.command, stdout=PIPE, stderr=PIPE)
643
except Exception as e:
639
- self.error(self.__module__, str(e))
644
+ self.error(str(e))
645
return None
646
data = []
647
for line in p.stdout.readlines():
648
data.append(str(line.decode()))
649
650
if len(data) == 0:
651
+ self.error("No data collected.")
652
return None
653
654
return data
python.d/redis.chart.py
+6
-2
@@ -75,6 +75,7 @@ class Service(SocketService):
75
try:
76
raw = self._get_raw_data().split("\n")
77
except AttributeError:
78
+ self.error("no data received")
79
return None
80
data = {}
81
for line in raw:
@@ -93,7 +94,11 @@ class Service(SocketService):
94
except:
95
data['hit_rate'] = 0
96
96
- return data
97
+ if len(data) == 0:
98
+ self.error("received data doesn't have needed records")
99
+ return None
100
+ else:
101
+ return data
102
103
def check(self):
104
"""
@@ -106,7 +111,6 @@ class Service(SocketService):
111
self.chart_name += "_" + self.name
112
data = self._get_data()
113
if data is None:
109
- self.error("No data received")
114
return False
115
116
for name in data:
python.d/squid.chart.py
+3
-1
@@ -60,15 +60,18 @@ class Service(SocketService):
60
try:
61
raw = self._get_raw_data().split('\r\n')[-1]
62
if raw.startswith('<'):
63
+ self.error("invalid data received")
64
return None
65
for row in raw.split('\n'):
66
if row.startswith(("client", "server.all")):
67
tmp = row.split("=")
68
data[tmp[0].replace('.', '_').strip(' ')] = int(tmp[1])
69
except (ValueError, AttributeError, TypeError):
70
+ self.error("invalid data received")
71
return None
72
73
if len(data) == 0:
74
+ self.error("no data received")
75
return None
76
else:
77
return data
@@ -89,5 +92,4 @@ class Service(SocketService):
92
if self._get_data() is not None:
93
return True
94
else:
92
- self.error("No data returned")
95
return False