apidepth 0.2.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/LICENSE +21 -0
- data/README.md +267 -0
- data/lib/apidepth/collector.rb +305 -0
- data/lib/apidepth/configuration.rb +30 -0
- data/lib/apidepth/event.rb +36 -0
- data/lib/apidepth/net_http_instrumentation.rb +117 -0
- data/lib/apidepth/railtie.rb +83 -0
- data/lib/apidepth/rate_limit_headers.rb +133 -0
- data/lib/apidepth/registry_loader.rb +120 -0
- data/lib/apidepth/vendor_registry.rb +188 -0
- data/lib/apidepth/version.rb +5 -0
- data/lib/apidepth.rb +68 -0
- metadata +144 -0
data/lib/apidepth.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# lib/apidepth.rb
|
|
2
|
+
#
|
|
3
|
+
# Main entry point. Require order matters:
|
|
4
|
+
# 1. version — no dependencies
|
|
5
|
+
# 2. configuration — no dependencies
|
|
6
|
+
# 3. vendor_registry — no dependencies, boots from BUNDLED_BASELINE immediately
|
|
7
|
+
# 4. rate_limit_headers — no dependencies; used by net_http_instrumentation
|
|
8
|
+
# 5. net_http_instrumentation — depends on vendor_registry + collector (via lazy reference)
|
|
9
|
+
# 5. collector — depends on configuration
|
|
10
|
+
# 6. registry_loader — depends on collector + vendor_registry
|
|
11
|
+
# 7. railtie — depends on all of the above; only loaded in a Rails context
|
|
12
|
+
|
|
13
|
+
require "logger"
|
|
14
|
+
require "apidepth/version"
|
|
15
|
+
require "apidepth/configuration"
|
|
16
|
+
require "apidepth/event"
|
|
17
|
+
require "apidepth/vendor_registry"
|
|
18
|
+
require "apidepth/rate_limit_headers"
|
|
19
|
+
require "apidepth/net_http_instrumentation"
|
|
20
|
+
require "apidepth/collector"
|
|
21
|
+
require "apidepth/registry_loader"
|
|
22
|
+
require "apidepth/railtie" if defined?(Rails::Railtie)
|
|
23
|
+
|
|
24
|
+
module Apidepth
|
|
25
|
+
class << self
|
|
26
|
+
attr_writer :logger
|
|
27
|
+
|
|
28
|
+
def logger
|
|
29
|
+
@logger ||= Logger.new($stdout)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def configure
|
|
33
|
+
yield(configuration)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def configuration
|
|
37
|
+
@configuration ||= Configuration.new
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Computed once and frozen. Included in every batch payload so the collector
|
|
41
|
+
# can correlate data quality issues with specific SDK versions, Ruby runtimes,
|
|
42
|
+
# and app servers without needing the customer to file a support ticket.
|
|
43
|
+
def sdk_metadata
|
|
44
|
+
@sdk_metadata ||= {
|
|
45
|
+
name: "apidepth-ruby",
|
|
46
|
+
version: VERSION,
|
|
47
|
+
ruby_version: RUBY_VERSION,
|
|
48
|
+
ruby_platform: RUBY_PLATFORM,
|
|
49
|
+
rails_version: (defined?(Rails) ? Rails.version : nil),
|
|
50
|
+
app_server: detect_app_server
|
|
51
|
+
}.compact.freeze
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def detect_app_server
|
|
55
|
+
return "puma" if defined?(Puma)
|
|
56
|
+
return "unicorn" if defined?(Unicorn)
|
|
57
|
+
return "passenger" if defined?(PhusionPassenger)
|
|
58
|
+
|
|
59
|
+
"unknown"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Strips line-break characters from untrusted strings before they reach
|
|
63
|
+
# log output. Prevents log injection (CVE-2025-27111 class of attack).
|
|
64
|
+
def sanitize_log(str)
|
|
65
|
+
str.to_s.gsub(/[\r\n\t]/, " ").slice(0, 200)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: apidepth
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Apidepth
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: json
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 2.19.2
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 2.19.2
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rspec
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.13'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.13'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: webmock
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '3.23'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '3.23'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: railties
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '6.1'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '6.1'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rack
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: 2.2.12
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: 2.2.12
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: rubocop
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '1.65'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '1.65'
|
|
96
|
+
description: |
|
|
97
|
+
Apidepth instruments Net::HTTP to capture real production latency to
|
|
98
|
+
third-party APIs (Stripe, OpenAI, Twilio, etc.) and streams anonymized
|
|
99
|
+
timing data to the Apidepth collector for trend analysis and alerting.
|
|
100
|
+
email:
|
|
101
|
+
- hello@apidepth.io
|
|
102
|
+
executables: []
|
|
103
|
+
extensions: []
|
|
104
|
+
extra_rdoc_files: []
|
|
105
|
+
files:
|
|
106
|
+
- LICENSE
|
|
107
|
+
- README.md
|
|
108
|
+
- lib/apidepth.rb
|
|
109
|
+
- lib/apidepth/collector.rb
|
|
110
|
+
- lib/apidepth/configuration.rb
|
|
111
|
+
- lib/apidepth/event.rb
|
|
112
|
+
- lib/apidepth/net_http_instrumentation.rb
|
|
113
|
+
- lib/apidepth/railtie.rb
|
|
114
|
+
- lib/apidepth/rate_limit_headers.rb
|
|
115
|
+
- lib/apidepth/registry_loader.rb
|
|
116
|
+
- lib/apidepth/vendor_registry.rb
|
|
117
|
+
- lib/apidepth/version.rb
|
|
118
|
+
homepage: https://apidepth.io
|
|
119
|
+
licenses:
|
|
120
|
+
- MIT
|
|
121
|
+
metadata:
|
|
122
|
+
homepage_uri: https://apidepth.io
|
|
123
|
+
source_code_uri: https://github.com/apidepth/apidepth-ruby
|
|
124
|
+
changelog_uri: https://github.com/apidepth/apidepth-ruby/blob/main/CHANGELOG.md
|
|
125
|
+
bug_tracker_uri: https://github.com/apidepth/apidepth-ruby/issues
|
|
126
|
+
rubygems_mfa_required: 'true'
|
|
127
|
+
rdoc_options: []
|
|
128
|
+
require_paths:
|
|
129
|
+
- lib
|
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
|
+
requirements:
|
|
132
|
+
- - ">="
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: 2.7.0
|
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
|
+
requirements:
|
|
137
|
+
- - ">="
|
|
138
|
+
- !ruby/object:Gem::Version
|
|
139
|
+
version: '0'
|
|
140
|
+
requirements: []
|
|
141
|
+
rubygems_version: 4.0.10
|
|
142
|
+
specification_version: 4
|
|
143
|
+
summary: Passive outbound API latency monitoring for Rails applications
|
|
144
|
+
test_files: []
|