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.
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: []