raygun4ruby 3.2.6 → 4.0.1

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.
Files changed (232) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +48 -0
  3. data/.gitignore +22 -21
  4. data/.rspec +1 -1
  5. data/Appraisals +19 -0
  6. data/CHANGELOG.md +173 -133
  7. data/Gemfile +4 -4
  8. data/LICENSE.txt +22 -22
  9. data/README.md +430 -420
  10. data/Rakefile +32 -27
  11. data/examples/sinatras_raygun.rb +17 -17
  12. data/gemfiles/rails_6.gemfile +9 -0
  13. data/gemfiles/rails_7.gemfile +10 -0
  14. data/gemfiles/rails_7_sidekiq_6.gemfile +10 -0
  15. data/lib/generators/raygun/install_generator.rb +26 -26
  16. data/lib/raygun/affected_user.rb +59 -59
  17. data/lib/raygun/breadcrumbs/breadcrumb.rb +34 -34
  18. data/lib/raygun/breadcrumbs/store.rb +86 -86
  19. data/lib/raygun/breadcrumbs.rb +34 -34
  20. data/lib/raygun/client.rb +313 -308
  21. data/lib/raygun/configuration.rb +202 -194
  22. data/lib/raygun/demo_exception.rb +22 -22
  23. data/lib/raygun/error.rb +10 -10
  24. data/lib/raygun/error_subscriber.rb +25 -0
  25. data/lib/raygun/javascript_tracker.rb +42 -42
  26. data/lib/raygun/middleware/breadcrumbs_store_initializer.rb +19 -19
  27. data/lib/raygun/middleware/javascript_exception_tracking.rb +40 -32
  28. data/lib/raygun/middleware/rack_exception_interceptor.rb +18 -18
  29. data/lib/raygun/middleware/rails_insert_affected_user.rb +26 -26
  30. data/lib/raygun/railtie.rb +47 -39
  31. data/lib/raygun/services/apply_whitelist_filter_to_payload.rb +27 -27
  32. data/lib/raygun/sidekiq.rb +61 -71
  33. data/lib/raygun/version.rb +3 -3
  34. data/lib/raygun.rb +197 -179
  35. data/lib/raygun4ruby.rb +1 -1
  36. data/lib/resque/failure/raygun.rb +25 -25
  37. data/lib/tasks/raygun.tasks +7 -7
  38. data/raygun4ruby.gemspec +43 -45
  39. data/spec/features/javascript_spec.rb +48 -48
  40. data/spec/rails_applications/6.1.4/Gemfile +56 -0
  41. data/spec/{dummy/README.rdoc → rails_applications/6.1.4/README.md} +24 -28
  42. data/spec/{dummy → rails_applications/6.1.4}/Rakefile +6 -6
  43. data/spec/rails_applications/6.1.4/app/assets/config/manifest.js +2 -0
  44. data/spec/{dummy → rails_applications/6.1.4}/app/assets/images/.keep +0 -0
  45. data/spec/{dummy → rails_applications/6.1.4}/app/assets/stylesheets/application.css +15 -15
  46. data/spec/rails_applications/6.1.4/app/channels/application_cable/channel.rb +4 -0
  47. data/spec/rails_applications/6.1.4/app/channels/application_cable/connection.rb +4 -0
  48. data/spec/rails_applications/6.1.4/app/controllers/application_controller.rb +2 -0
  49. data/spec/{dummy → rails_applications/6.1.4}/app/controllers/concerns/.keep +0 -0
  50. data/spec/{dummy → rails_applications/6.1.4}/app/controllers/home_controller.rb +4 -4
  51. data/spec/{dummy → rails_applications/6.1.4}/app/helpers/application_helper.rb +2 -2
  52. data/spec/rails_applications/6.1.4/app/javascript/channels/consumer.js +6 -0
  53. data/spec/rails_applications/6.1.4/app/javascript/channels/index.js +5 -0
  54. data/spec/rails_applications/6.1.4/app/javascript/packs/application.js +13 -0
  55. data/spec/rails_applications/6.1.4/app/jobs/application_job.rb +7 -0
  56. data/spec/rails_applications/6.1.4/app/mailers/application_mailer.rb +4 -0
  57. data/spec/rails_applications/6.1.4/app/models/application_record.rb +3 -0
  58. data/spec/{dummy/app/mailers → rails_applications/6.1.4/app/models/concerns}/.keep +0 -0
  59. data/spec/{dummy → rails_applications/6.1.4}/app/views/home/index.html.erb +3 -3
  60. data/spec/{dummy → rails_applications/6.1.4}/app/views/home/index.json.erb +1 -1
  61. data/spec/rails_applications/6.1.4/app/views/layouts/application.html.erb +13 -0
  62. data/spec/rails_applications/6.1.4/app/views/layouts/mailer.html.erb +13 -0
  63. data/spec/rails_applications/6.1.4/app/views/layouts/mailer.text.erb +1 -0
  64. data/spec/rails_applications/6.1.4/bin/rails +5 -0
  65. data/spec/rails_applications/6.1.4/bin/rake +5 -0
  66. data/spec/rails_applications/6.1.4/bin/setup +36 -0
  67. data/spec/rails_applications/6.1.4/bin/spring +14 -0
  68. data/spec/rails_applications/6.1.4/bin/yarn +17 -0
  69. data/spec/rails_applications/6.1.4/config/application.rb +22 -0
  70. data/spec/rails_applications/6.1.4/config/boot.rb +3 -0
  71. data/spec/rails_applications/6.1.4/config/cable.yml +10 -0
  72. data/spec/rails_applications/6.1.4/config/credentials.yml.enc +1 -0
  73. data/spec/{dummy → rails_applications/6.1.4}/config/database.yml +25 -25
  74. data/spec/{dummy → rails_applications/6.1.4}/config/environment.rb +5 -5
  75. data/spec/rails_applications/6.1.4/config/environments/development.rb +76 -0
  76. data/spec/rails_applications/6.1.4/config/environments/production.rb +120 -0
  77. data/spec/rails_applications/6.1.4/config/environments/test.rb +60 -0
  78. data/spec/rails_applications/6.1.4/config/initializers/application_controller_renderer.rb +8 -0
  79. data/spec/rails_applications/6.1.4/config/initializers/assets.rb +14 -0
  80. data/spec/rails_applications/6.1.4/config/initializers/backtrace_silencers.rb +8 -0
  81. data/spec/rails_applications/6.1.4/config/initializers/content_security_policy.rb +30 -0
  82. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/cookies_serializer.rb +5 -3
  83. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/filter_parameter_logging.rb +6 -4
  84. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/inflections.rb +16 -16
  85. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/mime_types.rb +4 -4
  86. data/spec/rails_applications/6.1.4/config/initializers/permissions_policy.rb +11 -0
  87. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/wrap_parameters.rb +14 -14
  88. data/spec/{dummy → rails_applications/6.1.4}/config/locales/en.yml +33 -23
  89. data/spec/rails_applications/6.1.4/config/master.key +1 -0
  90. data/spec/rails_applications/6.1.4/config/puma.rb +43 -0
  91. data/spec/rails_applications/6.1.4/config/routes.rb +4 -0
  92. data/spec/rails_applications/6.1.4/config/spring.rb +6 -0
  93. data/spec/rails_applications/6.1.4/config/storage.yml +34 -0
  94. data/spec/{dummy → rails_applications/6.1.4}/config.ru +6 -4
  95. data/spec/rails_applications/6.1.4/db/seeds.rb +7 -0
  96. data/spec/{dummy → rails_applications/6.1.4}/db/test.sqlite3 +0 -0
  97. data/spec/{dummy/app/models → rails_applications/6.1.4/lib/assets}/.keep +0 -0
  98. data/spec/{dummy/app/models/concerns → rails_applications/6.1.4/lib/tasks}/.keep +0 -0
  99. data/spec/rails_applications/6.1.4/package.json +11 -0
  100. data/spec/{dummy → rails_applications/6.1.4}/public/404.html +67 -67
  101. data/spec/{dummy → rails_applications/6.1.4}/public/422.html +67 -67
  102. data/spec/{dummy → rails_applications/6.1.4}/public/500.html +66 -66
  103. data/spec/{dummy/lib/assets/.keep → rails_applications/6.1.4/public/apple-touch-icon-precomposed.png} +0 -0
  104. data/spec/{dummy/lib/tasks/.keep → rails_applications/6.1.4/public/apple-touch-icon.png} +0 -0
  105. data/spec/{dummy → rails_applications/6.1.4}/public/favicon.ico +0 -0
  106. data/spec/rails_applications/6.1.4/public/robots.txt +1 -0
  107. data/spec/{dummy/log → rails_applications/6.1.4/storage}/.keep +0 -0
  108. data/spec/rails_applications/7.1.3/.dockerignore +37 -0
  109. data/spec/rails_applications/7.1.3/.gitattributes +9 -0
  110. data/spec/rails_applications/7.1.3/.gitignore +35 -0
  111. data/spec/rails_applications/7.1.3/.ruby-version +1 -0
  112. data/spec/rails_applications/7.1.3/Dockerfile +62 -0
  113. data/spec/rails_applications/7.1.3/Gemfile +67 -0
  114. data/spec/rails_applications/7.1.3/README.md +24 -0
  115. data/spec/rails_applications/7.1.3/Rakefile +6 -0
  116. data/spec/rails_applications/7.1.3/app/assets/config/manifest.js +4 -0
  117. data/spec/{dummy/test/controllers → rails_applications/7.1.3/app/assets/images}/.keep +0 -0
  118. data/spec/rails_applications/7.1.3/app/assets/stylesheets/application.css +15 -0
  119. data/spec/rails_applications/7.1.3/app/channels/application_cable/channel.rb +4 -0
  120. data/spec/rails_applications/7.1.3/app/channels/application_cable/connection.rb +4 -0
  121. data/spec/rails_applications/7.1.3/app/controllers/application_controller.rb +2 -0
  122. data/spec/{dummy/test/fixtures → rails_applications/7.1.3/app/controllers/concerns}/.keep +0 -0
  123. data/spec/rails_applications/7.1.3/app/controllers/home_controller.rb +2 -0
  124. data/spec/rails_applications/7.1.3/app/helpers/application_helper.rb +2 -0
  125. data/spec/rails_applications/7.1.3/app/helpers/home_helper.rb +2 -0
  126. data/spec/rails_applications/7.1.3/app/javascript/application.js +3 -0
  127. data/spec/rails_applications/7.1.3/app/javascript/controllers/application.js +9 -0
  128. data/spec/rails_applications/7.1.3/app/javascript/controllers/hello_controller.js +7 -0
  129. data/spec/rails_applications/7.1.3/app/javascript/controllers/index.js +11 -0
  130. data/spec/rails_applications/7.1.3/app/jobs/application_job.rb +7 -0
  131. data/spec/rails_applications/7.1.3/app/mailers/application_mailer.rb +4 -0
  132. data/spec/rails_applications/7.1.3/app/models/application_record.rb +3 -0
  133. data/spec/{dummy/test/helpers → rails_applications/7.1.3/app/models/concerns}/.keep +0 -0
  134. data/spec/rails_applications/7.1.3/app/views/home/index.html.erb +3 -0
  135. data/spec/rails_applications/7.1.3/app/views/home/index.json.erb +1 -0
  136. data/spec/rails_applications/7.1.3/app/views/layouts/application.html.erb +16 -0
  137. data/spec/rails_applications/7.1.3/app/views/layouts/mailer.html.erb +13 -0
  138. data/spec/rails_applications/7.1.3/app/views/layouts/mailer.text.erb +1 -0
  139. data/spec/rails_applications/7.1.3/bin/bundle +109 -0
  140. data/spec/rails_applications/7.1.3/bin/docker-entrypoint +8 -0
  141. data/spec/rails_applications/7.1.3/bin/importmap +4 -0
  142. data/spec/rails_applications/7.1.3/bin/rails +4 -0
  143. data/spec/rails_applications/7.1.3/bin/rake +4 -0
  144. data/spec/rails_applications/7.1.3/bin/setup +33 -0
  145. data/spec/rails_applications/7.1.3/config/application.rb +27 -0
  146. data/spec/rails_applications/7.1.3/config/boot.rb +4 -0
  147. data/spec/rails_applications/7.1.3/config/cable.yml +11 -0
  148. data/spec/rails_applications/7.1.3/config/credentials.yml.enc +1 -0
  149. data/spec/rails_applications/7.1.3/config/database.yml +25 -0
  150. data/spec/rails_applications/7.1.3/config/environment.rb +5 -0
  151. data/spec/rails_applications/7.1.3/config/environments/development.rb +76 -0
  152. data/spec/rails_applications/7.1.3/config/environments/production.rb +97 -0
  153. data/spec/rails_applications/7.1.3/config/environments/test.rb +64 -0
  154. data/spec/rails_applications/7.1.3/config/importmap.rb +7 -0
  155. data/spec/rails_applications/7.1.3/config/initializers/assets.rb +12 -0
  156. data/spec/rails_applications/7.1.3/config/initializers/content_security_policy.rb +25 -0
  157. data/spec/rails_applications/7.1.3/config/initializers/filter_parameter_logging.rb +8 -0
  158. data/spec/rails_applications/7.1.3/config/initializers/inflections.rb +16 -0
  159. data/spec/rails_applications/7.1.3/config/initializers/permissions_policy.rb +13 -0
  160. data/spec/rails_applications/7.1.3/config/locales/en.yml +31 -0
  161. data/spec/rails_applications/7.1.3/config/puma.rb +35 -0
  162. data/spec/rails_applications/7.1.3/config/routes.rb +11 -0
  163. data/spec/rails_applications/7.1.3/config/storage.yml +34 -0
  164. data/spec/rails_applications/7.1.3/config.ru +6 -0
  165. data/spec/rails_applications/7.1.3/db/seeds.rb +9 -0
  166. data/spec/{dummy/test/integration → rails_applications/7.1.3/lib/assets}/.keep +0 -0
  167. data/spec/{dummy/test/mailers → rails_applications/7.1.3/lib/tasks}/.keep +0 -0
  168. data/spec/rails_applications/7.1.3/public/404.html +67 -0
  169. data/spec/rails_applications/7.1.3/public/422.html +67 -0
  170. data/spec/rails_applications/7.1.3/public/500.html +66 -0
  171. data/spec/{dummy/test/models/.keep → rails_applications/7.1.3/public/apple-touch-icon-precomposed.png} +0 -0
  172. data/spec/{dummy/vendor/assets/javascripts/.keep → rails_applications/7.1.3/public/apple-touch-icon.png} +0 -0
  173. data/spec/{dummy/vendor/assets/stylesheets/.keep → rails_applications/7.1.3/public/favicon.ico} +0 -0
  174. data/spec/rails_applications/7.1.3/public/robots.txt +1 -0
  175. data/spec/rails_applications/7.1.3/storage/.keep +0 -0
  176. data/spec/rails_applications/7.1.3/test/application_system_test_case.rb +5 -0
  177. data/spec/rails_applications/7.1.3/test/channels/application_cable/connection_test.rb +13 -0
  178. data/spec/rails_applications/7.1.3/test/controllers/.keep +0 -0
  179. data/spec/rails_applications/7.1.3/test/controllers/home_controller_test.rb +7 -0
  180. data/spec/rails_applications/7.1.3/test/fixtures/files/.keep +0 -0
  181. data/spec/rails_applications/7.1.3/test/helpers/.keep +0 -0
  182. data/spec/rails_applications/7.1.3/test/integration/.keep +0 -0
  183. data/spec/rails_applications/7.1.3/test/mailers/.keep +0 -0
  184. data/spec/rails_applications/7.1.3/test/models/.keep +0 -0
  185. data/spec/rails_applications/7.1.3/test/system/.keep +0 -0
  186. data/spec/rails_applications/7.1.3/test/test_helper.rb +15 -0
  187. data/spec/rails_applications/7.1.3/vendor/.keep +0 -0
  188. data/spec/rails_applications/7.1.3/vendor/javascript/.keep +0 -0
  189. data/spec/rails_helper.rb +8 -4
  190. data/spec/raygun/breadcrumbs/breadcrumb_spec.rb +171 -171
  191. data/spec/raygun/breadcrumbs/store_spec.rb +170 -170
  192. data/spec/services/apply_whitelist_filter_to_payload_spec.rb +251 -251
  193. data/spec/spec_helper.rb +24 -24
  194. data/spec/support/fake_logger.rb +17 -17
  195. data/test/integration/client_test.rb +19 -19
  196. data/test/rails_helper.rb +6 -0
  197. data/test/test_helper.rb +76 -72
  198. data/test/unit/affected_user_test.rb +136 -136
  199. data/test/unit/client_test.rb +812 -812
  200. data/test/unit/configuration_test.rb +202 -206
  201. data/test/unit/error_subscriber_test.rb +43 -0
  202. data/test/unit/raygun_test.rb +106 -25
  203. data/test/unit/resque_failure_test.rb +27 -24
  204. data/test/unit/sidekiq_failure_test.rb +122 -32
  205. metadata +186 -125
  206. data/.travis.yml +0 -20
  207. data/spec/dummy/.gitignore +0 -17
  208. data/spec/dummy/Gemfile +0 -47
  209. data/spec/dummy/app/assets/config/manifest.js +0 -3
  210. data/spec/dummy/app/assets/javascripts/application.js +0 -13
  211. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  212. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  213. data/spec/dummy/bin/bundle +0 -3
  214. data/spec/dummy/bin/rails +0 -9
  215. data/spec/dummy/bin/rake +0 -9
  216. data/spec/dummy/bin/setup +0 -29
  217. data/spec/dummy/bin/spring +0 -17
  218. data/spec/dummy/config/application.rb +0 -26
  219. data/spec/dummy/config/boot.rb +0 -3
  220. data/spec/dummy/config/environments/development.rb +0 -41
  221. data/spec/dummy/config/environments/production.rb +0 -79
  222. data/spec/dummy/config/environments/test.rb +0 -42
  223. data/spec/dummy/config/initializers/assets.rb +0 -11
  224. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  225. data/spec/dummy/config/initializers/session_store.rb +0 -3
  226. data/spec/dummy/config/initializers/to_time_preserves_timezone.rb +0 -10
  227. data/spec/dummy/config/routes.rb +0 -58
  228. data/spec/dummy/config/secrets.yml +0 -22
  229. data/spec/dummy/db/seeds.rb +0 -7
  230. data/spec/dummy/public/robots.txt +0 -5
  231. data/spec/dummy/test/test_helper.rb +0 -10
  232. data/spec/raygun/raygun_spec.rb +0 -47
