honeybadger 5.14.1 → 5.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 27b739832fcd4e8ae2b9599d80079f072bdbe2db1d8790a86bcc08f368be54bf
4
- data.tar.gz: 3e3133dacf4749524276450c927a336544fc4d31ae0674f8fdfca17a5cb6311f
3
+ metadata.gz: 60300a5d8ccaecda5eeff8887f76c5c54dba5c4610539c4ff8865d1355a5c124
4
+ data.tar.gz: d057c93fc1a8d24f6fdb4a952d5b56cf8dbf0f3ee07466eaad38d3be2efcad13
5
5
  SHA512:
6
- metadata.gz: 186d0a1485cfc7e5584e63b84fb068b75dd87ee7f4fe4afd037e26cbf9ac5825d1df38d39b8e2ae3c65c42fc512b292cb1289156e676ab4b24af07769e6d2e4b
7
- data.tar.gz: cf6c9735ce7d7533376f2863d443084fa5218052f1c7eaa5e74395ae293491857fd423509dab7f1aa3436cdb2c43b57f77a6f366b599f97c505ea38ae2f10d0f
6
+ metadata.gz: 06cdba44a37870e7b2e51414efb9ac48f5e3dc8015403a7b40e3a12520f0d037ab77f90205ea85f610de2d9bee11b6b6d5bf63fcbfce6a8d296ef8d1aeec7af9
7
+ data.tar.gz: 6538734d781bd200445e9ac603baf2fbd3b91a0e723112cb79d7468a56baaadc38921fdd75dfd4bde8ad25a67e911e3c56020dcff54f49414066abd68c83dc9a
data/CHANGELOG.md CHANGED
@@ -1,6 +1,21 @@
1
1
  # Change Log
2
2
 
3
3
 
