alec-gem 2.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +74 -0
  4. data/.travis.yml +47 -0
  5. data/Gemfile +38 -0
  6. data/Gemfile.lock +215 -0
  7. data/LICENSE +201 -0
  8. data/README.md +132 -0
  9. data/Rakefile +29 -0
  10. data/alec-gem.gemspec +22 -0
  11. data/changelog.md +442 -0
  12. data/docs/Makefile +130 -0
  13. data/docs/breadcrumbs.rst +51 -0
  14. data/docs/conf.py +228 -0
  15. data/docs/config.rst +260 -0
  16. data/docs/context.rst +141 -0
  17. data/docs/index.rst +113 -0
  18. data/docs/install.rst +40 -0
  19. data/docs/integrations/heroku.rst +11 -0
  20. data/docs/integrations/index.rst +59 -0
  21. data/docs/integrations/puma.rst +30 -0
  22. data/docs/integrations/rack.rst +27 -0
  23. data/docs/integrations/rails.rst +62 -0
  24. data/docs/make.bat +155 -0
  25. data/docs/processors.rst +124 -0
  26. data/docs/sentry-doc-config.json +31 -0
  27. data/docs/usage.rst +176 -0
  28. data/exe/raven +32 -0
  29. data/lib/raven.rb +3 -0
  30. data/lib/raven/backtrace.rb +137 -0
  31. data/lib/raven/base.rb +106 -0
  32. data/lib/raven/breadcrumbs.rb +76 -0
  33. data/lib/raven/breadcrumbs/activesupport.rb +19 -0
  34. data/lib/raven/breadcrumbs/logger.rb +93 -0
  35. data/lib/raven/cli.rb +59 -0
  36. data/lib/raven/client.rb +142 -0
  37. data/lib/raven/configuration.rb +434 -0
  38. data/lib/raven/context.rb +43 -0
  39. data/lib/raven/event.rb +259 -0
  40. data/lib/raven/instance.rb +221 -0
  41. data/lib/raven/integrations/delayed_job.rb +58 -0
  42. data/lib/raven/integrations/rack-timeout.rb +19 -0
  43. data/lib/raven/integrations/rack.rb +139 -0
  44. data/lib/raven/integrations/rails.rb +79 -0
  45. data/lib/raven/integrations/rails/active_job.rb +59 -0
  46. data/lib/raven/integrations/rails/controller_methods.rb +13 -0
  47. data/lib/raven/integrations/rails/controller_transaction.rb +13 -0
  48. data/lib/raven/integrations/rails/overrides/debug_exceptions_catcher.rb +31 -0
  49. data/lib/raven/integrations/rails/overrides/streaming_reporter.rb +23 -0
  50. data/lib/raven/integrations/railties.rb +1 -0
  51. data/lib/raven/integrations/rake.rb +18 -0
  52. data/lib/raven/integrations/sidekiq.rb +87 -0
  53. data/lib/raven/integrations/tasks.rb +11 -0
  54. data/lib/raven/interface.rb +25 -0
  55. data/lib/raven/interfaces/exception.rb +15 -0
  56. data/lib/raven/interfaces/http.rb +16 -0
  57. data/lib/raven/interfaces/message.rb +20 -0
  58. data/lib/raven/interfaces/single_exception.rb +14 -0
  59. data/lib/raven/interfaces/stack_trace.rb +69 -0
  60. data/lib/raven/linecache.rb +41 -0
  61. data/lib/raven/logger.rb +19 -0
  62. data/lib/raven/processor.rb +15 -0
  63. data/lib/raven/processor/cookies.rb +26 -0
  64. data/lib/raven/processor/http_headers.rb +55 -0
  65. data/lib/raven/processor/post_data.rb +22 -0
  66. data/lib/raven/processor/removecircularreferences.rb +17 -0
  67. data/lib/raven/processor/removestacktrace.rb +24 -0
  68. data/lib/raven/processor/sanitizedata.rb +88 -0
  69. data/lib/raven/processor/utf8conversion.rb +52 -0
  70. data/lib/raven/transports.rb +15 -0
  71. data/lib/raven/transports/dummy.rb +16 -0
  72. data/lib/raven/transports/http.rb +68 -0
  73. data/lib/raven/utils/deep_merge.rb +22 -0
  74. data/lib/raven/utils/real_ip.rb +62 -0
  75. data/lib/raven/version.rb +5 -0
  76. data/lib/sentry-raven-without-integrations.rb +1 -0
  77. data/lib/sentry-raven.rb +1 -0
  78. data/pkg/sentry-raven-2.7.2.gem +0 -0
  79. metadata +143 -0
