brokepoint 0.0.1 → 0.0.3

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: d11e1b854ee90fb01aa519015cd31bcfbf5f15f2e895ca0b01c0984e4ad17d40
4
- data.tar.gz: 1142ca2dd6673af8b848eee3534dfcd0ef152d9702261c073d6f8e375cd192bf
3
+ metadata.gz: 0dd15f7f3fabe8ff23b330b7d437f4a2d6457a3fdebd18a0c8b6e434889dd130
4
+ data.tar.gz: d6c251cd39bc4ca32074628fdb6e8f0b1962e60f25b9ba0f3ca069a419e9f4e9
5
5
  SHA512:
6
- metadata.gz: 9e6e1d1b2066a561f650ecaf90d02ef10884bc07108332cbe8f076bcf12dec848247d516e61d99cdcf7f78bcc159172e32a196d10ee64cf1758dd322b41ac1c3
7
- data.tar.gz: 165142e4f39ba4ffd6621bee0d1ef014b655a29d076052c489ccb31b27378ce9ff98b5906f78a5675838509b63584b5aa327e8678b251f58e13d323e503f68e7
6
+ metadata.gz: 4f52019d120e7c50208ed9c29fc4f2d38155e9fe2c01ccd2ca38ce5af6b97e83f3419c0a93ac2357d37c8123c26747b0151d3485eddff43704826bfd8103e4a2
7
+ data.tar.gz: fdfcc242f668f88a4ca00f5542e06d81b51d7d67566b8d1245bc8686b16bdf4837dadcfca7021ed1aad2fb76319e201507e5236f2dbf032837ee8f2a962364d2
data/brokepoint.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- require_relative 'lib/brokepoint'
1
+ require_relative './lib/brokepoint/version'
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'brokepoint'
@@ -14,4 +14,5 @@ Gem::Specification.new do |s|
14
14
  s.metadata = { "rubygems_mfa_required" => "true" }
15
15
 
16
16
  s.add_dependency 'zeitwerk', '~> 2.0'
17
+ s.add_dependency 'railties', '~> 8.0'
17
18
  end
@@ -6,16 +6,15 @@ module Brokepoint
6
6
  class Middleware
7
7
  def initialize(app)
8
8
  @app = app
9
+
10
+ @notifier = Brokepoint::Notifier.new
9
11
  end
10
12
 
11
13
  def call(env)
12
14
  begin
13
15
  status, headers, response = @app.call(env)
14
16
  rescue Exception => e
15
- if ENV.key?('BROKEPOINT_URL')
16
- Rails.logger.debug("exception has been noted; #{e.inspect}")
17
- send_message_to_brokepoint(e.message, e.full_message, env)
18
- end
17
+ send_message_to_brokepoint(e, env)
19
18
 
20
19
  raise e
21
20
  end
@@ -25,20 +24,13 @@ module Brokepoint
25
24
 
26
25
  private
27
26
 
28
- def send_message_to_brokepoint(message, stacktrace, env)
29
- brokepoint_installation_address = URI.parse("#{ENV.fetch('BROKEPOINT_URL')}/events")
30
- headers = {'Content-Type': 'application/json'}
27
+ def send_message_to_brokepoint(exception, env)
28
+ return unless @notifier.should_notify?
31
29
 
32
- error = {
33
- name: message,
34
- raw_body: stacktrace,
35
- url: [env['rack.url_scheme'], '://', env['HTTP_HOST'], env['REQUEST_URI']].join
36
- }
30
+ Rails.logger.debug("exception has been noted; #{exception.inspect}")
37
31
 
38
- Timeout.timeout(1) {
39
- Net::HTTP.post(brokepoint_installation_address, { event: error }.to_json, headers)
40
- }
41
- rescue Timeout::Error
32
+ url = [env['rack.url_scheme'], '://', env['HTTP_HOST'], env['REQUEST_URI']].join
33
+ @notifier.notify(name: exception.message, raw_body: exception.full_message, url:)
42
34
  end
43
35
  end
44
36
  end
