rocketgraph-ruby 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 624703e22bb90bdaaec8169c2ecf587dacf20ec891ba7cd4ac0176ca0b0e5980
4
+ data.tar.gz: 627c062c86f22b402bd95092f31bdbfacd4f3e585ea09c531978abd57494d102
5
+ SHA512:
6
+ metadata.gz: ab252ee37e0214e327620654b1c965436b384bf500932596d26a7a63eb92713ad0ae92181762f19f18ade74aea3e7f5292780335f56d7a99187a3dacf7467857
7
+ data.tar.gz: d5e61fe6457e8df9bc9958c9b0c63304bcf617c2632cabda05505b865a81c54efb70ce483da5e5bd93c3f236e0d91450d1943007d4429f158be4ed79ecd2e8d5
@@ -0,0 +1,3 @@
1
+ module Rocketgraph
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,94 @@
1
+ require 'httparty'
2
+ require 'rocketgraph/version'
3
+
4
+ module Rocketgraph
5
+ class ErrorReportingMiddleware
6
+ def initialize(app, endpoint)
7
+ @app = app
8
+ @endpoint = endpoint
9
+ end
10
+
11
+ def call(env)
12
+ begin
13
+ # Call the application
14
+ status, headers, body = @app.call(env)
15
+
16
+ # Check for error status codes (e.g., 400, 404, 500)
17
+ if status >= 400
18
+ report_error(
19
+ error: StandardError.new("HTTP #{status}"),
20
+ env: env,
21
+ status_code: status
22
+ )
23
+ end
24
+
25
+ [status, headers, body]
26
+ rescue StandardError => e
27
+ # Catch any unhandled exceptions
28
+ report_error(error: e, env: env, status_code: 500)
29
+ raise # Re-raise to let the app handle the response
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def report_error(error:, env:, status_code:)
36
+ error_details = build_error_details(error, env, status_code)
37
+ send_to_endpoint(error_details)
38
+ rescue StandardError
39
+ # Silently fail to avoid affecting the app
40
+ end
41
+
42
+ def build_error_details(error, env, status_code)
43
+ # request = Rack::Request.new(env)
44
+ # {
45
+ # timestamp: Time.now.utc.iso8601,
46
+ # status_code: status_code,
47
+ # error_class: error.class.name,
48
+ # message: error.message,
49
+ # backtrace: error.backtrace&.first(5),
50
+ # request: {
51
+ # method: request.request_method,
52
+ # path: request.path_info,
53
+ # ip: request.ip,
54
+ # params: request.params
55
+ # }
56
+ # }
57
+
58
+ # Add more info
59
+ request = Rack::Request.new(env)
60
+ {
61
+ timestamp: Time.now.utc.iso8601,
62
+ status_code: status_code,
63
+ error_class: error.class.name,
64
+ message: error.message,
65
+ backtrace: error.backtrace&.first(5),
66
+ request: {
67
+ method: request.request_method,
68
+ path: request.path_info,
69
+ ip: request.ip,
70
+ params: request.params,
71
+ user_agent: env['HTTP_USER_AGENT'] || '', # User-Agent header
72
+ referer: env['HTTP_REFERER'], # Referer header
73
+ accept: env['HTTP_ACCEPT'], # Accept header
74
+ accept_language: env['HTTP_ACCEPT_LANGUAGE'], # Accept-Language header
75
+ accept_encoding: env['HTTP_ACCEPT_ENCODING'], # Accept-Encoding header
76
+ connection: env['HTTP_CONNECTION'], # Connection header
77
+ has_session: !env['rack.session'].nil?, # Presence of session cookie
78
+ request_timestamp: Time.now.to_f # Precise timestamp for rate analysis
79
+ }
80
+ }
81
+ end
82
+
83
+ def send_to_endpoint(details)
84
+ HTTParty.post(
85
+ @endpoint,
86
+ body: details.to_json,
87
+ headers: { 'Content-Type' => 'application/json' },
88
+ timeout: 5
89
+ )
90
+ rescue HTTParty::Error, Timeout::Error
91
+ # Silently fail
92
+ end
93
+ end
94
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rocketgraph-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Your Name
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-04-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.21'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.21'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ description: Rocketgraph Ruby intercepts HTTP errors (e.g., 404, 500) in Rack-based
70
+ applications and sends detailed reports to a specified backend service.
71
+ email:
72
+ - your.email@example.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - lib/rocketgraph.rb
78
+ - lib/rocketgraph/version.rb
79
+ homepage: https://github.com/yourusername/rocketgraph-ruby
80
+ licenses:
81
+ - MIT
82
+ metadata:
83
+ source_code_uri: https://github.com/yourusername/rocketgraph-ruby
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 3.0.3.1
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: A Ruby gem to catch HTTP errors and report them to a custom endpoint
103
+ test_files: []