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