]> arthur.barton.de Git - netdata.git/commitdiff
better logging
authorpaulfantom <paulfantom@gmail.com>
Fri, 15 Jul 2016 13:53:20 +0000 (15:53 +0200)
committerpaulfantom <paulfantom@gmail.com>
Fri, 15 Jul 2016 13:53:20 +0000 (15:53 +0200)
plugins.d/python.d.plugin
python.d/hddtemp.chart.py
python.d/python_modules/base.py
python.d/redis.chart.py
python.d/squid.chart.py

index 10d881b33bf0fe5db732c2ae27b4fad44d80d807..a4ffb85db72441f6e6427f07e559c1ad45cd4a47 100755 (executable)
@@ -291,6 +291,7 @@ class PythonCharts(object):
         except Exception as e:
             msg.debug("This shouldn't happen. NO " + prefix + " IN LIST:" + str(self.jobs) + " ERROR: " + str(e))
 
+        # TODO remove section below and remove `reason`.
         prefix += ": "
         if reason is None:
             return
@@ -320,11 +321,13 @@ class PythonCharts(object):
         """
         i = 0
         overridden = []
+        self.debug("all job objects:", str(self.jobs))
         while i < len(self.jobs):
             job = self.jobs[i]
             try:
                 if not job.check():
-                    self._stop(job, "failed check")
+                    self.error("check function failed.")
+                    self._stop(job)
                 else:
                     msg.debug(job.chart_name, ": check succeeded")
                     i += 1
@@ -343,9 +346,13 @@ class PythonCharts(object):
                     except Exception:
                         pass
             except AttributeError:
-                self._stop(job, "no check")
+                self._stop(job)
+                self.error("cannot find check() function.")
             except (UnboundLocalError, Exception) as e:
-                self._stop(job, "misbehaving. Reason:" + str(e))
+                self.error(str(e))
+                self._stop(job)
+        self.debug("overridden job names:", str(overridden))
+        self.debug("all remaining job objects:", str(self.jobs))
 
     def create(self):
         """
@@ -359,7 +366,8 @@ class PythonCharts(object):
             job = self.jobs[i]
             try:
                 if not job.create():
-                    self._stop(job, "failed create")
+                    self.error("create function failed.")
+                    self._stop(job)
                 else:
                     chart = job.chart_name
                     sys.stdout.write(
@@ -375,9 +383,11 @@ class PythonCharts(object):
                     # sys.stdout.flush()
                     i += 1
             except AttributeError:
-                self._stop(job, "no create")
+                self.error("cannot find create() function.")
+                self._stop(job)
             except (UnboundLocalError, Exception) as e:
-                self._stop(job, "misbehaving. Reason: " + str(e))
+                self.error(str(e))
+                self._stop(job)
 
     def update(self):
         """
index d0b53fc50d167b45821225a3bc20afdd0a0af4c0..842004845e527fb47dd241ca884068aed990248a 100644 (file)
@@ -46,6 +46,7 @@ class Service(SocketService):
         try:
             raw = self._get_raw_data().split("|")[:-1]
         except AttributeError:
+            self.error("no data received")
             return None
         data = {}
         for i in range(len(raw) // 5):
@@ -54,7 +55,12 @@ class Service(SocketService):
             except ValueError:
                 val = 0
             data[raw[i*5+1].replace("/dev/", "")] = val
-        return data
+
+        if len(data) == 0:
+            self.error("received data doesn't have needed records")
+            return None
+        else:
+            return data
 
     def check(self):
         """
@@ -64,7 +70,6 @@ class Service(SocketService):
         self._parse_config()
         data = self._get_data()
         if data is None:
-            self.error("No data received")
             return False
 
         for name in data:
index b8fa3e9e3acf17f7f6e3a171e61c1788f7725dd6..786cd7f61603e34e3007e54b5447425d9660920b 100644 (file)
@@ -6,7 +6,6 @@ import time
 import sys
 import os
 import socket
-import resource
 try:
     import urllib.request as urllib2
 except ImportError:
@@ -96,7 +95,7 @@ class BaseService(threading.Thread):
         if self.timetable['next'] > t_start:
             #msg.debug(self.chart_name + " will be run in " +
             #          str(int((self.timetable['next'] - t_start) * 1000)) + " ms")
-            msg.debug(self.chart_name,"will be run in", str(int((self.timetable['next'] - t_start) * 1000)), "ms")
+            msg.debug(self.chart_name, "will be run in", str(int((self.timetable['next'] - t_start) * 1000)), "ms")
             return True
 
         since_last = int((t_start - self.timetable['last']) * 1000000)
@@ -109,6 +108,7 @@ class BaseService(threading.Thread):
                   "ms (update_every:", str(self.timetable['freq'] * 1000),
                   "ms, latency:", str(int((t_start - self.timetable['next']) * 1000)), "ms")
         if not self.update(since_last):
