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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +33 -9
  4. data/contracts/apm-batch-v1.schema.json +1 -1
  5. data/contracts/dependencies-v1.schema.json +38 -0
  6. data/contracts/event-v1.schema.json +1 -1
  7. data/docs/adr/ADR-016-explicit-observability-integrations.md +25 -0
  8. data/docs/architecture.md +6 -1
  9. data/docs/compatibility.md +2 -0
  10. data/docs/configuration.md +12 -2
  11. data/docs/data-collected.md +9 -4
  12. data/docs/examples/plain-ruby.md +7 -1
  13. data/docs/modules/apm-aggregation.md +2 -2
  14. data/docs/modules/cache-observability.md +16 -0
  15. data/docs/modules/configuration.md +2 -0
  16. data/docs/modules/dependencies.md +18 -0
  17. data/docs/modules/external-http.md +27 -0
  18. data/docs/modules/rails-legacy.md +1 -1
  19. data/docs/modules/sidekiq-legacy.md +1 -1
  20. data/docs/modules/telemetry-events.md +2 -2
  21. data/docs/performance.md +16 -1
  22. data/docs/privacy-lgpd.md +11 -2
  23. data/docs/troubleshooting.md +13 -1
  24. data/lib/chronos/agent.rb +24 -0
  25. data/lib/chronos/application/apm_aggregator.rb +7 -10
  26. data/lib/chronos/application/apm_error_classifier.rb +27 -0
  27. data/lib/chronos/application/capture_telemetry.rb +1 -1
  28. data/lib/chronos/application/dependency_reporter.rb +129 -0
  29. data/lib/chronos/application/remote_configuration.rb +3 -1
  30. data/lib/chronos/configuration/apm_validation.rb +17 -1
  31. data/lib/chronos/configuration.rb +15 -2
  32. data/lib/chronos/core/cache_normalizer.rb +99 -0
  33. data/lib/chronos/core/telemetry_event.rb +1 -1
  34. data/lib/chronos/integrations/net_http.rb +165 -0
  35. data/lib/chronos/net_http.rb +4 -0
  36. data/lib/chronos/observability_facade.rb +43 -0
  37. data/lib/chronos/rails/notifications_subscriber.rb +6 -5
  38. data/lib/chronos/version.rb +1 -1
  39. data/lib/chronos.rb +6 -0
  40. 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, bind values, cache keys, mail bodies, or job arguments.
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
 
@@ -1,4 +1,4 @@
1
1
  module Chronos
2
2
  # Current version of the legacy Chronos Ruby agent.
3
- VERSION = "0.7.0.pre.1".freeze
3
+ VERSION = "0.8.0.pre.1".freeze
4
4
  end
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.7.0.pre.1
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