Example #1
0
    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")))
Example #2
0
    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')))
Example #3
0
    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
Example #4
0
    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
Example #5
0
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)
Example #6
0
  def data(self):
    if self.should_refresh():
      self.config = PorkchopUtil.parse_config(self.config_file)
      self.data = self.get_data()

    return self.__class__._data