class Bipbip::Plugin
Attributes
config[RW]
frequency[RW]
metric_group[RW]
name[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