def __init__(self, config_dir, directory=None): self.config_dir = config_dir self.config = PorkchopUtil.parse_config(os.path.join(self.config_dir, "porkchop.ini")) if directory: self.__class__.plugins.update(self.load_plugins(directory)) self.__class__.plugins.update(self.load_plugins(os.path.join(os.path.dirname(__file__), "plugins")))
def __init__(self, config_dir, directory=None): self.config_dir = config_dir self.config = PorkchopUtil.parse_config( os.path.join(self.config_dir, 'porkchop.ini')) if directory: self.__class__.plugins.update(self.load_plugins(directory)) self.__class__.plugins.update( self.load_plugins( os.path.join(os.path.dirname(__file__), 'plugins')))
def data(self): if self.should_refresh(): self.config = PorkchopUtil.parse_config(self.config_file) if self.prev_data is None: self.__class__.__delta = 1 self.prev_data = self.get_data() time.sleep(1) else: self.prev_data = self.__class__.__data self.data = self.get_data() result = self.format_data(self.__class__.__data) if not result: return result result["refreshtime"] = self.__class__.__lastrefresh return result
def data(self): if self.should_refresh(): self.config = PorkchopUtil.parse_config(self.config_file) if self.prev_data is None: self.__class__.__delta = 1 self.prev_data = self.get_data() time.sleep(1) else: self.prev_data = self.__class__.__data self.data = self.get_data() result = self.format_data(self.__class__.__data) if not result: return result result['refreshtime'] = self.__class__.__lastrefresh return result
def collector(): import requests import sys import time from porkchop.backend import Carbon from porkchop.util import PorkchopUtil carbon_host = 'localhost' carbon_port = 2004 data = {} porkchop_url = 'http://localhost:5000/' interval = 60 prefix = 'porkchop.%s' % socket.gethostname().split('.')[0].replace('.', '_') parser = OptionParser() parser.add_option('--carbon-host', dest='carbon_host', default=carbon_host, help='Connect to carbon on HOST (default: %s)' % carbon_host, metavar='HOST') parser.add_option('--carbon-port', type='int', dest='carbon_port', default=carbon_port, help='Connect to carbon on PORT (default: %d)' % carbon_port, metavar='PORT') parser.add_option('--porkchop-url', dest='porkchop_url', default=porkchop_url, help='Connect to porkchop on URL (default: %s)' % porkchop_url, metavar='URL') parser.add_option('-i', type='int', dest='interval', default=interval, help='Fetch data at INTERVAL seconds (default: %d)' % interval, metavar='INTERVAL') parser.add_option('-n', dest='noop', default=False, help='Don\'t actually send to graphite', action='store_true') parser.add_option('-P', dest='prefix', default=prefix, help='Graphite prefix (default: %s)' % prefix) parser.add_option('-v', dest='verbose', default=False, help='Verbose logging', action='store_true') (options, args) = parser.parse_args() if options.verbose: logger = get_logger('porkchop-collector', logging.DEBUG) else: logger = get_logger('porkchop-collector') if not options.noop: carbon = Carbon(options.carbon_host, options.carbon_port, logger) while True: now = int(time.time()) try: logger.debug('Fetching porkchop data from %s', options.porkchop_url) r = requests.get(options.porkchop_url, timeout=options.interval, headers={'x-porkchop-refresh': 'true'}) r.raise_for_status() except: logger.error('Got bad response code from porkchop: %s', sys.exc_info()[1]) for line in r.content.strip('\n').splitlines(): (key, val) = line.lstrip('/').split(' ', 1) key = PorkchopUtil.char_filter(key) key = '.'.join([options.prefix, key.replace('/', '.')]) data.setdefault(key, []) try: data[key].append((now, coerce_number(val))) for met in data.keys(): for datapoint in data[met]: logger.debug('Sending: %s %s %s', met, datapoint[0], datapoint[1]) if not options.noop: carbon.data = data carbon.send() except: pass sleep_time = options.interval - (int(time.time()) - now) if sleep_time > 0: logger.info('Sleeping for %d seconds', sleep_time) time.sleep(sleep_time)
def data(self): if self.should_refresh(): self.config = PorkchopUtil.parse_config(self.config_file) self.data = self.get_data() return self.__class__._data