@@ -0,0 +1,141 @@
1
+ Context
2
+ =======
3
+
4
+ Additional context can be passed to the capture methods. This allows you
5
+ to record extra information that could help you identify the root cause of
6
+ the issue or who the error happened for.
7
+
8
+ .. sourcecode:: ruby
9
+
10
+ Raven.capture_message 'My Event!',
11
+ logger: 'logger',
12
+ extra: {
13
+ my_custom_variable: 'value'
14
+ },
15
+ tags: {
16
+ foo: 'bar'
17
+ }
18
+
19
+ The following attributes are available:
20
+
21
+ * ``logger``: the logger name to record this event under
22
+ * ``level``: a string representing the level of this event (fatal, error,
23
+ warning, info, debug)
24
+ * ``server_name``: the hostname of the server
25
+ * ``tags``: a mapping of tags describing this event
26
+ * ``extra``: a mapping of arbitrary context
27
+ * ``user``: a mapping of user context
28
+ * ``transaction``: An array of strings. The final element in the array represents the current transaction, e.g. "HelloController#hello_world" for a Rails controller.
29
+
30
+ Providing Request Context
31
+ -------------------------
32
+
33
+ Most of the time you're not actually calling out to Raven directly, but
34
+ you still want to provide some additional context. This lifecycle
35
+ generally constists of something like the following:
36
+
37
+ * Set some context via a middleware (e.g. the logged in user)
38
+ * Send all given context with any events during the request lifecycle
39
+ * Cleanup context
40
+
41
+ There are three primary methods for providing request context.
42
+
43
+ User Context
44
+ ~~~~~~~~~~~~
45
+
46
+ User context describes the current actor.
47
+
48
+ .. sourcecode:: ruby
49
+
50
+ # bind the logged in user
51
+ Raven.user_context(
52
+ # a unique ID which represents this user
53
+ id: current_user.id, # 1
54
+
55
+ # the actor's email address, if available
56
+ email: current_user.email, # "example@example.org"
57
+
58
+ # the actor's username, if available
59
+ username: current_user.username, # "foo"
60
+
61
+ # the actor's IP address, if available
62
+ ip_address: request.ip # '127.0.0.1'
63
+ )
64
+
65
+ When dealing with anonymous users you will still want to send basic user context to ensure Sentry can count them against the unique users:
66
+
67
+ .. sourcecode:: ruby
68
+
69
+ Raven.user_context(
70
+ # the actor's IP address, if available
71
+ ip_address: request.ip # '127.0.0.1'
72
+ )
73
+
74
+ Tags
75
+ ~~~~
76
+
77
+ You can provide a set of key/value pairs called tags which Sentry will index and aggregate. This will help you understand the distribution of issues, as well as enabling easy lookup via search.
78
+
79
+ .. sourcecode:: ruby
80
+
81
+ # tag the request with something interesting
82
+ Raven.tags_context(
83
+ language: I18n.locale, # "en-us"
84
+ timezone: current_user.time_zone # "PST"
85
+ )
86
+
87
+
88
+ Additional Context
89
+ ~~~~~~~~~~~~~~~~~~
90
+
91
+ In addition to the supported structured data of Sentry, you can provide additional context. This is a key/value mapping, where the values must be JSON compatible, but can be of a rich datatype.
92
+
93
+ .. sourcecode:: ruby
94
+
95
+ # provide a bit of additional context
96
+ Raven.extra_context(
97
+ happiness: 'very',
98
+ emoji: ['much']
99
+ )
100
+
101
+ Rack (HTTP) Context
102
+ ~~~~~~~~~~~~~~~~~~~
103
+
104
+ Additionally, if you're using Rack (without the middleware), you can
105
+ easily provide context with the ``rack_context`` helper:
106
+
107
+ .. sourcecode:: ruby
108
+
109
+ Raven.rack_context(env)
110
+
111
+ If you're using the Rack middleware, we've already taken care of cleanup
112
+ for you, otherwise you'll need to ensure you perform it manually:
113
+
114
+ .. sourcecode:: ruby
115
+
116
+ Raven::Context.clear!
117
+
118
+ Note: the rack and user context will perform a set operation, whereas tags
119
+ and extra context will merge with any existing request context.
120
+
121
+ Transactions
122
+ ~~~~~~~~~~~~
123
+
124
+ The "transaction" is intended to represent the action the event occurred during.
125
+ In Rack, this will be the request URL. In Rails, it's the controller name and
126
+ action ("HelloController#hello_world").
127
+
128
+ Transactions are modeled as a stack. The top item in the stack (i.e. the last
129
+ element of the array) will be used as the ``transaction`` for any events:
130
+
131
+ .. sourcecode:: ruby
132
+
133
+ Raven.context.transaction.push "User Import"
134
+ # import some users
135
+ Raven.context.transaction.pop
136
+
137
+ Transactions may also be overridden/set explicitly during event creation:
138
+
139
+ .. sourcecode:: ruby
140
+
141
+ Raven.capture_exception(exception, transaction: "User Import")
@@ -0,0 +1,113 @@
1
+ .. sentry:edition:: self
2
+
3
+ Raven Ruby
4
+ ==========
5
+
6
+ .. sentry:edition:: hosted, on-premise
7
+
8
+ .. class:: platform-ruby
9
+
10
+ Ruby
11
+ ====
12
+
13
+ Raven for Ruby is a client and integration layer for the Sentry error
14
+ reporting API. It supports Ruby 1.9.3 and 2.x.
15
+ JRuby support is provided but experimental.
16
+
17
+ Installation
18
+ ------------
19
+
20
+ Raven Ruby comes as a gem and is straightforward to install. If you are
21
+ using Bundler just add this to your ``Gemfile``:
22
+
23
+ .. sourcecode:: ruby
24
+
25
+ gem "sentry-raven"
26
+
27
+ For other means of installation see :doc:`install`.
28
+
29
+ Configuration
30
+ -------------
31
+
32
+ To use Raven Ruby all you need is your DSN. Like most Sentry libraries it
33
+ will honor the ``SENTRY_DSN`` environment variable. You can find it on
34
+ the project settings page under API Keys. You can either export it as
35
+ environment variable or manually configure it with ``Raven.configure``:
36
+
37
+ .. sourcecode:: ruby
38
+
39
+ Raven.configure do |config|
40
+ config.dsn = '___DSN___'
41
+ end
42
+
43
+ Reporting Failures
44
+ ------------------
45
+
46
+ If you use Rails, Rake, Sidekiq, etc, you're already done - no more
47
+ configuration required! Check :doc:`integrations/index` for more details on
48
+ other gems Sentry integrates with automatically.
49
+
50
+ Rack requires a little more setup: :doc:`integrations/rack`
51
+
52
+ Otherwise, Raven supports two methods of capturing exceptions:
53
+
54
+ .. sourcecode:: ruby
55
+
56
+ Raven.capture do
57
+ # capture any exceptions which happen during execution of this block
58
+ 1 / 0
59
+ end
60
+
61
+ begin
62
+ 1 / 0
63
+ rescue ZeroDivisionError => exception
64
+ Raven.capture_exception(exception)
65
+ end
66
+
67
+ Additional Context
68
+ ------------------
69
+
70
+ Much of the usefulness of Sentry comes from additional context data with
71
+ the events. Raven Ruby makes this very convenient by providing
72
+ methods to set thread local context data that is then submitted
73
+ automatically with all events.
74
+
75
+ There are three primary methods for providing request context:
76
+
77
+ .. sourcecode:: ruby
78
+
79
+ # bind the logged in user
80
+ Raven.user_context email: 'foo@example.com'
81
+
82
+ # tag the request with something interesting
83
+ Raven.tags_context interesting: 'yes'
84
+
85
+ # provide a bit of additional context
86
+ Raven.extra_context happiness: 'very'
87
+
88
+ For more information see :doc:`context`.
89
+
90
+ Deep Dive
91
+ ---------
92
+
93
+ Want to know more? We have a detailed documentation about all parts of
94
+ the library and the client integrations.
95
+
96
+
97
+ .. toctree::
98
+ :maxdepth: 2
99
+ :titlesonly:
100
+
101
+ install
102
+ config
103
+ usage
104
+
105
+ breadcrumbs
106
+ context
107
+ processors
108
+ integrations/index
109
+
110
+ Resources:
111
+
112
+ * `Bug Tracker <http://github.com/getsentry/raven-ruby/issues>`_
113
+ * `Github Project <http://github.com/getsentry/raven-ruby>`_
@@ -0,0 +1,40 @@
1
+ Installation
2
+ ============
3
+
4
+ Raven Ruby comes as a gem and is straightforward to install. If you are
5
+ using Bundler just add this to your ``Gemfile``:
6
+
7
+ .. sourcecode:: ruby
8
+
9
+ gem "sentry-raven"
10
+
11
+ Development Version
12
+ -------------------
13
+
14
+ If you want to install the development version from github:
15
+
16
+ .. sourcecode:: ruby
17
+
18
+ gem "sentry-raven", :github => "getsentry/raven-ruby"
19
+
20
+ Without Integrations
21
+ --------------------
22
+
23
+ If you wish to activate integrations manually (or don't want them
24
+ activated by default), require "raven/base" instead of "raven" or
25
+ "sentry-raven". In that case disable the requiring in the ``Gemfile``:
26
+
27
+ .. sourcecode:: ruby
28
+
29
+ gem "sentry-raven", :require => false
30
+
31
+ And in your initialization code:
32
+
33
+ .. sourcecode:: ruby
34
+
35
+ require "raven/base"
36
+ require "raven/integrations/rails"
37
+ require "raven/integrations/delayed_job"
38
+
39
+ This stops you from calling ``Raven.inject``, which is where all this
40
+ integration loading occurs.
@@ -0,0 +1,11 @@
1
+ Heroku
2
+ ======
3
+
4
+ Installation
5
+ ------------
6
+
7
+ Enable the ``runtime-dyno-metadata`` Heroku Labs feature in order to enable automated release detection:
8
+
9
+ ::
10
+
11
+ heroku labs:enable runtime-dyno-metadata -a myapp
@@ -0,0 +1,59 @@
1
+ Integrations
2
+ ============
3
+
4
+ For common environments and frameworks like Rails, Rake, Rack and others
5
+ Ruby Raven provides automatic integration for reporting. Most of the time
6
+ you don't need to change anything, although you can configure those
7
+ features if you want.
8
+
9
+ .. toctree::
10
+ :maxdepth: 1
11
+
12
+ rails
13
+ rack
14
+ puma
15
+ heroku
16
+
17
+ The following integrations are available:
18
+
19
+ * Sidekiq (``:sidekiq``)
20
+ * ``Delayed::Job`` (``:delayed_job``)
21
+ * Rake (``:rake``)
22
+ * Rack (``:rack``)
23
+ * Rails (``:railties``)
24
+
25
+
26
+ Manually using integrations
27
+ ---------------------------
28
+
29
+ Integrations are automatically loaded by default. This can be problematic if
30
+ the default integration behavior doesn't suit your projects' needs.
31
+
32
+ To explicitly include integrations:
33
+
34
+ .. sourcecode:: ruby
35
+
36
+ require 'sentry-raven-without-integrations'
37
+ Raven.inject_only(:railties, :rack, :rake)
38
+
39
+
40
+ To blacklist integrations:
41
+
42
+ .. sourcecode:: ruby
43
+
44
+ require 'sentry-raven-without-integrations'
45
+ Raven.inject_without(:sidekiq, :delayed_job)
46
+
47
+
48
+ If you're using bundler, then in your gemfile:
49
+
50
+ .. sourcecode:: ruby
51
+
52
+ gem 'sentry-raven', require: 'sentry-raven-without-integrations'
53
+
54
+
55
+ And in some sort of initializer:
56
+
57
+ .. sourcecode:: ruby
58
+
59
+ Raven.inject_without(:sidekiq)
@@ -0,0 +1,30 @@
1
+ Puma
2
+ ====
3
+
4
+ Installation
5
+ ------------
6
+
7
+ Install the SDK via Rubygems by adding it to your ``Gemfile``:
8
+
9
+ .. sourcecode:: ruby
10
+
11
+ gem "sentry-raven"
12
+
13
+ Configuration
14
+ -------------
15
+
16
+ Puma provides a config option for handling low level errors.
17
+
18
+ .. sourcecode:: ruby
19
+
20
+ # in your puma.rb config
21
+ lowlevel_error_handler do |ex, env|
22
+ Raven.capture_exception(
23
+ ex,
24
+ :message => ex.message,
25
+ :extra => { :puma => env },
26
+ :transaction => "Puma"
27
+ )
28
+ # note the below is just a Rack response
29
+ [500, {}, ["An error has occurred, and engineers have been informed. Please reload the page. If you continue to have problems, contact support@example.com\n"]]
30
+ end
@@ -0,0 +1,27 @@
1
+ Rack (Sinatra etc.)
2
+ ===================
3
+
4
+ Installation
5
+ ------------
6
+
7
+ Install the SDK via Rubygems by adding it to your ``Gemfile``:
8
+
9
+ .. sourcecode:: ruby
10
+
11
+ gem "sentry-raven"
12
+
13
+ Configuration
14
+ -------------
15
+
16
+ Add ``use Raven::Rack`` to your ``config.ru`` or other rackup file (this is
17
+ automatically inserted in Rails):
18
+
19
+ .. sourcecode:: ruby
20
+
21
+ require 'raven'
22
+
23
+ Raven.configure do |config|
24
+ config.dsn = '___DSN___'
25
+ end
26
+
27
+ use Raven::Rack
@@ -0,0 +1,62 @@
1
+ Ruby on Rails
2
+ =============
3
+
4
+ In Rails, all uncaught exceptions will be automatically reported.
5
+
6
+ We support Rails 4 and newer.
7
+
8
+ Installation
9
+ ------------
10
+
11
+ Install the SDK via Rubygems by adding it to your ``Gemfile``:
12
+
13
+ .. sourcecode:: ruby
14
+
15
+ gem "sentry-raven"
16
+
17
+ Configuration
18
+ -------------
19
+
20
+ Open up ``config/application.rb`` and configure the DSN, and any other :doc:`settings <../config>`
21
+ you need:
22
+
23
+ .. sourcecode:: ruby
24
+
25
+ Raven.configure do |config|
26
+ config.dsn = '___DSN___'
27
+ end
28
+
29
+ If you have added items to `Rails' log filtering
30
+ <http://guides.rubyonrails.org/action_controller_overview.html#parameters-filtering>`_,
31
+ you can also make sure that those items are not sent to Sentry:
32
+
33
+ .. sourcecode:: ruby
34
+
35
+ # in your application.rb:
36
+ config.filter_parameters << :password
37
+
38
+ # in an initializer, like sentry.rb
39
+ Raven.configure do |config|
40
+ config.sanitize_fields = Rails.application.config.filter_parameters.map(&:to_s)
41
+ end
42
+
43
+ Params and sessions
44
+ -------------------
45
+
46
+ .. sourcecode:: ruby
47
+
48
+ class ApplicationController < ActionController::Base
49
+ before_action :set_raven_context
50
+
51
+ private
52
+
53
+ def set_raven_context
54
+ Raven.user_context(id: session[:current_user_id]) # or anything else in session
55
+ Raven.extra_context(params: params.to_unsafe_h, url: request.url)
56
+ end
57
+ end
58
+
59
+ Caveats
60
+ -------
61
+
62
+ Currently, custom exception applications (`config.exceptions_app`) are not supported. If you are using a custom exception app, you must manually integrate Raven yourself.