]> git-server-git.apps.pok.os.sepia.ceph.com Git - cephmetrics.git/commitdiff
base/common: updated to include basic logging per module
authorPaul Cuzner <pcuzner@redhat.com>
Mon, 26 Jun 2017 05:04:02 +0000 (17:04 +1200)
committerPaul Cuzner <pcuzner@redhat.com>
Mon, 26 Jun 2017 05:04:02 +0000 (17:04 +1200)
The base class now creates a logging object, allowing the collectors
to log lower level debug and info messages outside of the collectd log

collectors/base.py
collectors/common.py

index 2c4590b5c9402dd8872b54a7350d4e9a67c0fa55..087043f7d44107c71e7551635331da8b933d2f4c 100644 (file)
@@ -1,21 +1,36 @@
 #!/usr/bin/env python
 from ceph_daemon import admin_socket
 import json
+from collectors.common import CollectorLog
+import time
 
 class BaseCollector(object):
 
-    def __init__(self, cluster_name, admin_socket=None):
+    def __init__(self, cluster_name, admin_socket=None, log_level='debug'):
         self.cluster_name = cluster_name
         self.admin_socket = admin_socket
 
+        class_name = self.__class__.__name__
+        self.logger = CollectorLog(log_type=class_name,
+                                   log_level=log_level)
+
     def _admin_socket(self, cmds=None):
         if not cmds:
             cmds = ['perf', 'dump']
 
+        start = time.time()
         response = admin_socket(self.admin_socket, cmds,
                                 format='json')
+        end = time.time()
+
+        self.elapsed_log_msg("admin_socket call for {}".format(' '.join(cmds)),
+                             (end - start))
         return json.loads(response)
 
+    def elapsed_log_msg(self, msg, elapsed_secs):
+        self.logger.debug("{0} took {1:.2f} secs".format(msg,
+                                                        elapsed_secs))
+
     def get_stats(self):
 
         return {}
index 1919c820e98441d164c277fbf279d048cdcda2f4..f0072bb08f000993d072eacb7a39c150d0307577 100644 (file)
@@ -4,6 +4,7 @@
 import socket
 from os import statvfs
 import math
+import logging
 
 
 def get_hostname():
@@ -202,3 +203,32 @@ class Disk(object):
 
     def refresh(self):
         self.fs_size, self.fs_used, self.fs_percent_used = self._get_fssize()
+
+
+class CollectorLog(object):
+
+    level = {'debug': logging.DEBUG,
+             'info': logging.INFO}
+
+    def __init__(self, log_type, log_level='debug'):
+        self.log = logging.getLogger(log_type)
+
+        fh = logging.FileHandler('/var/log/collectd-cephmetrics-{}'
+                                 '.log'.format(log_type),
+                                 mode='w')
+
+        self.log.setLevel(CollectorLog.level[log_level])
+        fmt = logging.Formatter('%(asctime)s - %(levelname)-7s : %(message)s')
+        fh.setFormatter(fmt)
+        self.log.addHandler(fh)
+
+        # set up redirection for debug and info, to make the class accept
+        # calls similar to a straight logger implementation
+        self.debug = self._debug_handler
+        self.info = self._info_handler
+
+    def _debug_handler(self, msg):
+        self.log.debug(msg)
+
+    def _info_handler(self, msg):
+        self.log.info(msg)