class Semlog::RabbitNotifier

Attributes

connection[RW]
default_options[RW]
exhange_name[RW]
host[RW]
port[RW]
pw[RW]
user[RW]
vhost[RW]

Public Class Methods

new(host:, port:, vhost:, exchange_name:, user:, pw: @connection = nil) click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 14
def initialize host:, port:, vhost:, exchange_name:, user:, pw:
  @connection = nil
  @host = host
  @port = port
  @vhost = vhost
  @exhange_name = exchange_name
  @user = user
  @pw = pw

  $logger.debug "RabbitNotifier>host: #{@host} port #{@port} vhost #{@vhost} "

  @default_options = {}
  @default_options['version'] = "1.1"
  @default_options['host'] ||= Socket.gethostname
  @default_options['level'] ||= Semlog::UNKNOWN
  @default_options['facility'] ||= 'RabbitNotifier'

end

Public Instance Methods

channel() click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 68
def channel
  connect
  @channel ||= @connection.create_channel
end
connect() click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 33
def connect
  unless @connection
    @connection = Bunny.new(:host => @host, :vhost => @vhost, :user => @user, :password => @pw)
    @connection.start
  end
  @connection
end
data_to_json(data) click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 60
def data_to_json(data)
  Oj.dump(gelfify(data))
end
exchange() click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 73
def exchange
  @exchange ||= channel.fanout(exhange_name, durable: true)
end
gelfify(data) click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 41
def gelfify(data)
  gdata = @default_options.dup
  data.keys.each do |key|
    value, key_s = data[key], key.to_s
    if ['host', 'level', 'version', 'short_message', 'full_message', 'timestamp', 'facility', 'line', 'file'].index(key_s)
      gdata[key_s] = value
    elsif key_s == 'action'
      gdata["_application_action"] = value
    elsif key_s == 'id'
      gdata["_application_id"] = value
    elsif key_s[0] != '_'
      gdata["_#{key_s}"] = value
    else
      gdata[key_s] = value
    end
  end
  gdata
end
notify!(data) click to toggle source
# File lib/semlog/rabbit_notifier.rb, line 64
def notify!(data)
  exchange.publish(data_to_json(data))
end