class LogStash::Outputs::Sentry
Attributes
sentry_keys[RW]
Public Class Methods
sentry_key(name, field_default=nil, value_default=nil)
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 18 def self.sentry_key(name, field_default=nil, value_default=nil) name = name.to_s if name.is_a?(Symbol) @sentry_keys ||= [] @sentry_keys << name opts = { :validate => :string, :required => false, } config name, opts.merge(if field_default then {:default => field_default} else {} end) config "#{name}_value", opts.merge(if value_default then {:default => value_default} else {} end) end
Public Instance Methods
create_packet(event, timestamp)
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 101 def create_packet(event, timestamp) require 'securerandom' event_id = SecureRandom.uuid.gsub('-', '') packet = { # parameters required by sentry :event_id => event_id, :timestamp => timestamp.to_s, :logger => get(event, :_logger) || "logstash", :platform => get(event, :platform) || "other", } for key in LogStash::Outputs::Sentry.sentry_keys sentry_key = key.gsub(/^_/,'') next if packet[sentry_key]; value = get(event, key) packet[sentry_key] = value if value end return packet end
get(event, key)
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 77 def get(event, key) key = key.to_s if key.is_a?(Symbol) instance_variable_name = key.gsub(/\./, '') field = instance_variable_get("@#{instance_variable_name}") if field == '' ret = event.to_hash ret.delete('tags') return ret elsif field return event.get(field) if event.get(field) end value = instance_variable_get("@#{instance_variable_name}_value") return value # can be nil end
multi_receive(events)
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 95 def multi_receive(events) for event in events receive(event) end end
receive(event)
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 137 def receive(event) begin require 'time' timestamp = get(event, :timestamp) || Time.now sentry_packet = create_packet(event, timestamp) @logger.debug('Sentry packet', :sentry_packet => sentry_packet) send_packet(event, sentry_packet, timestamp) rescue Exception => e @logger.warn('Unhandled exception', :exception => e) end end
register()
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 74 def register end
send_packet(event, packet, timestamp)
click to toggle source
# File lib/logstash/outputs/sentry.rb, line 123 def send_packet(event, packet, timestamp) auth_header = "Sentry sentry_version=5," + "sentry_client=raven_logstash/0.4.0," + "sentry_timestamp=#{timestamp.to_i}," + "sentry_key=#{event.sprintf(@key)}," + "sentry_secret=#{event.sprintf(@secret)}" url = "#{event.sprintf(@url)}/#{event.sprintf(@project_id)}/store/" require 'http' response = HTTP.post(url, :body => packet.to_json, :headers => {:"X-Sentry-Auth" => auth_header}) raise "Sentry answered with #{response} and code #{response.code} to our request #{packet}" unless response.code == 200 end