traceforge 1.0.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: c9248febeee99b1256edd5b9eff78f57c499da0ef7ed4fd47f5e9e886bfa4e5f
4
+ data.tar.gz: 04bf471e9a176e68eb09969e22ad4ca81e53359fec6bae19b3cd39f3ebc85709
5
+ SHA512:
6
+ metadata.gz: 7cc7d969b65d03da667e6932a56a9a483d24580957d652f3e5016badfa961d80c6c7f566c83b6ebf22c540b74d2dcf8f4daa605dcd0e2733989c55cfd85ecd5e
7
+ data.tar.gz: 5aa223bc42796f3fe6e554d6e044733d16249d16f48481816a2edfe810c229c3382fa874f9186df9c03ec56efbedb48e1d1d0926de53770473648a7c7b96e0ec
@@ -0,0 +1,49 @@
1
+ require 'net/http'
2
+ require 'json'
3
+ require 'uri'
4
+ require 'thread'
5
+
6
+ module TraceForge
7
+ class Client
8
+ def self.capture_exception(exception, metadata = {})
9
+ return unless TraceForge.configuration.api_key
10
+
11
+ payload = {
12
+ type: metadata[:type] || 'exception',
13
+ message: exception.message,
14
+ stackTrace: exception.backtrace&.join("\n") || '',
15
+ file: exception.backtrace&.first&.split(':')&.first || '',
16
+ line: exception.backtrace&.first&.split(':')&.fetch(1, 0)&.to_i || 0,
17
+ metadata: {
18
+ framework: 'ruby-on-rails',
19
+ language: 'ruby'
20
+ }.merge(metadata)
21
+ }
22
+
23
+ send_payload(payload)
24
+ end
25
+
26
+ private
27
+
28
+ def self.send_payload(payload)
29
+ Thread.new do
30
+ begin
31
+ uri = URI.parse(TraceForge.configuration.ingest_url)
32
+ http = Net::HTTP.new(uri.host, uri.port)
33
+ http.use_ssl = (uri.scheme == 'https')
34
+ http.open_timeout = 1
35
+ http.read_timeout = 1
36
+
37
+ request = Net::HTTP::Post.new(uri.request_uri)
38
+ request['X-Traceforge-Key'] = TraceForge.configuration.api_key
39
+ request['Content-Type'] = 'application/json'
40
+ request.body = payload.to_json
41
+
42
+ http.request(request)
43
+ rescue StandardError => e
44
+ # Fail silently to not crash the host application
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ module TraceForge
2
+ class Middleware
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ begin
9
+ @app.call(env)
10
+ rescue Exception => exception
11
+ TraceForge::Client.capture_exception(exception, {
12
+ url: env['REQUEST_URI'],
13
+ method: env['REQUEST_METHOD']
14
+ })
15
+ raise exception
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ require 'traceforge/middleware'
2
+
3
+ module TraceForge
4
+ class Railtie < Rails::Railtie
5
+ initializer "traceforge.configure_rails_initialization" do |app|
6
+ app.middleware.insert_after ActionDispatch::ShowExceptions, TraceForge::Middleware
7
+ end
8
+ end
9
+ end
data/lib/traceforge.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'traceforge/client'
2
+ require 'traceforge/middleware'
3
+ require 'traceforge/railtie' if defined?(Rails)
4
+
5
+ module TraceForge
6
+ class << self
7
+ def configure
8
+ yield(configuration)
9
+ end
10
+
11
+ def configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+ end
15
+
16
+ class Configuration
17
+ attr_accessor :api_key, :ingest_url
18
+
19
+ def initialize
20
+ @api_key = ENV['TRACEFORGE_API_KEY']
21
+ @ingest_url = ENV['TRACEFORGE_INGEST_URL'] || 'http://localhost:3001/ingest'
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "traceforge"
6
+ spec.version = "1.0.0"
7
+ spec.authors = ["Khushal Patil"]
8
+ spec.email = ["patilkhushal54321@gmail.com"]
9
+
10
+ spec.summary = "TraceForge SDK for Ruby on Rails."
11
+ spec.description = "Zero-touch exception capturing for Ruby on Rails applications."
12
+ spec.homepage = "https://github.com/khushalp2004/TraceForge"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = Dir["lib/**/*", "traceforge.gemspec"]
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_dependency "railties", ">= 5.0"
19
+ spec.add_dependency "rack", ">= 2.0"
20
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: traceforge
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Khushal Patil
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-07-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
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
+ description: Zero-touch exception capturing for Ruby on Rails applications.
42
+ email:
43
+ - patilkhushal54321@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/traceforge.rb
49
+ - lib/traceforge/client.rb
50
+ - lib/traceforge/middleware.rb
51
+ - lib/traceforge/railtie.rb
52
+ - traceforge.gemspec
53
+ homepage: https://github.com/khushalp2004/TraceForge
54
+ licenses:
55
+ - MIT
56
+ metadata: {}
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.0.3.1
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: TraceForge SDK for Ruby on Rails.
76
+ test_files: []