Class: LogStash::Outputs::Sentry
- Inherits:
-
Base
- Object
- Base
- LogStash::Outputs::Sentry
- Defined in:
- lib/logstash/outputs/sentry.rb
Class Attribute Summary collapse
-
.sentry_keys ⇒ Object
Returns the value of attribute sentry_keys.
Class Method Summary collapse
Instance Method Summary collapse
- #create_packet(event, timestamp) ⇒ Object
- #get(event, key) ⇒ Object
- #multi_receive(events) ⇒ Object
- #receive(event) ⇒ Object
- #register ⇒ Object
- #send_packet(event, packet, timestamp) ⇒ Object
Class Attribute Details
.sentry_keys ⇒ Object
Returns the value of attribute sentry_keys.
32 33 34 |
# File 'lib/logstash/outputs/sentry.rb', line 32 def sentry_keys @sentry_keys end |
Class Method Details
.sentry_key(name, field_default = nil, value_default = nil) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# 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 |
Instance Method Details
#create_packet(event, timestamp) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/logstash/outputs/sentry.rb', line 101 def create_packet(event, ) require 'securerandom' event_id = SecureRandom.uuid.gsub('-', '') packet = { # parameters required by sentry :event_id => event_id, :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) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# 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) ⇒ Object
95 96 97 98 99 |
# File 'lib/logstash/outputs/sentry.rb', line 95 def multi_receive(events) for event in events receive(event) end end |
#receive(event) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/logstash/outputs/sentry.rb', line 137 def receive(event) begin require 'time' = get(event, :timestamp) || Time.now sentry_packet = create_packet(event, ) @logger.debug('Sentry packet', :sentry_packet => sentry_packet) send_packet(event, sentry_packet, ) rescue Exception => e @logger.warn('Unhandled exception', :exception => e) end end |
#register ⇒ Object
74 75 |
# File 'lib/logstash/outputs/sentry.rb', line 74 def register end |
#send_packet(event, packet, timestamp) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/logstash/outputs/sentry.rb', line 123 def send_packet(event, packet, ) 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 |