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 +7 -0
- data/lib/rocketgraph/version.rb +3 -0
- data/lib/rocketgraph.rb +94 -0
- metadata +103 -0
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
|
data/lib/rocketgraph.rb
ADDED
@@ -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: []
|