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 +7 -0
- data/lib/traceforge/client.rb +49 -0
- data/lib/traceforge/middleware.rb +19 -0
- data/lib/traceforge/railtie.rb +9 -0
- data/lib/traceforge.rb +24 -0
- data/traceforge.gemspec +20 -0
- metadata +76 -0
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
|
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
|
data/traceforge.gemspec
ADDED
|
@@ -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: []
|