honeybadger 5.12.0 → 5.13.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3af996859bb642a3538e9d55e4a0e69bfa6221c7096f3d27c6729bd2ab7cb6b
4
- data.tar.gz: '06482049c556f1723d29aa07a392867760f58cc751abfc3cc9dd23e2f70702bb'
3
+ metadata.gz: 02da7e28bdfb138d80a3e8e3e591d45383406fac1676ed04f0df139125e56247
4
+ data.tar.gz: 2c08c2e0e4e42ea9b7532c09f28f8d1c60a4944dab1e0d1ebc277becb58f8947
5
5
  SHA512:
6
- metadata.gz: c6a336e2b8a4934e2a052a738f6b413cf6c9909daec09c465ac5d25ff7a324dfa89455e3103ea20231a8cf07e9ab65fe4bead675954cf5f5bf069def03c205f8
7
- data.tar.gz: 627d74ee326242416ab420d46690b2813f35a608347c2b2cf5f8e1ec3618d446edee4ed925cf2274caa97b65759f1d6584770fa8889bed077f35fa7ee5456c16
6
+ metadata.gz: cd07b8f3bfe423336690f00dc80addfb4fbda2db27bbcca0739204888b1565455ea09cbb6d5e643162f00c247ce09ff867e3eab0d71d7f59ca8d39bfc26164cd
7
+ data.tar.gz: 93e0ad66065c9be2c216e69a0d631effe6ba795ff90f328bf05a24bd2d45b60369e1cf3df4b0fc15478c7a73ec497a8661265bdb3daf52b39668117a7b123c9b
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # Change Log
2
2
 
3
3
 
