rollbar 0.10.4 → 0.10.5
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.
- 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 [](https://travis-ci.org/rollbar/rollbar-gem)
|
1
|
+
# Rollbar notifier for Ruby [](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
|