@cryptotaxi247 / netdata-1 / commits / efa910bcc

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