From: Paul Cuzner Date: Mon, 26 Jun 2017 05:04:02 +0000 (+1200) Subject: base/common: updated to include basic logging per module X-Git-Tag: v1.0~73 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d3432caf0dc7cc7b70b73f93a84313426fc65093;p=cephmetrics.git base/common: updated to include basic logging per module The base class now creates a logging object, allowing the collectors to log lower level debug and info messages outside of the collectd log --- diff --git a/collectors/base.py b/collectors/base.py index 2c4590b..087043f 100644 --- a/collectors/base.py +++ b/collectors/base.py @@ -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 {} diff --git a/collectors/common.py b/collectors/common.py index 1919c82..f0072bb 100644 --- a/collectors/common.py +++ b/collectors/common.py @@ -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)