@@ -0,0 +1,32 @@
1
+ require 'net/http'
2
+
3
+ module Brokepoint
4
+ class Notifier
5
+ attr_reader :brokepoint_events_endpoint
6
+
7
+ def initialize
8
+ @brokepoint_events_endpoint = URI.parse("#{ENV['BROKEPOINT_URL']}/events")
9
+ end
10
+
11
+ def should_notify?
12
+ ENV.key?('BROKEPOINT_URL')
13
+ end
14
+
15
+ def notify(name:, raw_body:, url:)
16
+ return unless should_notify?
17
+
18
+ event = { name:, raw_body:, url: }
19
+
20
+ Timeout.timeout(1) {
21
+ Net::HTTP.post(brokepoint_events_endpoint, { event: }.to_json, default_headers)
22
+ }
23
+ rescue Timeout::Error, Errno::ECONNREFUSED
24
+ end
25
+
26
+ private
27
+
28
+ def default_headers
29
+ {'Content-Type': 'application/json'}
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,59 @@
1
+ module Brokepoint
2
+ class Railtie < Rails::Railtie
3
+ initializer "brokepoint.action_controller" do
4
+ notifier = Brokepoint::Notifier.new
5
+
6
+ ActiveSupport::Notifications.subscribe("process_action.action_controller") do |*args|
7
+ event = ActiveSupport::Notifications::Event.new(*args)
8
+
9
+ if event.payload[:exception_object]
10
+ exception = event.payload[:exception_object]
11
+
12
+ notifier.notify(name: exception.message, raw_body: exception.full_message, url: event.payload[:request].original_url)
13
+ end
14
+ end
15
+ end
16
+
17
+ initializer "brokepoint.action_job" do
18
+ notifier = Brokepoint::Notifier.new
19
+
20
+ ActiveSupport::Notifications.subscribe("perform.active_job") do |*args|
21
+ event = ActiveSupport::Notifications::Event.new(*args)
22
+
23
+ if event.payload[:exception_object]
24
+ exception = event.payload[:exception_object]
25
+
26
+ notifier.notify(name: exception.message, raw_body: exception.full_message, url: nil)
27
+ end
28
+ end
29
+ end
30
+
31
+ initializer "brokepoint.action_job" do
32
+ notifier = Brokepoint::Notifier.new
33
+
34
+ ActiveSupport::Notifications.subscribe("perform.active_job") do |*args|
35
+ event = ActiveSupport::Notifications::Event.new(*args)
36
+
37
+ if event.payload[:exception_object]
38
+ exception = event.payload[:exception_object]
39
+
40
+ notifier.notify(name: exception.message, raw_body: exception.full_message, url: nil)
41
+ end
42
+ end
43
+ end
44
+
45
+ initializer "brokepoint.action_cable" do
46
+ notifier = Brokepoint::Notifier.new
47
+
48
+ ActiveSupport::Notifications.subscribe("perform_action.action_cable") do |*args|
49
+ event = ActiveSupport::Notifications::Event.new(*args)
50
+
51
+ if event.payload[:exception_object]
52
+ exception = event.payload[:exception_object]
53
+
54
+ notifier.notify(name: exception.message, raw_body: exception.full_message, url: nil)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ module Brokepoint
2
+ VERSION = '0.0.3'
3
+ end
data/lib/brokepoint.rb CHANGED
@@ -3,6 +3,8 @@ require 'zeitwerk'
3
3
  loader = Zeitwerk::Loader.for_gem
4
4
  loader.setup
5
5
 
6
+ require_relative "./brokepoint/version"
7
+ require_relative "./brokepoint/railtie"
8
+
6
9
  module Brokepoint
7
- VERSION = '0.0.1'
8
10
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brokepoint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane P
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-07-14 00:00:00.000000000 Z
10
+ date: 2025-07-31 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: zeitwerk
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: railties
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '8.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '8.0'
26
40
  email: shane@shane.computer
27
41
  executables: []
28
42
  extensions: []
@@ -31,6 +45,9 @@ files:
31
45
  - brokepoint.gemspec
32
46
  - lib/brokepoint.rb
33
47
  - lib/brokepoint/middleware.rb
48
+ - lib/brokepoint/notifier.rb
49
+ - lib/brokepoint/railtie.rb
50
+ - lib/brokepoint/version.rb
34
51
  homepage: https://rubygems.org/gems/brokepoint
35
52
  licenses:
36
53
  -