sentry-raven 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sentry-raven might be problematic. Click here for more details.
- data/README.md +41 -12
- data/bin/raven +2 -15
- data/lib/raven.rb +7 -2
- data/lib/raven/backtrace.rb +7 -2
- data/lib/raven/cli.rb +62 -0
- data/lib/raven/client.rb +9 -3
- data/lib/raven/configuration.rb +3 -0
- data/lib/raven/context.rb +5 -3
- data/lib/raven/event.rb +13 -5
- data/lib/raven/interfaces/http.rb +3 -1
- data/lib/raven/rack.rb +4 -0
- data/lib/raven/railtie.rb +4 -0
- data/lib/raven/tasks.rb +10 -0
- data/lib/raven/transports/http.rb +4 -1
- data/lib/raven/version.rb +1 -1
- metadata +21 -19
data/README.md
CHANGED
@@ -16,7 +16,11 @@ gem "sentry-raven" #, :github => "getsentry/raven-ruby"
|
|
16
16
|
|
17
17
|
## Usage
|
18
18
|
|
19
|
-
|
19
|
+
The easiest way to configure Raven is by setting the ``SENTRY_DSN`` environment variable.
|
20
|
+
|
21
|
+
You'll find this value on your project settings page, and it should resemble something like ```https://secret:public@app.getsentry.com/9999```.
|
22
|
+
|
23
|
+
For alternative configuration methods, and other options see [Configuration](#configuration).
|
20
24
|
|
21
25
|
### Rails 3
|
22
26
|
|
@@ -93,13 +97,6 @@ The following attributes are available:
|
|
93
97
|
* `tags`: a mapping of [tags](https://www.getsentry.com/docs/tags/) describing this event
|
94
98
|
* `extra`: a mapping of arbitrary context
|
95
99
|
|
96
|
-
## Testing
|
97
|
-
|
98
|
-
```bash
|
99
|
-
$ bundle install
|
100
|
-
$ rake spec
|
101
|
-
```
|
102
|
-
|
103
100
|
## Configuration
|
104
101
|
|
105
102
|
### SENTRY_DSN
|
@@ -160,12 +157,44 @@ Raven.configure do |config|
|
|
160
157
|
end
|
161
158
|
```
|
162
159
|
|
163
|
-
##
|
160
|
+
## Testing Your Configuration
|
164
161
|
|
165
|
-
|
162
|
+
To ensure you've setup your configuration correctly we recommend running the
|
163
|
+
included rake task::
|
166
164
|
|
167
|
-
```
|
168
|
-
|
165
|
+
```bash
|
166
|
+
$ rake raven:test[https://public:secret@app.getsentry.com/3825]
|
167
|
+
Client configuration:
|
168
|
+
-> server: https://app.getsentry.com
|
169
|
+
-> project_id: 3825
|
170
|
+
-> public_key: public
|
171
|
+
-> secret_key: secret
|
172
|
+
|
173
|
+
Sending a test event:
|
174
|
+
-> event ID: 033c343c852b45c2a3add98e425ea4b4
|
175
|
+
|
176
|
+
Done!
|
177
|
+
```
|
178
|
+
|
179
|
+
A couple of things to note:
|
180
|
+
|
181
|
+
* This won't test your environment configuration. The test CLI forces the your
|
182
|
+
coniguration to represent itself as if it were running in the production env.
|
183
|
+
* If you're running within Rails (or anywhere else that will bootstrap the
|
184
|
+
rake environment), you should be able to omit the DSN argument.
|
185
|
+
|
186
|
+
## Contributing
|
187
|
+
|
188
|
+
### Bootstrap
|
189
|
+
|
190
|
+
```bash
|
191
|
+
$ bundle install
|
192
|
+
```
|
193
|
+
|
194
|
+
### Running the test suite
|
195
|
+
|
196
|
+
```bash
|
197
|
+
$ rake spec
|
169
198
|
```
|
170
199
|
|
171
200
|
Resources
|
data/bin/raven
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "raven"
|
4
|
+
require "raven/cli"
|
4
5
|
require "optparse"
|
5
6
|
|
6
7
|
options = {}
|
@@ -34,21 +35,7 @@ case ARGV[0]
|
|
34
35
|
if !dsn
|
35
36
|
puts "Usage: raven test <dsn>"
|
36
37
|
else
|
37
|
-
Raven
|
38
|
-
config.dsn = dsn
|
39
|
-
config.current_environment = 'production'
|
40
|
-
end
|
41
|
-
|
42
|
-
puts "Sending test event"
|
43
|
-
|
44
|
-
begin
|
45
|
-
1 / 0
|
46
|
-
rescue ZeroDivisionError => exception
|
47
|
-
Raven.capture_exception(exception)
|
48
|
-
end
|
49
|
-
|
50
|
-
puts "Done!"
|
51
|
-
|
38
|
+
Raven::CLI::test(dsn)
|
52
39
|
end
|
53
40
|
else
|
54
41
|
puts parser
|
data/lib/raven.rb
CHANGED
@@ -11,6 +11,7 @@ require 'raven/interfaces/exception'
|
|
11
11
|
require 'raven/interfaces/stack_trace'
|
12
12
|
require 'raven/interfaces/http'
|
13
13
|
require 'raven/processors/sanitizedata'
|
14
|
+
require 'raven/tasks'
|
14
15
|
|
15
16
|
require 'raven/railtie' if defined?(Rails::Railtie)
|
16
17
|
require 'raven/sidekiq' if defined?(Sidekiq)
|
@@ -104,14 +105,14 @@ module Raven
|
|
104
105
|
end
|
105
106
|
|
106
107
|
def capture_exception(exception, options={})
|
107
|
-
if evt = Event.
|
108
|
+
if evt = Event.from_exception(exception, options)
|
108
109
|
yield evt if block_given?
|
109
110
|
send(evt)
|
110
111
|
end
|
111
112
|
end
|
112
113
|
|
113
114
|
def capture_message(message, options={})
|
114
|
-
if evt = Event.
|
115
|
+
if evt = Event.from_message(message, options)
|
115
116
|
yield evt if block_given?
|
116
117
|
send(evt)
|
117
118
|
end
|
@@ -149,6 +150,10 @@ module Raven
|
|
149
150
|
self.context.extra.merge!(options)
|
150
151
|
end
|
151
152
|
|
153
|
+
def rack_context(env)
|
154
|
+
self.context.rack_env = env
|
155
|
+
end
|
156
|
+
|
152
157
|
# For cross-language compat
|
153
158
|
alias :captureException :capture_exception
|
154
159
|
alias :captureMessage :capture_message
|
data/lib/raven/backtrace.rb
CHANGED
@@ -11,7 +11,7 @@ module Raven
|
|
11
11
|
# regexp (optionnally allowing leading X: for windows support)
|
12
12
|
INPUT_FORMAT = %r{^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in `([^']+)')?$}.freeze
|
13
13
|
|
14
|
-
APP_DIRS_PATTERN =
|
14
|
+
APP_DIRS_PATTERN = /^(bin|app|config|lib|test)/
|
15
15
|
|
16
16
|
# The file portion of the line (such as app/models/user.rb)
|
17
17
|
attr_reader :file
|
@@ -37,13 +37,18 @@ module Raven
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def in_app
|
40
|
-
if self.file
|
40
|
+
if (project_root && self.file.start_with?(project_root)) ||
|
41
|
+
(self.file =~ APP_DIRS_PATTERN)
|
41
42
|
true
|
42
43
|
else
|
43
44
|
false
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
def project_root
|
49
|
+
@project_root ||= Raven.configuration.project_root && Raven.configuration.project_root.to_s
|
50
|
+
end
|
51
|
+
|
47
52
|
# Reconstructs the line in a readable fashion
|
48
53
|
def to_s
|
49
54
|
"#{file}:#{number}:in `#{method}'"
|
data/lib/raven/cli.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'raven'
|
2
|
+
|
3
|
+
module Raven
|
4
|
+
class CLI
|
5
|
+
def self.test(dsn=nil)
|
6
|
+
require 'logger'
|
7
|
+
|
8
|
+
logger = ::Logger.new(STDOUT)
|
9
|
+
logger.level = ::Logger::ERROR
|
10
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
11
|
+
"-> #{msg}\n"
|
12
|
+
end
|
13
|
+
|
14
|
+
Raven.configuration.logger = logger
|
15
|
+
|
16
|
+
if dsn then
|
17
|
+
Raven.configuration.dsn = dsn
|
18
|
+
end
|
19
|
+
|
20
|
+
# wipe out env settings to ensure we send the event
|
21
|
+
if !Raven.configuration.send_in_current_environment? then
|
22
|
+
env_name = Raven.coniguration.environments[0]
|
23
|
+
puts "Setting environment to #{env_name}"
|
24
|
+
Raven.configuration.current_environment = env_name
|
25
|
+
end
|
26
|
+
|
27
|
+
if !Raven.configuration.server then
|
28
|
+
puts "Your client is not configured!"
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
puts "Client configuration:"
|
33
|
+
['server', 'project_id', 'public_key', 'secret_key'].each do |key|
|
34
|
+
if !Raven.configuration[key] then
|
35
|
+
puts "Missing configuration for #{key}"
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
puts "-> #{key}: #{Raven.configuration[key]}"
|
39
|
+
end
|
40
|
+
puts ""
|
41
|
+
|
42
|
+
puts "Sending a test event:"
|
43
|
+
|
44
|
+
begin
|
45
|
+
1 / 0
|
46
|
+
rescue ZeroDivisionError => exception
|
47
|
+
evt = Raven.capture_exception(exception)
|
48
|
+
end
|
49
|
+
|
50
|
+
if evt then
|
51
|
+
puts "-> event ID: #{evt.id}"
|
52
|
+
else
|
53
|
+
puts ""
|
54
|
+
puts "An error occurred while attempting to send the event."
|
55
|
+
exit 1
|
56
|
+
end
|
57
|
+
|
58
|
+
puts ""
|
59
|
+
puts "Done!"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/raven/client.rb
CHANGED
@@ -22,7 +22,10 @@ module Raven
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def send(event)
|
25
|
-
|
25
|
+
if !configuration.send_in_current_environment?
|
26
|
+
Raven.logger.debug "Event not sent due to excluded environment: #{configuration.current_environment}"
|
27
|
+
return
|
28
|
+
end
|
26
29
|
|
27
30
|
# Set the project ID correctly
|
28
31
|
event.project = self.configuration.project_id
|
@@ -32,9 +35,12 @@ module Raven
|
|
32
35
|
begin
|
33
36
|
transport.send(generate_auth_header(encoded_data), encoded_data,
|
34
37
|
:content_type => content_type)
|
35
|
-
rescue
|
36
|
-
Raven.logger.error "Unable to record event with remote Sentry server"
|
38
|
+
rescue => e
|
39
|
+
Raven.logger.error "Unable to record event with remote Sentry server (#{e.class} - #{e.message})"
|
40
|
+
return
|
37
41
|
end
|
42
|
+
|
43
|
+
return event
|
38
44
|
end
|
39
45
|
|
40
46
|
private
|
data/lib/raven/configuration.rb
CHANGED
@@ -52,6 +52,9 @@ module Raven
|
|
52
52
|
# Should the SSL certificate of the server be verified?
|
53
53
|
attr_accessor :ssl_verification
|
54
54
|
|
55
|
+
# Ssl settings passed direactly to faraday's ssl option
|
56
|
+
attr_accessor :ssl
|
57
|
+
|
55
58
|
attr_reader :current_environment
|
56
59
|
|
57
60
|
# The Faraday adapter to be used. Will default to Net::HTTP when not set.
|
data/lib/raven/context.rb
CHANGED
data/lib/raven/event.rb
CHANGED
@@ -57,6 +57,12 @@ module Raven
|
|
57
57
|
|
58
58
|
block.call(self) if block
|
59
59
|
|
60
|
+
if !self[:http] && context.rack_env
|
61
|
+
self.interface :http do |int|
|
62
|
+
int.from_rack(context.rack_env)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
60
66
|
# Some type coercion
|
61
67
|
@timestamp = @timestamp.strftime('%Y-%m-%dT%H:%M:%S') if @timestamp.is_a?(Time)
|
62
68
|
@level = LOG_LEVELS[@level.to_s.downcase] if @level.is_a?(String) || @level.is_a?(Symbol)
|
@@ -110,7 +116,7 @@ module Raven
|
|
110
116
|
data
|
111
117
|
end
|
112
118
|
|
113
|
-
def self.
|
119
|
+
def self.from_exception(exc, options={}, &block)
|
114
120
|
configuration = options[:configuration] || Raven.configuration
|
115
121
|
if exc.is_a?(Raven::Error)
|
116
122
|
# Try to prevent error reporting loops
|
@@ -150,7 +156,7 @@ module Raven
|
|
150
156
|
end
|
151
157
|
end
|
152
158
|
|
153
|
-
def self.
|
159
|
+
def self.from_message(message, options={})
|
154
160
|
new(options) do |evt|
|
155
161
|
evt.message = message
|
156
162
|
evt.level = options[:level] || :error
|
@@ -173,7 +179,7 @@ module Raven
|
|
173
179
|
|
174
180
|
def get_culprit(frames)
|
175
181
|
lastframe = frames.reverse.detect { |f| f.in_app } || frames.last
|
176
|
-
"#{lastframe.filename} in #{lastframe.function}" if lastframe
|
182
|
+
"#{lastframe.filename} in #{lastframe.function} at line #{lastframe.lineno}" if lastframe
|
177
183
|
end
|
178
184
|
|
179
185
|
def parse_exception(exception)
|
@@ -186,8 +192,10 @@ module Raven
|
|
186
192
|
|
187
193
|
# For cross-language compat
|
188
194
|
class << self
|
189
|
-
alias :captureException :
|
190
|
-
alias :captureMessage :
|
195
|
+
alias :captureException :from_exception
|
196
|
+
alias :captureMessage :from_message
|
197
|
+
alias :capture_exception :from_exception
|
198
|
+
alias :capture_message :from_message
|
191
199
|
end
|
192
200
|
|
193
201
|
private
|
@@ -31,7 +31,9 @@ module Raven
|
|
31
31
|
# Header
|
32
32
|
http_key = key[5..key.length-1].split('_').map{|s| s.capitalize}.join('-')
|
33
33
|
self.headers[http_key] = value.to_s
|
34
|
-
|
34
|
+
elsif ['CONTENT_TYPE', 'CONTENT_LENGTH'].include? key
|
35
|
+
self.headers[key.capitalize] = value.to_s
|
36
|
+
elsif ['REMOTE_ADDR', 'SERVER_NAME', 'SERVER_PORT'].include? key
|
35
37
|
# Environment
|
36
38
|
self.env[key] = value.to_s
|
37
39
|
end
|
data/lib/raven/rack.rb
CHANGED
data/lib/raven/railtie.rb
CHANGED
data/lib/raven/tasks.rb
ADDED
@@ -27,9 +27,12 @@ module Raven
|
|
27
27
|
|
28
28
|
Raven.logger.debug "Raven HTTP Transport connecting to #{self.configuration.server}"
|
29
29
|
|
30
|
+
ssl_configuration = self.configuration.ssl || {}
|
31
|
+
ssl_configuration[:verify] = self.configuration.ssl_verification if self.configuration.ssl_verification
|
32
|
+
|
30
33
|
conn = Faraday.new(
|
31
34
|
:url => self.configuration[:server],
|
32
|
-
:ssl =>
|
35
|
+
:ssl => ssl_configuration
|
33
36
|
) do |builder|
|
34
37
|
builder.adapter(*adapter)
|
35
38
|
end
|
data/lib/raven/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sentry-raven
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-05-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: faraday
|
17
|
-
requirement: &
|
17
|
+
requirement: &70216994650660 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 0.7.6
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70216994650660
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: uuidtools
|
28
|
-
requirement: &
|
28
|
+
requirement: &70216994650180 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70216994650180
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: multi_json
|
39
|
-
requirement: &
|
39
|
+
requirement: &70216994649560 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,21 +44,21 @@ dependencies:
|
|
44
44
|
version: '1.0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70216994649560
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: hashie
|
50
|
-
requirement: &
|
50
|
+
requirement: &70216994648520 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: 1.1.0
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70216994648520
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rake
|
61
|
-
requirement: &
|
61
|
+
requirement: &70216994648060 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70216994648060
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
|
-
requirement: &
|
72
|
+
requirement: &70216994647080 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '2.10'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70216994647080
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: simplecov
|
83
|
-
requirement: &
|
83
|
+
requirement: &70216994646440 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *70216994646440
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: coveralls
|
94
|
-
requirement: &
|
94
|
+
requirement: &70216994645920 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *70216994645920
|
103
103
|
description:
|
104
104
|
email: noah@coderanger.net
|
105
105
|
executables:
|
@@ -110,6 +110,7 @@ extra_rdoc_files:
|
|
110
110
|
- LICENSE
|
111
111
|
files:
|
112
112
|
- lib/raven/backtrace.rb
|
113
|
+
- lib/raven/cli.rb
|
113
114
|
- lib/raven/client.rb
|
114
115
|
- lib/raven/configuration.rb
|
115
116
|
- lib/raven/context.rb
|
@@ -129,6 +130,7 @@ files:
|
|
129
130
|
- lib/raven/rails/middleware/debug_exceptions_catcher.rb
|
130
131
|
- lib/raven/railtie.rb
|
131
132
|
- lib/raven/sidekiq.rb
|
133
|
+
- lib/raven/tasks.rb
|
132
134
|
- lib/raven/transports/http.rb
|
133
135
|
- lib/raven/transports/udp.rb
|
134
136
|
- lib/raven/transports.rb
|