Class: LogStash::Outputs::Rollbar

Inherits:
Base
  • Object
show all
Defined in:
lib/logstash/outputs/rollbar.rb

Overview

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.

Instance Method Summary collapse

Instance Method Details

#hash_recursiveObject



30
31
32
33
34
# File 'lib/logstash/outputs/rollbar.rb', line 30

def hash_recursive
  Hash.new do |hash, key|
    hash[key] = hash_recursive
  end
end

#receive(event) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/logstash/outputs/rollbar.rb', line 49

def receive(event)
  return unless output?(event)

  rb_item = hash_recursive
  rb_item['access_token'] = @access_token.value

  # 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{platform language framework context request person server client fingerprint 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']['body']['custom'] = data

  # ...and finally override the top level fields that have a specific meaning
  rb_item['data']['timestamp'] = event.timestamp.to_i
  rb_item['data']['level'] = @level
  rb_item['data']['environment'] = @environment
  rb_item['data']['body']['message']['body'] = event.sprintf(@format)

  rb_item['data']['notifier']['name'] = 'logstash'
  rb_item['data']['notifier']['version'] = '0.1.0'

  @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

#registerObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/logstash/outputs/rollbar.rb', line 37

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