class LogStash::Two::Outputs::Rollbar

The Rollbar output will send events to the Rollbar event monitoring service. The only required field is a Rollbar project access token with post_server_item permissions. If you're already using Rollbar to report errors directly from your applications, you can use the same token.

Public Instance Methods

hash_recursive() click to toggle source
# File lib/logstash/two/outputs/rollbar.rb, line 36
def hash_recursive
  Hash.new do |hash, key|
    hash[key] = hash_recursive
  end
end
receive(event) click to toggle source
# File lib/logstash/two/outputs/rollbar.rb, line 55
def receive(event)
  return unless output?(event)

  rb_item = hash_recursive

  # We'll want to remove fields from data without removing them from the original event
  data = JSON.parse(event.to_json)

  #
  # If logstash has created 'rollbar' fields, we'll use those to populate the item...
  #
  if data['rollbar']

    merge_keys = %w{access_token client context environment fingerprint format framework
                    language level person platform request server title uuid }
    merge_keys.each do |key|
      data['rollbar'][key] && rb_item['data'][key] = data['rollbar'][key]
    end
    data.delete('rollbar')
  end

  # ...then put whatever's left in 'custom'...
  rb_item['data']['custom'] = data

  # ...and finally override the fields that have a specific meaning
  rb_item['data']['timestamp'] = event.timestamp.to_i
  rb_item['data']['level'] = @level unless rb_item['data'].has_key?('level')
  rb_item['data']['environment'] = @environment unless rb_item['data'].has_key?('environment')

  rb_item['data']['notifier']['name'] = 'logstash'
  rb_item['data']['notifier']['version'] = Gem.loaded_specs["logstash-two-output-rollbar"].version

  # Construct the message body using either:
  #
  # - The default format string defined above "%{message}"
  # - The format string specified in the rollbar plugin config section
  # - The format string specified in the [rollbar][format] event field
  #
  format = rb_item['data'].has_key?('format') ? rb_item['data']['format'] : @format
  rb_item['data']['body']['message']['body'] = event.sprintf(format)

  # Treat the [rollbar][access_token] field as a special case, since we don't need to
  # include it more than once in the Rollbar item
  #
  if rb_item['data'].has_key?('access_token')
    rb_item['access_token'] = rb_item['data']['access_token']
    rb_item['data'].delete('access_token')
  else
    rb_item['access_token'] = @access_token.value
  end


  @logger.debug("Rollbar Item", :rb_item => rb_item)

  begin
    request = Net::HTTP::Post.new(@rb_uri.path)
    request.body = JSON.dump(rb_item)
    @logger.debug("Rollbar Request", :request => request.body)
    response = @client.request(request)
    @logger.debug("Rollbar Response", :response => response.body)

  rescue Exception => e
    @logger.warn("Rollbar Exception", :rb_error => e.backtrace)
  end
end
register() click to toggle source
# File lib/logstash/two/outputs/rollbar.rb, line 43
def register
  require 'net/https'
  require 'uri'
  @rb_uri = URI.parse(@endpoint)
  @client = Net::HTTP.new(@rb_uri.host, @rb_uri.port)
  if @rb_uri.scheme == "https"
    @client.use_ssl = true
    @client.verify_mode = OpenSSL::SSL::VERIFY_PEER
  end
end