4
+ ## [5.13.0](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.12.0...v5.13.0) (2024-06-18)
5
+
6
+
7
+ ### Features
8
+
9
+ * add before_event hook for intercepting events ([#567](https://github.com/honeybadger-io/honeybadger-ruby/issues/567)) ([2f86728](https://github.com/honeybadger-io/honeybadger-ruby/commit/2f8672814af3b12b3bfbc775de63b7a34b5087ad))
10
+
4
11
  ## [5.12.0](https://github.com/honeybadger-io/honeybadger-ruby/compare/v5.11.2...v5.12.0) (2024-06-17)
5
12
 
6
13
 
@@ -4,6 +4,7 @@ require 'honeybadger/version'
4
4
  require 'honeybadger/config'
5
5
  require 'honeybadger/context_manager'
6
6
  require 'honeybadger/notice'
7
+ require 'honeybadger/event'
7
8
  require 'honeybadger/plugin'
8
9
  require 'honeybadger/logging'
9
10
  require 'honeybadger/worker'
@@ -392,28 +393,21 @@ module Honeybadger
392
393
  def event(event_type, payload = {})
393
394
  init_events_worker
394
395
 
395
- ts = Time.now.utc.strftime("%FT%T.%LZ")
396
- merged = {ts: ts}
397
-
398
- if event_type.is_a?(String)
399
- merged[:event_type] = event_type
400
- else
401
- merged.merge!(Hash(event_type))
396
+ extra_payload = {}.tap do |p|
397
+ p[:request_id] = context_manager.get_request_id if context_manager.get_request_id
398
+ p[:hostname] = config[:hostname].to_s if config[:'events.attach_hostname']
402
399
  end
403
400
 
404
- if (request_id = context_manager.get_request_id)
405
- merged[:request_id] = request_id
406
- end
401
+ event = Event.new(event_type, extra_payload.merge(payload))
407
402
 
408
- if config[:'events.attach_hostname']
409
- merged[:hostname] = config[:hostname].to_s
403
+ config.before_event_hooks.each do |hook|
404
+ with_error_handling { hook.call(event) }
410
405
  end
411
406
 
412
- merged.merge!(Hash(payload))
413
-
414
- return if config.ignored_events.any? { |check| merged[:event_type]&.match?(check) }
407
+ return if config.ignored_events.any? { |check| event.event_type&.match?(check) }
408
+ return if event.halted?
415
409
 
416
- events_worker.push(merged)
410
+ events_worker.push(event.as_json)
417
411
  end
418
412
 
419
413
  # @api private
@@ -590,7 +584,7 @@ module Honeybadger
590
584
  def with_error_handling
591
585
  yield
592
586
  rescue => ex
593
- error { "Rescued an error in a before notify hook: #{ex.message}" }
587
+ error { "Rescued an error in a before hook: #{ex.message}" }
594
588
  end
595
589
 
596
590
  @instance = new(Config.new)
@@ -89,15 +89,27 @@ module Honeybadger
89
89
  def before_notify(action = nil, &block)
90
90
  hooks = Array(get(:before_notify)).dup
91
91
 
92
- if action && validate_before_action(action)
92
+ if action && validate_before_action(action, 'notify')
93
93
  hooks << action
94
- elsif block_given? && validate_before_action(block)
94
+ elsif block_given? && validate_before_action(block, 'notify')
95
95
  hooks << block
96
96
  end
97
97
 
98
98
  hash[:before_notify] = hooks
99
99
  end
100
100
 
101
+ def before_event(action = nil, &block)
102
+ hooks = Array(get(:before_event)).dup
103
+
104
+ if action && validate_before_action(action, 'event')
105
+ hooks << action
106
+ elsif block_given? && validate_before_action(block, 'event')
107
+ hooks << block
108
+ end
109
+
110
+ hash[:before_event] = hooks
111
+ end
112
+
101
113
  def backtrace_filter(&block)
102
114
  if block_given?
103
115
  logger.warn('DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter')
@@ -127,17 +139,17 @@ module Honeybadger
127
139
 
128
140
  private
129
141
 
130
- def validate_before_action(action)
142
+ def validate_before_action(action, type)
131
143
  if !action.respond_to?(:call)
132
144
  logger.warn(
133
- 'You attempted to add a before notify hook that does not respond ' \
145
+ "You attempted to add a before #{type} hook that does not respond " \
134
146
  'to #call. We are discarding this hook so your intended behavior ' \
135
147
  'will not occur.'
136
148
  )
137
149
  false
138
150
  elsif action.arity != 1
139
151
  logger.warn(
140
- 'You attempted to add a before notify hook that has an arity ' \
152
+ "You attempted to add a before #{type} hook that has an arity " \
141
153
  'other than one. We are discarding this hook so your intended ' \
142
154
  'behavior will not occur.'
143
155
  )
@@ -92,6 +92,10 @@ module Honeybadger
92
92
  (ruby[:before_notify] || []).clone
93
93
  end
94
94
 
95
+ def before_event_hooks
96
+ (ruby[:before_event] || []).clone
97
+ end
98
+
95
99
  def exception_filter(&block)
96
100
  if block_given?
97
101
  warn('DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter')
@@ -0,0 +1,56 @@
1
+ require 'forwardable'
2
+
3
+ module Honeybadger
4
+ class Event
5
+ extend Forwardable
6
+
7
+ # The timestamp of the event
8
+ attr_reader :ts
9
+
10
+ # The event_type of the event
11
+ attr_reader :event_type
12
+
13
+ # The payload data of the event
14
+ attr_reader :payload
15
+
16
+ def_delegator :payload, :[]
17
+
18
+ # @api private
19
+ def initialize(event_type_or_payload, payload={})
20
+ if event_type_or_payload.is_a?(String)
21
+ @event_type = event_type_or_payload
22
+ @payload = payload
23
+ elsif event_type_or_payload.is_a?(Hash)
24
+ @event_type = event_type_or_payload[:event_type] || event_type_or_payload["event_type"]
25
+ @payload = event_type_or_payload
26
+ end
27
+
28
+ @ts = payload[:ts] || Time.now.utc.strftime("%FT%T.%LZ")
29
+ @halted = false
30
+ end
31
+
32
+ # Halts the event and the before_event callback chain.
33
+ #
34
+ # Returns nothing.
35
+ def halt!
36
+ @halted ||= true
37
+ end
38
+
39
+ # @api private
40
+ # Determines if this event will be discarded.
41
+ def halted?
42
+ !!@halted
43
+ end
44
+
45
+ # @api private
46
+ # Template used to create JSON payload.
47
+ #
48
+ # @return [Hash] JSON representation of the event.
49
+ def as_json(*args)
50
+ payload.tap do |p|
51
+ p[:ts] = ts
52
+ p[:event_type] = event_type if event_type
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,4 +1,4 @@
1
1
  module Honeybadger
2
2
  # The current String Honeybadger version.
3
- VERSION = '5.12.0'.freeze
3
+ VERSION = '5.13.0'.freeze
4
4
  end
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.12.0
4
+ version: 5.13.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-06-17 00:00:00.000000000 Z
11
+ date: 2024-06-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Make managing application errors a more pleasant experience.
14
14
  email:
@@ -56,6 +56,7 @@ files:
56
56
  - lib/honeybadger/context_manager.rb
57
57
  - lib/honeybadger/conversions.rb
58
58
  - lib/honeybadger/counter.rb
59
+ - lib/honeybadger/event.rb
59
60
  - lib/honeybadger/events_worker.rb
60
61
  - lib/honeybadger/gauge.rb
61
62
  - lib/honeybadger/histogram.rb