@@ -1,194 +1,202 @@
1
- module Raygun
2
- class Configuration
3
-
4
- def self.config_option(name)
5
- define_method(name) do
6
- read_value(name)
7
- end
8
-
9
- define_method("#{name}=") do |value|
10
- set_value(name, value)
11
- end
12
- end
13
-
14
- def self.proc_config_option(name)
15
- define_method(name) do |&block|
16
- set_value(name, block) unless block == nil
17
- read_value(name)
18
- end
19
-
20
- define_method("#{name}=") do |value|
21
- set_value(name, value)
22
- end
23
- end
24
-
25
- # Your Raygun API Key - this can be found on your dashboard at https://app.raygun.com
26
- config_option :api_key
27
-
28
- # Your JS Raygun API Key - Should be different to your api_key, it's best practice to separate your errors between front end and back end.
29
- config_option :js_api_key
30
-
31
- # Your JS Raygun API Version, defaults to latest as found on https://raygun.com/documentation/language-guides/javascript/crash-reporting/installation/
32
- config_option :js_api_version
33
-
34
- # Array of exception classes to ignore
35
- config_option :ignore
36
-
37
- # Version to use
38
- config_option :version
39
-
40
- # Custom Data to send with each exception
41
- proc_config_option :custom_data
42
-
43
- # Tags to send with each exception
44
- proc_config_option :tags
45
-
46
- # Logger to use when we find an exception :)
47
- config_option :logger
48
-
49
- # Should we actually report exceptions to Raygun? (Usually disabled in Development mode, for instance)
50
- config_option :enable_reporting
51
-
52
- # Failsafe logger (for exceptions that happen when we're attempting to report exceptions)
53
- config_option :failsafe_logger
54
-
55
- # Which controller method should we call to find out the affected user?
56
- config_option :affected_user_method
57
-
58
- # Mapping of methods for the affected user object - which methods should we call for user information
59
- config_option :affected_user_mapping
60
-
61
- # Which parameter keys should we filter out by default?
62
- proc_config_option :filter_parameters
63
-
64
- # Should we switch to a white listing mode for keys instead of the default blacklist?
65
- config_option :filter_payload_with_whitelist
66
-
67
- # If :filter_payload_with_whitelist is true, which keys should we whitelist?
68
- proc_config_option :whitelist_payload_shape
69
-
70
- # Hash of proxy settings - :address, :port (defaults to 80), :username and :password (both default to nil)
71
- config_option :proxy_settings
72
-
73
- # Set this to true to have raygun4ruby log the reason why it skips reporting an exception
74
- config_option :debug
75
-
76
- # Override this if you wish to connect to a different Raygun API than the standard one
77
- config_option :api_url
78
-
79
- # Should Raygun include the raw request body in the payload? This will not include
80
- # form submissions and will not be filtered by the blacklist
81
- config_option :record_raw_data
82
-
83
- # Should the exceptions to Raygun be sent asynchronously?
84
- config_option :send_in_background
85
-
86
- # How long to wait for the POST request to the API server before timing out
87
- config_option :error_report_send_timeout
88
-
89
- # Exception classes to ignore by default
90
- IGNORE_DEFAULT = ['ActiveRecord::RecordNotFound',
91
- 'ActionController::RoutingError',
92
- 'ActionController::InvalidAuthenticityToken',
93
- 'ActionDispatch::ParamsParser::ParseError',
94
- 'CGI::Session::CookieStore::TamperedWithCookie',
95
- 'ActionController::UnknownAction',
96
- 'AbstractController::ActionNotFound',
97
- 'Mongoid::Errors::DocumentNotFound']
98
-
99
- DEFAULT_FILTER_PARAMETERS = [ :password, :card_number, :cvv ]
100
-
101
- DEFAULT_WHITELIST_PAYLOAD_SHAPE_REQUEST = {
102
- hostName: true,
103
- url: true,
104
- httpMethod: true,
105
- iPAddress: true,
106
- queryString: true,
107
- headers: true,
108
- form: {}, # Set to empty hash so that it doesn't just filter out the whole thing, but instead filters out each individual param
109
- rawData: true
110
- }.freeze
111
- DEFAULT_WHITELIST_PAYLOAD_SHAPE = {
112
- machineName: true,
113
- version: true,
114
- error: true,
115
- userCustomData: true,
116
- tags: true,
117
- request: DEFAULT_WHITELIST_PAYLOAD_SHAPE_REQUEST
118
- }.freeze
119
-
120
- attr_reader :defaults
121
-
122
- def initialize
123
- @config_values = {}
124
-
125
- # set default attribute values
126
- @defaults = OpenStruct.new(
127
- ignore: IGNORE_DEFAULT,
128
- custom_data: {},
129
- tags: [],
130
- enable_reporting: true,
131
- affected_user_method: :current_user,
132
- affected_user_mapping: AffectedUser::DEFAULT_MAPPING,
133
- filter_parameters: DEFAULT_FILTER_PARAMETERS,
134
- filter_payload_with_whitelist: false,
135
- whitelist_payload_shape: DEFAULT_WHITELIST_PAYLOAD_SHAPE,
136
- proxy_settings: {},
137
- debug: false,
138
- api_url: 'https://api.raygun.com/',
139
- breadcrumb_level: :info,
140
- record_raw_data: false,
141
- send_in_background: false,
142
- error_report_send_timeout: 10
143
- )
144
- end
145
-
146
- def [](key)
147
- read_value(key)
148
- end
149
-
150
- def []=(key, value)
151
- set_value(key, value)
152
- end
153
-
154
- def silence_reporting
155
- !enable_reporting
156
- end
157
-
158
- def silence_reporting=(value)
159
- self.enable_reporting = !value
160
- end
161
-
162
- def breadcrumb_level
163
- read_value(:breadcrumb_level)
164
- end
165
-
166
- def breadcrumb_level=(value)
167
- if Raygun::Breadcrumbs::BREADCRUMB_LEVELS.include?(value)
168
- set_value(:breadcrumb_level, value)
169
- elsif read_value(:debug)
170
- Raygun.log("[Raygun.configuration] unknown breadcrumb level: #{value} not setting")
171
- end
172
- end
173
-
174
- def affected_user_identifier_methods
175
- Raygun.deprecation_warning("Please note: You should now user config.affected_user_method_mapping.Identifier instead of config.affected_user_identifier_methods")
176
- read_value(:affected_user_mapping)[:identifier]
177
- end
178
-
179
- private
180
-
181
- def read_value(name)
182
- if @config_values.has_key?(name)
183
- @config_values[name]
184
- else
185
- @defaults.send(name)
186
- end
187
- end
188
-
189
- def set_value(name, value)
190
- @config_values[name] = value
191
- end
192
-
193
- end
194
- end
1
+ module Raygun
2
+ class Configuration
3
+
4
+ def self.config_option(name)
5
+ define_method(name) do
6
+ read_value(name)
7
+ end
8
+
9
+ define_method("#{name}=") do |value|
10
+ set_value(name, value)
11
+ end
12
+ end
13
+
14
+ def self.proc_config_option(name)
15
+ define_method(name) do |&block|
16
+ set_value(name, block) unless block == nil
17
+ read_value(name)
18
+ end
19
+
20
+ define_method("#{name}=") do |value|
21
+ set_value(name, value)
22
+ end
23
+ end
24
+
25
+ # Your Raygun API Key - this can be found on your dashboard at https://app.raygun.com
26
+ config_option :api_key
27
+
28
+ # Your JS Raygun API Key - Should be different to your api_key, it's best practice to separate your errors between front end and back end.
29
+ config_option :js_api_key
30
+
31
+ # Your JS Raygun API Version, defaults to latest as found on https://raygun.com/documentation/language-guides/javascript/crash-reporting/installation/
32
+ config_option :js_api_version
33
+
34
+ # Array of exception classes to ignore
35
+ config_option :ignore
36
+
37
+ # Version to use
38
+ config_option :version
39
+
40
+ # Custom Data to send with each exception
41
+ proc_config_option :custom_data
42
+
43
+ # Tags to send with each exception
44
+ proc_config_option :tags
45
+
46
+ # Logger to use when we find an exception :)
47
+ config_option :logger
48
+
49
+ # Should we actually report exceptions to Raygun? (Usually disabled in Development mode, for instance)
50
+ config_option :enable_reporting
51
+
52
+ # Failsafe logger (for exceptions that happen when we're attempting to report exceptions)
53
+ config_option :failsafe_logger
54
+
55
+ # Which controller method should we call to find out the affected user?
56
+ config_option :affected_user_method
57
+
58
+ # Mapping of methods for the affected user object - which methods should we call for user information
59
+ config_option :affected_user_mapping
60
+
61
+ # Which parameter keys should we filter out by default?
62
+ proc_config_option :filter_parameters
63
+
64
+ # Should we switch to a white listing mode for keys instead of the default blacklist?
65
+ config_option :filter_payload_with_whitelist
66
+
67
+ # If :filter_payload_with_whitelist is true, which keys should we whitelist?
68
+ proc_config_option :whitelist_payload_shape
69
+
70
+ # Hash of proxy settings - :address, :port (defaults to 80), :username and :password (both default to nil)
71
+ config_option :proxy_settings
72
+
73
+ # Set this to true to have raygun4ruby log the reason why it skips reporting an exception
74
+ config_option :debug
75
+
76
+ # Override this if you wish to connect to a different Raygun API than the standard one
77
+ config_option :api_url
78
+
79
+ # Should Raygun include the raw request body in the payload? This will not include
80
+ # form submissions and will not be filtered by the blacklist
81
+ config_option :record_raw_data
82
+
83
+ # Should the exceptions to Raygun be sent asynchronously?
84
+ config_option :send_in_background
85
+
86
+ # How long to wait for the POST request to the API server before timing out
87
+ config_option :error_report_send_timeout
88
+
89
+ # Should we register an error handler with [Rails' built in API](https://edgeguides.rubyonrails.org/error_reporting.html)
90
+ config_option :register_rails_error_handler
91
+
92
+ # Should we track jobs that are retried in Sidekiq (ones that raise Sidekiq::JobRetry::Handled). Set to "false" to ignore.
93
+ config_option :track_retried_sidekiq_jobs
94
+
95
+ # Exception classes to ignore by default
96
+ IGNORE_DEFAULT = ['ActiveRecord::RecordNotFound',
97
+ 'ActionController::RoutingError',
98
+ 'ActionController::InvalidAuthenticityToken',
99
+ 'ActionDispatch::ParamsParser::ParseError',
100
+ 'CGI::Session::CookieStore::TamperedWithCookie',
101
+ 'ActionController::UnknownAction',
102
+ 'AbstractController::ActionNotFound',
103
+ 'Mongoid::Errors::DocumentNotFound',
104
+ 'Sidekiq::JobRetry::Skip']
105
+
106
+ DEFAULT_FILTER_PARAMETERS = [ :password, :card_number, :cvv ]
107
+
108
+ DEFAULT_WHITELIST_PAYLOAD_SHAPE_REQUEST = {
109
+ hostName: true,
110
+ url: true,
111
+ httpMethod: true,
112
+ iPAddress: true,
113
+ queryString: true,
114
+ headers: true,
115
+ form: {}, # Set to empty hash so that it doesn't just filter out the whole thing, but instead filters out each individual param
116
+ rawData: true
117
+ }.freeze
118
+ DEFAULT_WHITELIST_PAYLOAD_SHAPE = {
119
+ machineName: true,
120
+ version: true,
121
+ error: true,
122
+ userCustomData: true,
123
+ tags: true,
124
+ request: DEFAULT_WHITELIST_PAYLOAD_SHAPE_REQUEST
125
+ }.freeze
126
+
127
+ attr_reader :defaults
128
+
129
+ def initialize
130
+ @config_values = {}
131
+
132
+ # set default attribute values
133
+ @defaults = OpenStruct.new(
134
+ ignore: IGNORE_DEFAULT,
135
+ custom_data: {},
136
+ tags: [],
137
+ enable_reporting: true,
138
+ affected_user_method: :current_user,
139
+ affected_user_mapping: AffectedUser::DEFAULT_MAPPING,
140
+ filter_parameters: DEFAULT_FILTER_PARAMETERS,
141
+ filter_payload_with_whitelist: false,
142
+ whitelist_payload_shape: DEFAULT_WHITELIST_PAYLOAD_SHAPE,
143
+ proxy_settings: {},
144
+ debug: false,
145
+ api_url: 'https://api.raygun.com/',
146
+ breadcrumb_level: :info,
147
+ record_raw_data: false,
148
+ send_in_background: false,
149
+ error_report_send_timeout: 10,
150
+ track_retried_sidekiq_jobs: true
151
+ )
152
+ end
153
+
154
+ def [](key)
155
+ read_value(key)
156
+ end
157
+
158
+ def []=(key, value)
159
+ set_value(key, value)
160
+ end
161
+
162
+ def silence_reporting
163
+ !enable_reporting
164
+ end
165
+
166
+ def silence_reporting=(value)
167
+ self.enable_reporting = !value
168
+ end
169
+
170
+ def breadcrumb_level
171
+ read_value(:breadcrumb_level)
172
+ end
173
+
174
+ def breadcrumb_level=(value)
175
+ if Raygun::Breadcrumbs::BREADCRUMB_LEVELS.include?(value)
176
+ set_value(:breadcrumb_level, value)
177
+ elsif read_value(:debug)
178
+ Raygun.log("[Raygun.configuration] unknown breadcrumb level: #{value} not setting")
179
+ end
180
+ end
181
+
182
+ def affected_user_identifier_methods
183
+ Raygun.deprecation_warning("Please note: You should now user config.affected_user_method_mapping.Identifier instead of config.affected_user_identifier_methods")
184
+ read_value(:affected_user_mapping)[:identifier]
185
+ end
186
+
187
+ private
188
+
189
+ def read_value(name)
190
+ if @config_values.has_key?(name)
191
+ @config_values[name]
192
+ else
193
+ @defaults.send(name)
194
+ end
195
+ end
196
+
197
+ def set_value(name, value)
198
+ @config_values[name] = value
199
+ end
200
+
201
+ end
202
+ end
@@ -1,23 +1,23 @@
1
- module Raygun
2
-
3
- class ItWorksException < StandardError; end
4
-
5
- module DemoException
6
-
7
- def track_test_exception
8
- Raygun.configuration.silence_reporting = false
9
- raise ItWorksException.new("Woohoo! Your Raygun<->Ruby connection is set up correctly")
10
- rescue ItWorksException => e
11
- response = Raygun.track_exception(e)
12
-
13
- if response.success?
14
- puts "Success! Now go check your Raygun Dashboard"
15
- else
16
- puts "Oh-oh, something went wrong - double check your API key"
17
- puts "API Key - " << Raygun.configuration.api_key << ")"
18
- puts "API Response - " << response
19
- end
20
- end
21
-
22
- end
1
+ module Raygun
2
+
3
+ class ItWorksException < StandardError; end
4
+
5
+ module DemoException
6
+
7
+ def track_test_exception
8
+ Raygun.configuration.silence_reporting = false
9
+ raise ItWorksException.new("Woohoo! Your Raygun<->Ruby connection is set up correctly")
10
+ rescue ItWorksException => e
11
+ response = Raygun.track_exception(e)
12
+
13
+ if response.success?
14
+ puts "Success! Now go check your Raygun Crash Reporting dashboard"
15
+ else
16
+ puts "Oh-oh, something went wrong - double check your API key"
17
+ puts "API Key - " << Raygun.configuration.api_key << ")"
18
+ puts "API Response - " << response
19
+ end
20
+ end
21
+
22
+ end
23
23
  end
