class Snmp2mkr::EngineThreads::Sender
Attributes
host_manager[R]
logger[R]
mackerel[R]
queue[R]
thread[R]
Public Class Methods
new(mackerel:, host_manager:, queue:, logger: Logger.new($stdout))
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 7 def initialize(mackerel:, host_manager:, queue:, logger: Logger.new($stdout)) @mackerel = mackerel @host_manager = host_manager @queue = queue @logger = logger @thread = nil end
Public Instance Methods
get_host_id(vhost)
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 82 def get_host_id(vhost) host_manager.set_mackerel_host_id_safe(vhost) do logger.debug "Registering #{vhost.name.inspect}" mackerel.post_host(name: vhost.name, meta: {})['id'].tap do |host_id| logger.info "Registered #{vhost.name.inspect} as #{host_id.inspect}" end end end
join()
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 21 def join return unless running? @thread.join end
main_loop()
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 31 def main_loop while job = queue.pop process job end rescue Exception => e logger.error "#{e.inspect}\n\t#{e.backtrace.join("\n\t")}" sleep 1 retry end
process(job)
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 41 def process(job) logger.debug "sending #{job.inspect}" case job when Snmp2mkr::SendRequests::Metrics send_metrics job when Snmp2mkr::SendRequests::HostInformation update_host job else raise TypeError, "Invalid send_request: #{job.class}" end end
running?()
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 17 def running? @thread && @thread.alive? end
send_metrics(job)
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 67 def send_metrics(job) metric_values = job.metric_values.map do |mv| { hostId: get_host_id(mv[:vhost]), name: mv[:name], time: mv[:time].to_i, value: mv[:value] } end logger.debug "Posting metrics #{job.inspect}: #{metric_values.inspect}" resp = mackerel.post_metrics(metric_values) logger.debug "Mackerel response (#{job.inspect}): #{resp.inspect}" end
start()
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 26 def start return if running? @thread = Thread.new(&method(:main_loop)) end
update_host(job)
click to toggle source
# File lib/snmp2mkr/engine_threads/sender.rb, line 54 def update_host(job) host_id = get_host_id(job.vhost) host = { name: job.vhost.name, meta: job.meta, interfaces: job.interfaces, } logger.debug "Update host (#{job.vhost.name}, #{host_id}): #{host.to_json}" resp = mackerel.put_host(host_id, host) logger.debug "Mackerel response (update_host #{host_id.inspect}): #{resp.inspect}" end