+            self.error("update function failed.")
             return False
         t_end = time.time()
         self.timetable['next'] = t_end - (t_end % self.timetable['freq']) + self.timetable['freq']
@@ -137,7 +137,7 @@ class BaseService(threading.Thread):
             try:
                 status = self._run_once()
             except Exception as e:
-                msg.error("Something wrong: " + str(e))
+                msg.error("Something wrong: ", str(e))
                 return
             if status:
                 time.sleep(self.timetable['next'] - time.time())
@@ -150,7 +150,8 @@ class BaseService(threading.Thread):
                 else:
                     time.sleep(self.timetable['freq'])
 
-    def _format(self, *args):
+    @staticmethod
+    def _format(*args):
         params = []
         append = params.append
         for p in args:
@@ -424,13 +425,13 @@ class UrlService(SimpleService):
         try:
             f = urllib2.urlopen(self.url, timeout=self.update_every)
         except Exception as e:
-            msg.error(self.__module__, str(e))
+            msg.error(str(e))
             return None
 
         try:
             raw = f.read().decode('utf-8')
         except Exception as e:
-            msg.error(self.__module__, str(e))
+            msg.error(str(e))
         finally:
             f.close()
         return raw
@@ -507,13 +508,14 @@ class SocketService(SimpleService):
         if self.request != "".encode():
             try:
                 sock.send(self.request)
-            except Exception:
+            except Exception as e:
                 try:
                     sock.shutdown(1)
                     sock.close()
                 except:
                     pass
                 self.sock = None
+                self.error(str(e))
                 return None
 
         size = 2
@@ -581,6 +583,7 @@ class LogService(SimpleService):
             if os.path.getsize(self.log_path) < self._last_position:
                 self._last_position = 0
             elif os.path.getsize(self.log_path) == self._last_position:
+                self.debug("Log file hasn't changed. No new data.")
                 return None
             with open(self.log_path, "r") as fp:
                 fp.seek(self._last_position)
@@ -588,11 +591,13 @@ class LogService(SimpleService):
                     lines.append(line)
                 self._last_position = fp.tell()
         except Exception as e:
-            self.error(self.__module__, str(e))
+            self.error(str(e))
 
         if len(lines) != 0:
             return lines
-        return None
+        else:
+            self.error("No data collected.")
+            return None
 
     def check(self):
         """
@@ -636,13 +641,14 @@ class ExecutableService(SimpleService):
         try:
             p = Popen(self.command, stdout=PIPE, stderr=PIPE)
         except Exception as e:
-            self.error(self.__module__, str(e))
+            self.error(str(e))
             return None
         data = []
         for line in p.stdout.readlines():
             data.append(str(line.decode()))
 
         if len(data) == 0:
+            self.error("No data collected.")
             return None
 
         return data
index 7a0e91bc080edcd90d5e0356a030ecb728fa514b..570fa36caac827da03543451d53eb53347703f47 100644 (file)
@@ -75,6 +75,7 @@ class Service(SocketService):
         try:
             raw = self._get_raw_data().split("\n")
         except AttributeError:
+            self.error("no data received")
             return None
         data = {}
         for line in raw:
@@ -93,7 +94,11 @@ class Service(SocketService):
         except:
             data['hit_rate'] = 0
 
-        return data
+        if len(data) == 0:
+            self.error("received data doesn't have needed records")
+            return None
+        else:
+            return data
 
     def check(self):
         """
@@ -106,7 +111,6 @@ class Service(SocketService):
         self.chart_name += "_" + self.name
         data = self._get_data()
         if data is None:
-            self.error("No data received")
             return False
 
         for name in data:
index d07408680a9c3b459886dc23722979b7928a698c..97cf711e12d1c6eec308e179454c7836bf8a49c7 100644 (file)
@@ -60,15 +60,18 @@ class Service(SocketService):
         try:
             raw = self._get_raw_data().split('\r\n')[-1]
             if raw.startswith('<'):
+                self.error("invalid data received")
                 return None
             for row in raw.split('\n'):
                 if row.startswith(("client", "server.all")):
                     tmp = row.split("=")
                     data[tmp[0].replace('.', '_').strip(' ')] = int(tmp[1])
         except (ValueError, AttributeError, TypeError):
+            self.error("invalid data received")
             return None
 
         if len(data) == 0:
+            self.error("no data received")
             return None
         else:
             return data
@@ -89,5 +92,4 @@ class Service(SocketService):
         if self._get_data() is not None:
             return True
         else:
-            self.error("No data returned")
             return False