chronos-ruby 0.7.0.pre.1 → 0.8.0.pre.1
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 +4 -4
- data/CHANGELOG.md +24 -0
- data/README.md +33 -9
- data/contracts/apm-batch-v1.schema.json +1 -1
- data/contracts/dependencies-v1.schema.json +38 -0
- data/contracts/event-v1.schema.json +1 -1
- data/docs/adr/ADR-016-explicit-observability-integrations.md +25 -0
- data/docs/architecture.md +6 -1
- data/docs/compatibility.md +2 -0
- data/docs/configuration.md +12 -2
- data/docs/data-collected.md +9 -4
- data/docs/examples/plain-ruby.md +7 -1
- data/docs/modules/apm-aggregation.md +2 -2
- data/docs/modules/cache-observability.md +16 -0
- data/docs/modules/configuration.md +2 -0
- data/docs/modules/dependencies.md +18 -0
- data/docs/modules/external-http.md +27 -0
- data/docs/modules/rails-legacy.md +1 -1
- data/docs/modules/sidekiq-legacy.md +1 -1
- data/docs/modules/telemetry-events.md +2 -2
- data/docs/performance.md +16 -1
- data/docs/privacy-lgpd.md +11 -2
- data/docs/troubleshooting.md +13 -1
- data/lib/chronos/agent.rb +24 -0
- data/lib/chronos/application/apm_aggregator.rb +7 -10
- data/lib/chronos/application/apm_error_classifier.rb +27 -0
- data/lib/chronos/application/capture_telemetry.rb +1 -1
- data/lib/chronos/application/dependency_reporter.rb +129 -0
- data/lib/chronos/application/remote_configuration.rb +3 -1
- data/lib/chronos/configuration/apm_validation.rb +17 -1
- data/lib/chronos/configuration.rb +15 -2
- data/lib/chronos/core/cache_normalizer.rb +99 -0
- data/lib/chronos/core/telemetry_event.rb +1 -1
- data/lib/chronos/integrations/net_http.rb +165 -0
- data/lib/chronos/net_http.rb +4 -0
- data/lib/chronos/observability_facade.rb +43 -0
- data/lib/chronos/rails/notifications_subscriber.rb +6 -5
- data/lib/chronos/version.rb +1 -1
- data/lib/chronos.rb +6 -0
- metadata +12 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Chronos
|
|
2
|
+
# Public entry points for optional version 0.8 observability integrations.
|
|
3
|
+
#
|
|
4
|
+
# @responsibility Delegate dependency, cache, and outbound HTTP integration calls to the agent.
|
|
5
|
+
# @motivation Keep the main public facade small while preserving one stable Chronos namespace.
|
|
6
|
+
# @limits It installs only explicitly supplied Net::HTTP connections and never enables features.
|
|
7
|
+
# @collaborators Chronos::Agent and Chronos::Integrations::NetHttp.
|
|
8
|
+
# @thread_safety Agent access uses the facade's synchronized current_agent lookup.
|
|
9
|
+
# @compatibility Ruby 2.2.10 through Ruby 2.6.
|
|
10
|
+
# @example
|
|
11
|
+
# Chronos.instrument_net_http(Net::HTTP.new("api.example.com"))
|
|
12
|
+
# @errors Integration failures return false or safe disabled options.
|
|
13
|
+
# @performance Delegation is constant-time; dependency collection remains at-most-once.
|
|
14
|
+
module ObservabilityFacade
|
|
15
|
+
def report_dependencies
|
|
16
|
+
agent = current_agent
|
|
17
|
+
agent ? agent.report_dependencies : false
|
|
18
|
+
rescue StandardError
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def external_http_integration_options
|
|
23
|
+
agent = current_agent
|
|
24
|
+
agent ? agent.external_http_integration_options : {:enabled => false}
|
|
25
|
+
rescue StandardError
|
|
26
|
+
{:enabled => false}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def cache_integration_options
|
|
30
|
+
agent = current_agent
|
|
31
|
+
agent ? agent.cache_integration_options : {:project_id => "", :key_mode => :none}
|
|
32
|
+
rescue StandardError
|
|
33
|
+
{:project_id => "", :key_mode => :none}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def instrument_net_http(connection, options = {})
|
|
37
|
+
require "chronos/net_http"
|
|
38
|
+
Integrations::NetHttp.install(connection, options.merge(:notifier => self))
|
|
39
|
+
rescue StandardError
|
|
40
|
+
false
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -4,7 +4,7 @@ module Chronos
|
|
|
4
4
|
#
|
|
5
5
|
# @responsibility Subscribe once and normalize controller, view, SQL, mailer, job, and cache events.
|
|
6
6
|
# @motivation Support Rails 4.2 and 5.2 through feature detection and public notification APIs.
|
|
7
|
-
# @limits It never sends SQL text,
|
|
7
|
+
# @limits It never sends SQL text, binds, raw cache keys/values, mail bodies, or job arguments.
|
|
8
8
|
# @collaborators ActiveSupport::Notifications and the Chronos facade.
|
|
9
9
|
# @thread_safety Subscription registry is mutex-protected; callbacks own their state.
|
|
10
10
|
# @compatibility ActiveSupport notification argument shapes from Rails 4.2 through 5.2.
|
|
@@ -30,6 +30,10 @@ module Chronos
|
|
|
30
30
|
@notifier = notifier
|
|
31
31
|
@notifications = notifications || active_support_notifications
|
|
32
32
|
@sql_normalizer = Core::SqlNormalizer.new
|
|
33
|
+
cache_options = notifier.respond_to?(:cache_integration_options) ? notifier.cache_integration_options : {}
|
|
34
|
+
@cache_normalizer = Core::CacheNormalizer.new(
|
|
35
|
+
cache_options[:project_id].to_s, cache_options[:key_mode] || :none
|
|
36
|
+
)
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
def install
|
|
@@ -148,10 +152,7 @@ module Chronos
|
|
|
148
152
|
end
|
|
149
153
|
|
|
150
154
|
def cache(name, payload, duration)
|
|
151
|
-
data =
|
|
152
|
-
"operation" => name.split(".").first, "store" => value(payload, :store).to_s,
|
|
153
|
-
"hit" => value(payload, :hit), "duration_ms" => duration
|
|
154
|
-
}
|
|
155
|
+
data = @cache_normalizer.call(name, payload).merge("duration_ms" => duration)
|
|
155
156
|
@notifier.record_event("cache", data)
|
|
156
157
|
end
|
|
157
158
|
|
data/lib/chronos/version.rb
CHANGED
data/lib/chronos.rb
CHANGED
|
@@ -18,6 +18,7 @@ require "chronos/core/payload_serializer"
|
|
|
18
18
|
require "chronos/core/telemetry_event"
|
|
19
19
|
require "chronos/core/sql_normalizer"
|
|
20
20
|
require "chronos/core/metric_aggregate"
|
|
21
|
+
require "chronos/core/cache_normalizer"
|
|
21
22
|
require "chronos/ports/transport"
|
|
22
23
|
require "chronos/ports/context_store"
|
|
23
24
|
require "chronos/internal/safe_logger"
|
|
@@ -32,9 +33,12 @@ require "chronos/application/circuit_breaker"
|
|
|
32
33
|
require "chronos/application/remote_configuration"
|
|
33
34
|
require "chronos/application/delivery_pipeline"
|
|
34
35
|
require "chronos/application/capture_exception"
|
|
36
|
+
require "chronos/application/apm_error_classifier"
|
|
35
37
|
require "chronos/application/apm_aggregator"
|
|
38
|
+
require "chronos/application/dependency_reporter"
|
|
36
39
|
require "chronos/application/capture_telemetry"
|
|
37
40
|
require "chronos/agent"
|
|
41
|
+
require "chronos/observability_facade"
|
|
38
42
|
require "chronos/integrations"
|
|
39
43
|
require "chronos/integrations/rack"
|
|
40
44
|
require "chronos/integrations/rack/middleware"
|
|
@@ -55,6 +59,8 @@ require "chronos/integrations/rack/middleware"
|
|
|
55
59
|
# end
|
|
56
60
|
# Chronos.notify(RuntimeError.new("failed"))
|
|
57
61
|
module Chronos
|
|
62
|
+
extend ObservabilityFacade
|
|
63
|
+
|
|
58
64
|
@mutex = Mutex.new
|
|
59
65
|
@agent = nil
|
|
60
66
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chronos-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0.pre.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Antonio Jefferson
|
|
@@ -87,6 +87,7 @@ files:
|
|
|
87
87
|
- README.md
|
|
88
88
|
- SECURITY.md
|
|
89
89
|
- contracts/apm-batch-v1.schema.json
|
|
90
|
+
- contracts/dependencies-v1.schema.json
|
|
90
91
|
- contracts/event-v1.schema.json
|
|
91
92
|
- contracts/rack-context-v1.schema.json
|
|
92
93
|
- contracts/sidekiq-job-v1.schema.json
|
|
@@ -101,6 +102,7 @@ files:
|
|
|
101
102
|
- docs/adr/ADR-013-legacy-rails-notifications.md
|
|
102
103
|
- docs/adr/ADR-014-sidekiq-envelope-context.md
|
|
103
104
|
- docs/adr/ADR-015-bounded-apm-aggregation.md
|
|
105
|
+
- docs/adr/ADR-016-explicit-observability-integrations.md
|
|
104
106
|
- docs/architecture.md
|
|
105
107
|
- docs/compatibility.md
|
|
106
108
|
- docs/configuration.md
|
|
@@ -108,7 +110,10 @@ files:
|
|
|
108
110
|
- docs/examples/plain-ruby.md
|
|
109
111
|
- docs/modules/apm-aggregation.md
|
|
110
112
|
- docs/modules/async-queue.md
|
|
113
|
+
- docs/modules/cache-observability.md
|
|
111
114
|
- docs/modules/configuration.md
|
|
115
|
+
- docs/modules/dependencies.md
|
|
116
|
+
- docs/modules/external-http.md
|
|
112
117
|
- docs/modules/notice-pipeline.md
|
|
113
118
|
- docs/modules/rack-context.md
|
|
114
119
|
- docs/modules/rails-legacy.md
|
|
@@ -129,10 +134,12 @@ files:
|
|
|
129
134
|
- lib/chronos/agent.rb
|
|
130
135
|
- lib/chronos/application.rb
|
|
131
136
|
- lib/chronos/application/apm_aggregator.rb
|
|
137
|
+
- lib/chronos/application/apm_error_classifier.rb
|
|
132
138
|
- lib/chronos/application/capture_exception.rb
|
|
133
139
|
- lib/chronos/application/capture_telemetry.rb
|
|
134
140
|
- lib/chronos/application/circuit_breaker.rb
|
|
135
141
|
- lib/chronos/application/delivery_pipeline.rb
|
|
142
|
+
- lib/chronos/application/dependency_reporter.rb
|
|
136
143
|
- lib/chronos/application/remote_configuration.rb
|
|
137
144
|
- lib/chronos/application/retry_policy.rb
|
|
138
145
|
- lib/chronos/configuration.rb
|
|
@@ -142,6 +149,7 @@ files:
|
|
|
142
149
|
- lib/chronos/core.rb
|
|
143
150
|
- lib/chronos/core/backtrace_parser.rb
|
|
144
151
|
- lib/chronos/core/breadcrumb.rb
|
|
152
|
+
- lib/chronos/core/cache_normalizer.rb
|
|
145
153
|
- lib/chronos/core/exception_cause_collector.rb
|
|
146
154
|
- lib/chronos/core/metric_aggregate.rb
|
|
147
155
|
- lib/chronos/core/notice.rb
|
|
@@ -156,6 +164,7 @@ files:
|
|
|
156
164
|
- lib/chronos/errors.rb
|
|
157
165
|
- lib/chronos/integrations.rb
|
|
158
166
|
- lib/chronos/integrations/job_payload.rb
|
|
167
|
+
- lib/chronos/integrations/net_http.rb
|
|
159
168
|
- lib/chronos/integrations/rack.rb
|
|
160
169
|
- lib/chronos/integrations/rack/middleware.rb
|
|
161
170
|
- lib/chronos/integrations/sidekiq.rb
|
|
@@ -164,6 +173,8 @@ files:
|
|
|
164
173
|
- lib/chronos/internal/memory_backlog.rb
|
|
165
174
|
- lib/chronos/internal/safe_logger.rb
|
|
166
175
|
- lib/chronos/internal/worker_pool.rb
|
|
176
|
+
- lib/chronos/net_http.rb
|
|
177
|
+
- lib/chronos/observability_facade.rb
|
|
167
178
|
- lib/chronos/ports.rb
|
|
168
179
|
- lib/chronos/ports/context_store.rb
|
|
169
180
|
- lib/chronos/ports/transport.rb
|