data/lib/raygun/error.rb CHANGED
@@ -1,10 +1,10 @@
1
- module Raygun
2
- class Error < StandardError
3
- attr_reader :raygun_custom_data
4
-
5
- def initialize(message, raygun_custom_data = {})
6
- super(message)
7
- @raygun_custom_data = raygun_custom_data
8
- end
9
- end
10
- end
1
+ module Raygun
2
+ class Error < StandardError
3
+ attr_reader :raygun_custom_data
4
+
5
+ def initialize(message, raygun_custom_data = {})
6
+ super(message)
7
+ @raygun_custom_data = raygun_custom_data
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ # Subscribes to errors using Rails' error reporting API
2
+ # https://edgeguides.rubyonrails.org/error_reporting.html
3
+ class Raygun::ErrorSubscriber
4
+ def report(error, handled:, severity:, context:, source: nil)
5
+ tags = context.delete(:tags) if context.is_a?(Hash)
6
+
7
+ data = {
8
+ custom_data: {
9
+ "rails.error": {
10
+ handled: handled,
11
+ severity: severity,
12
+ context: context,
13
+ source: source
14
+ },
15
+ },
16
+ tags: ["rails_error_reporter", *tags].compact
17
+ }
18
+
19
+ if source == "job.sidekiq" && defined?(Sidekiq)
20
+ Raygun::SidekiqReporter.call(error, data)
21
+ else
22
+ Raygun.track_exception(error, data)
23
+ end
24
+ end
25
+ end
@@ -1,42 +1,42 @@
1
- # Client for injecting JavaScript code for tracking front end exceptions
2
- # https://raygun.com/docs/languages/javascript
3
- module Raygun
4
- class JavaScriptTracker
5
- def head_html
6
- return unless js_api_key?
7
- [
8
- '<script type="text/javascript">',
9
- '!function(a,b,c,d,e,f,g,h){a.RaygunObject=e,a[e]=a[e]||function(){',
10
- '(a[e].o=a[e].o||[]).push(arguments)},f=b.createElement(c),g=b.getElementsByTagName(c)[0],',
11
- 'f.async=1,f.src=d,g.parentNode.insertBefore(f,g),h=a.onerror,a.onerror=function(b,c,d,f,g){',
12
- 'h&&h(b,c,d,f,g),g||(g=new Error(b)),a[e].q=a[e].q||[],a[e].q.push({',
13
- 'e:g})}}(window,document,"script","//cdn.raygun.io/raygun4js/' + js_api_version + 'raygun.min.js","rg4js");',
14
- '</script>'
15
- ].join('').html_safe
16
- end
17
-
18
- def body_html
19
- return unless js_api_key?
20
- [
21
- '<script type="text/javascript">',
22
- "rg4js('apiKey', '#{js_api_key}');",
23
- "rg4js('enableCrashReporting', true);",
24
- '</script>'
25
- ].join('').html_safe
26
- end
27
-
28
- private
29
-
30
- def js_api_key
31
- @js_api_key ||= Raygun.configuration.js_api_key
32
- end
33
-
34
- def js_api_version
35
- @js_api_version ||= Raygun.configuration.js_api_version ? "#{Raygun.configuration.js_api_version}/" : ''
36
- end
37
-
38
- def js_api_key?
39
- js_api_key.present?
40
- end
41
- end
42
- end
1
+ # Client for injecting JavaScript code for tracking front end exceptions
2
+ # https://raygun.com/docs/languages/javascript
3
+ module Raygun
4
+ class JavaScriptTracker
5
+ def head_html
6
+ return unless js_api_key?
7
+ [
8
+ '<script type="text/javascript">',
9
+ '!function(a,b,c,d,e,f,g,h){a.RaygunObject=e,a[e]=a[e]||function(){',
10
+ '(a[e].o=a[e].o||[]).push(arguments)},f=b.createElement(c),g=b.getElementsByTagName(c)[0],',
11
+ 'f.async=1,f.src=d,g.parentNode.insertBefore(f,g),h=a.onerror,a.onerror=function(b,c,d,f,g){',
12
+ 'h&&h(b,c,d,f,g),g||(g=new Error(b)),a[e].q=a[e].q||[],a[e].q.push({',
13
+ 'e:g})}}(window,document,"script","//cdn.raygun.io/raygun4js/' + js_api_version + 'raygun.min.js","rg4js");',
14
+ '</script>'
15
+ ].join('').html_safe
16
+ end
17
+
18
+ def body_html
19
+ return unless js_api_key?
20
+ [
21
+ '<script type="text/javascript">',
22
+ "rg4js('apiKey', '#{js_api_key}');",
23
+ "rg4js('enableCrashReporting', true);",
24
+ '</script>'
25
+ ].join('').html_safe
26
+ end
27
+
28
+ private
29
+
30
+ def js_api_key
31
+ @js_api_key ||= Raygun.configuration.js_api_key
32
+ end
33
+
34
+ def js_api_version
35
+ @js_api_version ||= Raygun.configuration.js_api_version ? "#{Raygun.configuration.js_api_version}/" : ''
36
+ end
37
+
38
+ def js_api_key?
39
+ js_api_key.present?
40
+ end
41
+ end
42
+ end
@@ -1,19 +1,19 @@
1
- module Raygun
2
- module Middleware
3
- class BreadcrumbsStoreInitializer
4
- def initialize(app)
5
- @app = app
6
- end
7
-
8
- def call(env)
9
- Breadcrumbs::Store.initialize
10
-
11
- begin
12
- @app.call(env)
13
- ensure
14
- Breadcrumbs::Store.clear
15
- end
16
- end
17
- end
18
- end
19
- end
1
+ module Raygun
2
+ module Middleware
3
+ class BreadcrumbsStoreInitializer
4
+ def initialize(app)
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ Breadcrumbs::Store.initialize
10
+
11
+ begin
12
+ @app.call(env)
13
+ ensure
14
+ Breadcrumbs::Store.clear
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end