4
+ ## [5.15.0](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.14.2...v5.15.0) (2024-07-18)
5
+
6
+
7
+ ### Features
8
+
9
+ * define default events to ignore, allow for override ([#570](https://github.com/honeybadger-io/honeybadger-ruby/issues/570)) ([a6f2177](https://github.com/honeybadger-io/honeybadger-ruby/commit/a6f2177eb69b75eafef235768187ccf6b3a538f0))
10
+
11
+ ## [5.14.2](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.14.1...v5.14.2) (2024-07-17)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * add []= delegator ([#590](https://github.com/honeybadger-io/honeybadger-ruby/issues/590)) ([9f1d6b5](https://github.com/honeybadger-io/honeybadger-ruby/commit/9f1d6b55e88497c4c37659fdfaeaa163c7794672))
17
+ * add event method for cli backend test ([#588](https://github.com/honeybadger-io/honeybadger-ruby/issues/588)) ([1e047bb](https://github.com/honeybadger-io/honeybadger-ruby/commit/1e047bbcd17db676b96dd78eb918475e3a52ab1b))
18
+
4
19
  ## [5.14.1](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.14.0...v5.14.1) (2024-07-15)
5
20
 
6
21
 
@@ -404,7 +404,18 @@ module Honeybadger
404
404
  with_error_handling { hook.call(event) }
405
405
  end
406
406
 
407
- return if config.ignored_events.any? { |check| event.event_type&.match?(check) }
407
+ return if config.ignored_events.any? do |check|
408
+ with_error_handling do
409
+ check.all? do |keys, value|
410
+ if keys == [:event_type]
411
+ event.event_type&.match?(value)
412
+ elsif event.dig(*keys)
413
+ event.dig(*keys).to_s.match?(value)
414
+ end
415
+ end
416
+ end
417
+ end
418
+
408
419
  return if event.halted?
409
420
 
410
421
  events_worker.push(event.as_json)
@@ -13,6 +13,16 @@ module Honeybadger
13
13
  @notifications ||= Hash.new {|h,k| h[k] = [] }
14
14
  end
15
15
 
16
+ # The event list.
17
+ #
18
+ # @example
19
+ # Test.events # => [{}, {}, ...]
20
+ #
21
+ # @return [Array<Hash>] List of event payloads.
22
+ def self.events
23
+ @events ||= []
24
+ end
25
+
16
26
  # @api public
17
27
  # The check in list.
18
28
  #
@@ -37,6 +47,11 @@ module Honeybadger
37
47
  super
38
48
  end
39
49
 
50
+ def event(payload)
51
+ events << payload
52
+ super
53
+ end
54
+
40
55
  def check_in(id)
41
56
  check_ins << id
42
57
  super
@@ -24,11 +24,21 @@ module Honeybadger
24
24
  @callings ||= Hash.new {|h,k| h[k] = [] }
25
25
  end
26
26
 
27
+ def self.events
28
+ @events ||= []
29
+ end
30
+
27
31
  def notify(feature, payload)
28
32
  response = @backend.notify(feature, payload)
29
33
  self.class.callings[feature] << [payload, response]
30
34
  response
31
35
  end
36
+
37
+ def event(payload)
38
+ response = @backend.event(payload)
39
+ self.class.events << [payload, response]
40
+ response
41
+ end
32
42
  end
33
43
 
34
44
  def initialize(options)
@@ -31,6 +31,12 @@ module Honeybadger
31
31
  'Sinatra::NotFound',
32
32
  'Sidekiq::JobRetry::Skip'].map(&:freeze).freeze
33
33
 
34
+ IGNORE_EVENTS_DEFAULT = [
35
+ { event_type: 'sql.active_record', query: /^(begin|commit)( transaction)?$/i },
36
+ { event_type: 'sql.active_record', query: /(solid_queue|good_job)/i },
37
+ { event_type: 'process_action.action_controller', controller: 'Rails::HealthController' }
38
+ ].freeze
39
+
34
40
  DEVELOPMENT_ENVIRONMENTS = ['development', 'test', 'cucumber'].map(&:freeze).freeze
35
41
 
36
42
  DEFAULT_PATHS = ['honeybadger.yml', 'config/honeybadger.yml', "#{ENV['HOME']}/honeybadger.yml"].map(&:freeze).freeze
@@ -112,8 +118,13 @@ module Honeybadger
112
118
  type: Boolean
113
119
  },
114
120
  :'events.ignore' => {
115
- description: 'A list of events to ignore. Use a string to specify exact matches, or regex for more flexibility.',
116
- default: [],
121
+ description: 'A list of additional events to ignore. Use a hash to query nested payloads, match using a string or regex. Non-hash will match on the event_type.',
122
+ default: IGNORE_EVENTS_DEFAULT,
123
+ type: Array
124
+ },
125
+ :'events.ignore_only' => {
126
+ description: 'A list of events to ignore (overrides the default ignored events).',
127
+ default: nil,
117
128
  type: Array
118
129
  },
119
130
  plugins: {
@@ -192,10 +192,22 @@ module Honeybadger
192
192
  DEFAULTS[:'exceptions.ignore'] | Array(ignore)
193
193
  end
194
194
 
195
+ def raw_ignored_events
196
+ ignore_only = get(:'events.ignore_only')
197
+ return ignore_only if ignore_only
198
+ return DEFAULTS[:'events.ignore'] unless ignore = get(:'events.ignore')
199
+
200
+ DEFAULTS[:'events.ignore'] | Array(ignore)
201
+ end
202
+
195
203
  def ignored_events
196
- self[:'events.ignore'].map do |check|
197
- check.is_a?(String) ? /^#{check}$/ : check
198
- end
204
+ @ignored_events ||= raw_ignored_events.map do |check|
205
+ if check.is_a?(String) || check.is_a?(Regexp)
206
+ { [:event_type] => check }
207
+ elsif check.is_a?(Hash)
208
+ flat_hash(check).transform_keys! { |key_array| key_array.map(&:to_sym) }
209
+ end
210
+ end.compact
199
211
  end
200
212
 
201
213
  def ca_bundle_path
@@ -455,5 +467,14 @@ module Honeybadger
455
467
  end
456
468
  end
457
469
  end
470
+
471
+ # Converts a nested hash into a single layer where keys become arrays:
472
+ # ex: > flat_hash({ :nested => { :hash => "value" }})
473
+ # > { [:nested, :hash] => "value" }
474
+ def flat_hash(h,f=[],g={})
475
+ return g.update({ f=>h }) unless h.is_a? Hash
476
+ h.each { |k,r| flat_hash(r,f+[k],g) }
477
+ g
478
+ end
458
479
  end
459
480
  end
@@ -13,7 +13,7 @@ module Honeybadger
13
13
  # The payload data of the event
14
14
  attr_reader :payload
15
15
 
16
- def_delegator :payload, :[]
16
+ def_delegators :payload, :dig, :[], :[]=
17
17
 
18
18
  # @api private
19
19
  def initialize(event_type_or_payload, payload={})
@@ -66,7 +66,6 @@ module Honeybadger
66
66
 
67
67
  def process?(event, payload)
68
68
  return false if payload[:name] == "SCHEMA"
69
- return false if payload[:sql]&.match?(/^(begin|commit)( transaction)?$/i)
70
69
  true
71
70
  end
72
71
  end
@@ -2,7 +2,7 @@ module Honeybadger
2
2
  module Plugins
3
3
  module SolidQueue
4
4
  Plugin.register :solid_queue do
5
- requirement { defined?(::SolidQueue) }
5
+ requirement { config.load_plugin_insights?(:solid_queue) && defined?(::SolidQueue) }
6
6
 
7
7
  collect do
8
8
  if config.cluster_collection?(:solid_queue)
@@ -1,4 +1,4 @@
1
1
  module Honeybadger
2
2
  # The current String Honeybadger version.
3
- VERSION = '5.14.1'.freeze
3
+ VERSION = '5.15.0'.freeze
4
4
  end
@@ -228,9 +228,9 @@ module Honeybadger
228
228
  when 201
229
229
  host = config.get(:'connection.ui_host')
230
230
  if throttle = dec_throttle
231
- info { sprintf('Success ⚡ https://#{host}/notice/%s id=%s code=%s throttle=%s interval=%s', msg.id, msg.id, response.code, throttle, throttle_interval) }
231
+ info { sprintf('Success ⚡ https://%s/notice/%s id=%s code=%s throttle=%s interval=%s', host, msg.id, msg.id, response.code, throttle, throttle_interval) }
232
232
  else
233
- info { sprintf('Success ⚡ https://#{host}/notice/%s id=%s code=%s', msg.id, msg.id, response.code) }
233
+ info { sprintf('Success ⚡ https://%s/notice/%s id=%s code=%s', host, msg.id, msg.id, response.code) }
234
234
  end
235
235
  when :stubbed
236
236
  info { sprintf('Success ⚡ Development mode is enabled; this error will be reported if it occurs after you deploy your app. id=%s', msg.id) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybadger
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.1
4
+ version: 5.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Honeybadger Industries LLC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-15 00:00:00.000000000 Z
11
+ date: 2024-07-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Make managing application errors a more pleasant experience.
14
14
  email: