class Bipbip::Plugin

Attributes

config[RW]
frequency[RW]
metric_group[RW]
name[RW]
tags[RW]

Public Class Methods

factory(name, config, frequency, tags, metric_group = nil) click to toggle source
# File lib/bipbip/plugin.rb, line 14
def self.factory(name, config, frequency, tags, metric_group = nil)
  require "bipbip/plugin/#{Bipbip::Helper.name_to_filename(name)}"
  Plugin.const_get(Bipbip::Helper.name_to_classname(name)).new(name, config, frequency, tags, metric_group)
end
factory_from_plugin(plugin) click to toggle source

@param [Bipbip::Plugin] plugin @return [Bipbip::Plugin]

# File lib/bipbip/plugin.rb, line 21
def self.factory_from_plugin(plugin)
  plugin.class.new(plugin.name, plugin.config, plugin.frequency, plugin.tags, plugin.metric_group)
end
new(name, config, frequency, tags = nil, metric_group = nil) click to toggle source
# File lib/bipbip/plugin.rb, line 25
def initialize(name, config, frequency, tags = nil, metric_group = nil)
  @name = name.to_s
  @config = config.to_hash
  @frequency = frequency.to_f
  @tags = tags.to_a
  @metric_group = (metric_group || name).to_s
end

Public Instance Methods

metrics_names() click to toggle source
# File lib/bipbip/plugin.rb, line 65
def metrics_names
  metrics_schema.map { |metric| metric[:name] }
end
metrics_schema() click to toggle source
# File lib/bipbip/plugin.rb, line 69
def metrics_schema
  raise 'Missing method metrics_schema'
end
monitor() click to toggle source
# File lib/bipbip/plugin.rb, line 73
def monitor
  raise 'Missing method monitor'
end
run(storages) click to toggle source

@param [Array] storages

# File lib/bipbip/plugin.rb, line 34
def run(storages)
  timeout = frequency * 2
  loop do
    time = Time.now
    Timeout.timeout(timeout, MeasurementTimeout) do
      run_measurement(time, storages)
    end
    interruptible_sleep (frequency - (Time.now - time))
  end
rescue MeasurementTimeout => e
  log(Logger::ERROR, "Measurement timeout of #{timeout} seconds reached.")
  retry
rescue StandardError => e
  log_exception(Logger::ERROR, e)
  interruptible_sleep frequency
  retry
rescue Exception => e
  log_exception(Logger::FATAL, e)
  raise e
end
source_identifier() click to toggle source
# File lib/bipbip/plugin.rb, line 57
def source_identifier
  identifier = Bipbip.fqdn + '::' + metric_group
  unless config.empty?
    identifier += '::' + config.values.first.to_s.gsub(/[^\w]/, '_')
  end
  identifier
end

Private Instance Methods

log(severity, message) click to toggle source
# File lib/bipbip/plugin.rb, line 88
def log(severity, message)
  Bipbip.logger.add(severity, message, "#{name} #{source_identifier}")
end
log_exception(severity, exception) click to toggle source
# File lib/bipbip/plugin.rb, line 92
def log_exception(severity, exception)
  backtrace = exception.backtrace.map { |line| " #{line}" }.join("\n")
  log(severity, exception.message + "\n" + backtrace)
end
run_measurement(time, storages) click to toggle source
# File lib/bipbip/plugin.rb, line 79
def run_measurement(time, storages)
  data = monitor
  raise "#{name} #{source_identifier}: Empty data" if data.empty?
  log(Logger::DEBUG, "Data: #{data}")
  storages.each do |storage|
    storage.store_sample(self, time, data)
  end
end