rollbar 0.10.4 → 0.10.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +3 -0
- data/README.md +135 -66
- data/THANKS.md +2 -0
- data/lib/generators/rollbar/templates/initializer.rb +5 -0
- data/lib/rollbar/configuration.rb +10 -0
- data/lib/rollbar/delay/sidekiq.rb +21 -0
- data/lib/rollbar/version.rb +1 -1
- data/spec/rollbar_spec.rb +22 -0
- metadata +3 -2
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
# Rollbar [![Build Status](https://secure.travis-ci.org/rollbar/rollbar-gem.png?branch=master)](https://travis-ci.org/rollbar/rollbar-gem)
|
1
|
+
# Rollbar notifier for Ruby [![Build Status](https://secure.travis-ci.org/rollbar/rollbar-gem.png?branch=master)](https://travis-ci.org/rollbar/rollbar-gem)
|
2
2
|
|
3
|
-
Ruby gem for reporting exceptions, errors, and log messages to [Rollbar](https://rollbar.com).
|
3
|
+
Ruby gem for reporting exceptions, errors, and log messages to [Rollbar](https://rollbar.com).
|
4
|
+
|
5
|
+
<!-- Sub:[TOC] -->
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -10,43 +12,57 @@ Add this line to your application's Gemfile:
|
|
10
12
|
|
11
13
|
And then execute:
|
12
14
|
|
13
|
-
|
15
|
+
```bash
|
16
|
+
$ bundle install
|
17
|
+
```
|
14
18
|
|
15
19
|
Or install it yourself as:
|
16
20
|
|
17
|
-
|
21
|
+
```bash
|
22
|
+
$ gem install rollbar
|
23
|
+
```
|
18
24
|
|
19
25
|
Then, run the following command from your rails root:
|
20
26
|
|
21
|
-
|
27
|
+
```bash
|
28
|
+
$ rails generate rollbar POST_SERVER_ITEM_ACCESS_TOKEN
|
29
|
+
```
|
22
30
|
|
23
|
-
That will create the file
|
31
|
+
That will create the file ```config/initializers/rollbar.rb```, which holds the configuration values (currently just your access token). Make sure you're using the ```post_server_item``` access token.
|
24
32
|
|
25
33
|
If you want to store your access token outside of your repo, run the same command without arguments:
|
26
34
|
|
27
|
-
|
35
|
+
```bash
|
36
|
+
$ rails generate rollbar
|
37
|
+
```
|
28
38
|
|
29
|
-
Then, create an environment variable
|
39
|
+
Then, create an environment variable ```ROLLBAR_ACCESS_TOKEN``` and set it to your server-side access token.
|
30
40
|
|
31
|
-
|
41
|
+
```bash
|
42
|
+
$ export ROLLBAR_ACCESS_TOKEN=POST_SERVER_ITEM_ACCESS_TOKEN
|
43
|
+
```
|
32
44
|
|
33
|
-
|
34
|
-
|
35
|
-
$ heroku config:add ROLLBAR_ACCESS_TOKEN=your-rollbar-post_server_item-token
|
45
|
+
### For Heroku users
|
36
46
|
|
37
|
-
|
47
|
+
```bash
|
48
|
+
$ heroku config:add ROLLBAR_ACCESS_TOKEN=POST_SERVER_ITEM_ACCESS_TOKEN
|
49
|
+
```
|
38
50
|
|
39
51
|
That's all you need to use Rollbar with Rails.
|
40
52
|
|
53
|
+
## Test your installation
|
54
|
+
|
41
55
|
To confirm that it worked, run:
|
42
56
|
|
43
|
-
|
57
|
+
```bash
|
58
|
+
$ rake rollbar:test
|
59
|
+
```
|
44
60
|
|
45
61
|
This will raise an exception within a test request; if it works, you'll see a stacktrace in the console, and the exception will appear in the Rollbar dashboard.
|
46
62
|
|
47
63
|
## Manually reporting exceptions and messages
|
48
64
|
|
49
|
-
To report a caught exception to Rollbar, simply call
|
65
|
+
To report a caught exception to Rollbar, simply call ```Rollbar.report_exception```:
|
50
66
|
|
51
67
|
```ruby
|
52
68
|
begin
|
@@ -79,55 +95,72 @@ Rollbar.report_message("Login successful")
|
|
79
95
|
Rollbar.report_message("Login successful", "info", :user => @user)
|
80
96
|
```
|
81
97
|
|
98
|
+
## Data sanitization (scrubbing)
|
82
99
|
|
83
|
-
|
100
|
+
By default, the notifier will "scrub" the following fields from requests before sending to Rollbar
|
101
|
+
|
102
|
+
- ```:passwd```
|
103
|
+
- ```:password```
|
104
|
+
- ```:password_confirmation```
|
105
|
+
- ```:secret```
|
106
|
+
- ```:confirm_password```
|
107
|
+
- ```:password_confirmation```
|
108
|
+
- ```:secret_token```
|
84
109
|
|
85
|
-
|
110
|
+
If a request contains one of these fields, the value will be replaced with a ```"*"``` before being sent.
|
86
111
|
|
87
|
-
|
112
|
+
Additional fields can be scrubbed by updating ```Rollbar.configuration.scrub_fields```:
|
88
113
|
|
89
114
|
```ruby
|
90
|
-
|
115
|
+
# scrub out the "user_password" field
|
116
|
+
Rollbar.configuration.scrub_fields |= [:user_password]
|
91
117
|
```
|
92
118
|
|
93
|
-
|
119
|
+
## Person tracking
|
120
|
+
|
121
|
+
Rollbar will send information about the current user (called a "person" in Rollbar parlance) along with each error report, when available. This works by calling the ```current_user``` controller method. The return value should be an object with an ```id``` method and, optionally, ```username``` and ```email``` methods.
|
122
|
+
|
123
|
+
If the gem should call a controller method besides ```current_user```, add the following in ```config/initializers/rollbar.rb```:
|
94
124
|
|
95
125
|
```ruby
|
96
|
-
|
97
|
-
config.person_username_method = "user_name" # default is "username"
|
98
|
-
config.person_email_method = "email_address" # default is "email"
|
126
|
+
config.person_method = "my_current_user"
|
99
127
|
```
|
100
128
|
|
129
|
+
If the methods to extract the ```id```, ```username```, and ```email``` from the object returned by the ```person_method``` have other names, configure like so in ```config/initializers/rollbar.rb```:
|
130
|
+
|
131
|
+
```ruby
|
132
|
+
config.person_id_method = "user_id" # default is "id"
|
133
|
+
config.person_username_method = "user_name" # default is "username"
|
134
|
+
config.person_email_method = "email_address" # default is "email"
|
135
|
+
```
|
101
136
|
|
102
137
|
## Including additional runtime data
|
103
138
|
|
104
|
-
You can provide a lambda that will be called for each exception or message report.
|
139
|
+
You can provide a lambda that will be called for each exception or message report. ```custom_data_method``` should be a lambda that takes no arguments and returns a hash.
|
105
140
|
|
106
|
-
Add the following in
|
141
|
+
Add the following in ```config/initializers/rollbar.rb```:
|
107
142
|
|
108
143
|
```ruby
|
109
|
-
|
110
|
-
|
111
|
-
|
144
|
+
config.custom_data_method = lambda {
|
145
|
+
{ :some_key => :some_value, :complex_key => {:a => 1, :b => [2, 3, 4]} }
|
146
|
+
}
|
112
147
|
```
|
113
148
|
|
114
149
|
This data will appear in the Occurrences tab and on the Occurrence Detail pages in the Rollbar interface.
|
115
150
|
|
116
|
-
|
117
151
|
## Exception level filters
|
118
152
|
|
119
|
-
By default, all exceptions reported through
|
120
|
-
|
121
|
-
- ActiveRecord::RecordNotFound
|
122
|
-
- AbstractController::ActionNotFound
|
123
|
-
- ActionController::RoutingError
|
153
|
+
By default, all exceptions reported through ```Rollbar.report_exception()``` are reported at the "error" level, except for the following, which are reported at "warning" level:
|
124
154
|
|
125
|
-
|
155
|
+
- ```ActiveRecord::RecordNotFound```
|
156
|
+
- ```AbstractController::ActionNotFound```
|
157
|
+
- ```ActionController::RoutingError```
|
126
158
|
|
159
|
+
If you'd like to customize this list, see the example code in ```config/initializers/rollbar.rb```. Supported levels: "critical", "error", "warning", "info", "debug", "ignore". Set to "ignore" to cause the exception not to be reported at all.
|
127
160
|
|
128
161
|
## Silencing exceptions at runtime
|
129
162
|
|
130
|
-
If you just want to disable exception reporting for a single block, use
|
163
|
+
If you just want to disable exception reporting for a single block, use ```Rollbar.silenced```:
|
131
164
|
|
132
165
|
```ruby
|
133
166
|
Rollbar.silenced {
|
@@ -135,67 +168,104 @@ Rollbar.silenced {
|
|
135
168
|
}
|
136
169
|
```
|
137
170
|
|
138
|
-
|
139
171
|
## Asynchronous reporting
|
140
172
|
|
141
|
-
By default, all messages are reported synchronously. You can enable asynchronous reporting
|
173
|
+
By default, all messages are reported synchronously. You can enable asynchronous reporting with [girl_friday](https://github.com/mperham/girl_friday) or [Sidekiq](https://github.com/mperham/sidekiq).
|
174
|
+
|
175
|
+
### Using girl_friday
|
176
|
+
|
177
|
+
Add the following in ```config/initializers/rollbar.rb```:
|
142
178
|
|
143
179
|
```ruby
|
144
|
-
|
180
|
+
config.use_async = true
|
145
181
|
```
|
146
182
|
|
147
|
-
|
183
|
+
Asynchronous reporting falls back to Threading if girl_friday is not installed.
|
184
|
+
|
185
|
+
### Using Sidekiq
|
186
|
+
|
187
|
+
Add the following in ```config/initializers/rollbar.rb```:
|
188
|
+
|
189
|
+
```ruby
|
190
|
+
config.use_sidekiq = true
|
191
|
+
```
|
148
192
|
|
149
|
-
You can supply
|
193
|
+
You can also supply custom Sidekiq options:
|
150
194
|
|
151
195
|
```ruby
|
152
|
-
|
153
|
-
Thread.new { Rollbar.process_payload(payload) }
|
154
|
-
}
|
196
|
+
config.use_sidekiq = { 'queue' => 'my_queue' }
|
155
197
|
```
|
156
198
|
|
157
|
-
|
199
|
+
Start the redis server:
|
200
|
+
|
201
|
+
```bash
|
202
|
+
$ redis-server
|
203
|
+
```
|
204
|
+
|
205
|
+
Start Sidekiq from the root directory of your Rails app and declare the name of your queue. Unless you've configured otherwise, the queue name is "rollbar":
|
206
|
+
|
207
|
+
```bash
|
208
|
+
$ bundle exec sidekiq -q rollbar
|
209
|
+
```
|
158
210
|
|
211
|
+
### Using another handler
|
212
|
+
|
213
|
+
You can supply your own handler using ```config.async_handler```. The handler should schedule the payload for later processing (i.e. with a delayed_job, in a resque queue, etc.) and should itself return immediately. For example:
|
214
|
+
|
215
|
+
```ruby
|
216
|
+
config.async_handler = Proc.new { |payload|
|
217
|
+
Thread.new { Rollbar.process_payload(payload) }
|
218
|
+
}
|
219
|
+
```
|
220
|
+
|
221
|
+
Make sure you pass ```payload``` to ```Rollbar.process_payload``` in your own implementation.
|
159
222
|
|
160
223
|
## Using with rollbar-agent
|
161
224
|
|
162
|
-
For even more asynchrony, you can configure the gem to write to a file instead of sending the payload to Rollbar servers directly. [rollbar-agent](https://github.com/rollbar/rollbar-agent) can then be hooked up to this file to actually send the payload across. To enable, add the following in
|
225
|
+
For even more asynchrony, you can configure the gem to write to a file instead of sending the payload to Rollbar servers directly. [rollbar-agent](https://github.com/rollbar/rollbar-agent) can then be hooked up to this file to actually send the payload across. To enable, add the following in ```config/initializers/rollbar.rb```:
|
163
226
|
|
164
227
|
```ruby
|
165
|
-
|
166
|
-
|
167
|
-
|
228
|
+
config.write_to_file = true
|
229
|
+
# optional, defaults to "#{AppName}.rollbar"
|
230
|
+
config.filepath = '/path/to/file.rollbar' #should end in '.rollbar' for use with rollbar-agent
|
168
231
|
```
|
169
232
|
|
170
233
|
For this to work, you'll also need to set up rollbar-agent--see its docs for details.
|
171
234
|
|
172
|
-
|
173
235
|
## Deploy Tracking with Capistrano
|
174
236
|
|
175
|
-
Add the following to
|
237
|
+
Add the following to ```deploy.rb```:
|
176
238
|
|
177
239
|
```ruby
|
178
240
|
require 'rollbar/capistrano'
|
179
|
-
set :rollbar_token, '
|
241
|
+
set :rollbar_token, 'POST_SERVER_ITEM_ACCESS_TOKEN'
|
180
242
|
```
|
181
243
|
|
182
244
|
Available options:
|
183
245
|
|
184
|
-
|
185
|
-
|
246
|
+
<dl>
|
247
|
+
<dt>rollbar_token</dt>
|
248
|
+
<dd>The same project access token as you used for the ```rails generate rollbar``` command; find it in ```config/initializers/rollbar.rb```. (It's repeated here for performance reasons, so the rails environment doesn't have to be initialized.)
|
249
|
+
</dd>
|
250
|
+
<dt>rollbar_env</dt>
|
251
|
+
<dd>Deploy environment name
|
252
|
+
|
253
|
+
Default: ```rails_env```
|
254
|
+
|
255
|
+
</dd>
|
256
|
+
</dl>
|
186
257
|
|
187
|
-
For
|
258
|
+
For ```capistrano/multistage```, try:
|
188
259
|
|
189
260
|
```ruby
|
190
261
|
set(:rollbar_env) { stage }
|
191
262
|
```
|
192
263
|
|
193
|
-
|
194
264
|
## Counting specific gems as in-project code
|
195
265
|
|
196
|
-
In the Rollbar interface, stacktraces are shown with in-project code expanded and other code collapsed. Stack frames are counted as in-project if they occur in a file that is inside of the `configuration.root` (automatically set to
|
266
|
+
In the Rollbar interface, stacktraces are shown with in-project code expanded and other code collapsed. Stack frames are counted as in-project if they occur in a file that is inside of the `configuration.root` (automatically set to ```Rails.root``` if you're using Rails). The collapsed sections can be expanded by clicking on them.
|
197
267
|
|
198
|
-
If you want code from some specific gems to start expanded as well, you can configure this in
|
268
|
+
If you want code from some specific gems to start expanded as well, you can configure this in ```config/initializers/rollbar.rb```:
|
199
269
|
|
200
270
|
```ruby
|
201
271
|
Rollbar.configure do |config |
|
@@ -204,10 +274,9 @@ Rollbar.configure do |config |
|
|
204
274
|
end
|
205
275
|
```
|
206
276
|
|
207
|
-
|
208
277
|
## Using with Goalie
|
209
278
|
|
210
|
-
If you're using [Goalie](https://github.com/obvio171/goalie) for custom error pages, you may need to explicitly add
|
279
|
+
If you're using [Goalie](https://github.com/obvio171/goalie) for custom error pages, you may need to explicitly add ```require 'goalie'``` to ```config/application.rb``` (in addition to ```require 'goalie/rails'```) so that the monkeypatch will work. (This will be obvious if it is needed because your app won't start up: you'll see a cryptic error message about ```Goalie::CustomErrorPages.render_exception``` not being defined.)
|
211
280
|
|
212
281
|
|
213
282
|
## Using with Resque
|
@@ -217,20 +286,20 @@ Check out [resque-rollbar](https://github.com/CrowdFlower/resque-rollbar) for us
|
|
217
286
|
|
218
287
|
## Using with Zeus
|
219
288
|
|
220
|
-
Some users have reported problems with Zeus when
|
289
|
+
Some users have reported problems with Zeus when ```rake``` was not explicitly included in their Gemfile. If the zeus server fails to start after installing the rollbar gem, try explicitly adding ```gem 'rake'``` to your ```Gemfile```. See [this thread](https://github.com/rollbar/rollbar-gem/issues/30) for more information.
|
221
290
|
|
222
291
|
|
223
292
|
## Help / Support
|
224
293
|
|
225
|
-
If you run into any issues, please email us at
|
294
|
+
If you run into any issues, please email us at [support@rollbar.com](mailto:support@rollbar.com)
|
226
295
|
|
227
296
|
|
228
297
|
## Contributing
|
229
298
|
|
230
299
|
1. Fork it
|
231
|
-
2. Create your feature branch (
|
232
|
-
3. Commit your changes (
|
233
|
-
4. Push to the branch (
|
300
|
+
2. Create your feature branch (```git checkout -b my-new-feature```)
|
301
|
+
3. Commit your changes (```git commit -am 'Added some feature'```)
|
302
|
+
4. Push to the branch (```git push origin my-new-feature```)
|
234
303
|
5. Create new Pull Request
|
235
304
|
|
236
|
-
We're using RSpec for testing. Run the test suite with
|
305
|
+
We're using RSpec for testing. Run the test suite with ```rake spec```. Tests for pull requests are appreciated but not required. (If you don't include a test, we'll write one before merging.)
|
data/THANKS.md
CHANGED
@@ -4,8 +4,10 @@ Huge thanks to the following contributors (by github username). For the most up-
|
|
4
4
|
|
5
5
|
- [arr-ee](https://github.com/arr-ee)
|
6
6
|
- [dimko](https://github.com/dimko)
|
7
|
+
- [fabsays](https://github.com/fabsays)
|
7
8
|
- [firstbanco](https://github.com/firstbanco)
|
8
9
|
- [ixti](https://github.com/ixti)
|
10
|
+
- [jeremyvdw](https://github.com/jeremyvdw)
|
9
11
|
- [johnknott](https://github.com/johnknott)
|
10
12
|
- [JoshuaOSHickman](https://github.com/JoshuaOSHickman)
|
11
13
|
- [juggler](https://github.com/juggler)
|
@@ -36,4 +36,9 @@ Rollbar.configure do |config|
|
|
36
36
|
# config.async_handler = Proc.new { |payload|
|
37
37
|
# Thread.new { Rollbar.process_payload(payload) }
|
38
38
|
# }
|
39
|
+
|
40
|
+
# Enable delayed reporting (using Sidekiq)
|
41
|
+
# config.use_sidekiq = true
|
42
|
+
# You can supply custom Sidekiq options:
|
43
|
+
# config.use_sidekiq = { 'queue' => 'my_queue' }
|
39
44
|
end
|
@@ -21,6 +21,7 @@ module Rollbar
|
|
21
21
|
attr_accessor :person_email_method
|
22
22
|
attr_accessor :root
|
23
23
|
attr_accessor :scrub_fields
|
24
|
+
attr_accessor :use_sidekiq
|
24
25
|
attr_accessor :use_async
|
25
26
|
attr_accessor :use_eventmachine
|
26
27
|
attr_accessor :web_base
|
@@ -52,11 +53,20 @@ module Rollbar
|
|
52
53
|
@scrub_fields = [:passwd, :password, :password_confirmation, :secret,
|
53
54
|
:confirm_password, :password_confirmation, :secret_token]
|
54
55
|
@use_async = false
|
56
|
+
@use_sidekiq = false
|
55
57
|
@use_eventmachine = false
|
56
58
|
@web_base = DEFAULT_WEB_BASE
|
57
59
|
@write_to_file = false
|
58
60
|
end
|
59
61
|
|
62
|
+
def use_sidekiq=(value)
|
63
|
+
if value
|
64
|
+
require 'rollbar/delay/sidekiq' if defined?(Sidekiq)
|
65
|
+
@use_async = true
|
66
|
+
@async_handler = Rollbar::Delay::Sidekiq.method(:handle)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
60
70
|
def use_eventmachine=(value)
|
61
71
|
require 'em-http-request' if value
|
62
72
|
@use_eventmachine = value
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
|
3
|
+
module Rollbar
|
4
|
+
module Delay
|
5
|
+
class Sidekiq
|
6
|
+
OPTIONS = { 'queue' => 'rollbar', 'class' => self.name }.freeze
|
7
|
+
|
8
|
+
def self.handle(payload)
|
9
|
+
item = @use_sidekiq.is_a?(Hash) ? OPTIONS.merge(@use_sidekiq) : OPTIONS
|
10
|
+
|
11
|
+
::Sidekiq::Client.push item.merge('args' => [payload])
|
12
|
+
end
|
13
|
+
|
14
|
+
include ::Sidekiq::Worker
|
15
|
+
|
16
|
+
def perform(*args)
|
17
|
+
Rollbar.process_payload(*args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/rollbar/version.rb
CHANGED
data/spec/rollbar_spec.rb
CHANGED
@@ -290,6 +290,28 @@ describe Rollbar do
|
|
290
290
|
config.async_handler = Rollbar.method(:default_async_handler)
|
291
291
|
end
|
292
292
|
end
|
293
|
+
|
294
|
+
it "should send the payload to sidekiq delayer" do
|
295
|
+
module Rollbar
|
296
|
+
module Delay
|
297
|
+
class Sidekiq
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
Rollbar::Delay::Sidekiq.should_receive(:handle).with(anything)
|
303
|
+
|
304
|
+
Rollbar.configure do |config|
|
305
|
+
config.use_sidekiq = { 'queue' => 'test_queue' }
|
306
|
+
end
|
307
|
+
|
308
|
+
Rollbar.report_exception(@exception)
|
309
|
+
|
310
|
+
Rollbar.configure do |config|
|
311
|
+
config.use_async = false
|
312
|
+
config.async_handler = Rollbar.method(:default_async_handler)
|
313
|
+
end
|
314
|
+
end
|
293
315
|
end
|
294
316
|
|
295
317
|
context 'message_data' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rollbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- lib/rollbar/better_errors.rb
|
135
135
|
- lib/rollbar/capistrano.rb
|
136
136
|
- lib/rollbar/configuration.rb
|
137
|
+
- lib/rollbar/delay/sidekiq.rb
|
137
138
|
- lib/rollbar/delayed_job.rb
|
138
139
|
- lib/rollbar/exception_reporter.rb
|
139
140
|
- lib/rollbar/goalie.rb
|