#!/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 {}
import socket
from os import statvfs
import math
+import logging
def get_hostname():
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)