chronos-ruby 0.4.0.pre.1 → 0.6.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 +22 -0
- data/README.md +33 -9
- data/contracts/event-v1.schema.json +25 -11
- data/contracts/sidekiq-job-v1.schema.json +21 -0
- data/docs/adr/ADR-013-legacy-rails-notifications.md +27 -0
- data/docs/adr/ADR-014-sidekiq-envelope-context.md +27 -0
- data/docs/architecture.md +12 -1
- data/docs/compatibility.md +12 -6
- data/docs/configuration.md +8 -2
- data/docs/data-collected.md +14 -2
- data/docs/modules/rails-legacy.md +60 -0
- data/docs/modules/sidekiq-legacy.md +23 -0
- data/docs/modules/telemetry-events.md +9 -0
- data/docs/performance.md +27 -3
- data/docs/privacy-lgpd.md +12 -3
- data/docs/troubleshooting.md +17 -1
- data/lib/chronos/agent.rb +58 -1
- data/lib/chronos/application/capture_telemetry.rb +37 -0
- data/lib/chronos/application/remote_configuration.rb +1 -1
- data/lib/chronos/configuration/snapshot.rb +53 -0
- data/lib/chronos/configuration/validation.rb +122 -0
- data/lib/chronos/configuration.rb +15 -153
- data/lib/chronos/core/telemetry_event.rb +106 -0
- data/lib/chronos/integrations/job_payload.rb +72 -0
- data/lib/chronos/integrations/rack/middleware.rb +5 -1
- data/lib/chronos/integrations/sidekiq.rb +258 -0
- data/lib/chronos/integrations.rb +1 -1
- data/lib/chronos/internal/worker_pool.rb +19 -2
- data/lib/chronos/rails/installer.rb +70 -0
- data/lib/chronos/rails/notifications_subscriber.rb +203 -0
- data/lib/chronos/rails/railtie.rb +21 -0
- data/lib/chronos/rails.rb +16 -0
- data/lib/chronos/sidekiq.rb +12 -0
- data/lib/chronos/version.rb +1 -1
- data/lib/chronos.rb +34 -1
- data/lib/generators/chronos/install/install_generator.rb +25 -0
- data/lib/generators/chronos/install/templates/chronos.rb +20 -0
- metadata +21 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Chronos
|
|
2
|
+
module Rails
|
|
3
|
+
# Hooks Chronos installation into the public Rails initializer lifecycle.
|
|
4
|
+
#
|
|
5
|
+
# @responsibility Install integrations after application configuration initializers load.
|
|
6
|
+
# @motivation Ensure generated Chronos configuration exists before hooks are activated.
|
|
7
|
+
# @limits It performs no autoloading and does not use private Rails initialization APIs.
|
|
8
|
+
# @collaborators Rails::Railtie and Chronos::Rails::Installer.
|
|
9
|
+
# @thread_safety Rails invokes the initializer during serialized application boot.
|
|
10
|
+
# @compatibility Rails 4.2 through Rails 5.2; no Zeitwerk requirement.
|
|
11
|
+
# @example
|
|
12
|
+
# require "chronos/rails"
|
|
13
|
+
# @errors Installer contains optional integration failures and allows Rails to boot.
|
|
14
|
+
# @performance Adds only one initializer and one-time installation work.
|
|
15
|
+
class Railtie < ::Rails::Railtie
|
|
16
|
+
initializer "chronos.install", :after => :load_config_initializers do |application|
|
|
17
|
+
Chronos::Rails::Installer.new.install(application)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require "chronos"
|
|
2
|
+
require "chronos/rails/notifications_subscriber"
|
|
3
|
+
require "chronos/rails/installer"
|
|
4
|
+
|
|
5
|
+
require "chronos/rails/railtie" if defined?(::Rails::Railtie)
|
|
6
|
+
|
|
7
|
+
module Chronos
|
|
8
|
+
# Legacy Rails integration loaded explicitly after Rails is available.
|
|
9
|
+
#
|
|
10
|
+
# @responsibility Namespace Railtie, installer, and notification subscribers.
|
|
11
|
+
# @motivation Keep Rails and ActiveSupport out of the framework-independent core.
|
|
12
|
+
# @limits Version 0.5 targets public APIs present in Rails 4.2 and 5.2.
|
|
13
|
+
# @thread_safety Installation and subscriptions are protected against duplication.
|
|
14
|
+
# @compatibility Rails 4.2 through Rails 5.2 with their supported legacy Rubies.
|
|
15
|
+
module Rails; end
|
|
16
|
+
end
|
data/lib/chronos/version.rb
CHANGED
data/lib/chronos.rb
CHANGED
|
@@ -15,6 +15,7 @@ require "chronos/core/sensitive_value_filter"
|
|
|
15
15
|
require "chronos/core/sanitizer"
|
|
16
16
|
require "chronos/core/safe_serializer"
|
|
17
17
|
require "chronos/core/payload_serializer"
|
|
18
|
+
require "chronos/core/telemetry_event"
|
|
18
19
|
require "chronos/ports/transport"
|
|
19
20
|
require "chronos/ports/context_store"
|
|
20
21
|
require "chronos/internal/safe_logger"
|
|
@@ -29,6 +30,7 @@ require "chronos/application/circuit_breaker"
|
|
|
29
30
|
require "chronos/application/remote_configuration"
|
|
30
31
|
require "chronos/application/delivery_pipeline"
|
|
31
32
|
require "chronos/application/capture_exception"
|
|
33
|
+
require "chronos/application/capture_telemetry"
|
|
32
34
|
require "chronos/agent"
|
|
33
35
|
require "chronos/integrations"
|
|
34
36
|
require "chronos/integrations/rack"
|
|
@@ -38,7 +40,7 @@ require "chronos/integrations/rack/middleware"
|
|
|
38
40
|
#
|
|
39
41
|
# @responsibility Configure the agent and expose its small lifecycle API.
|
|
40
42
|
# @motivation Give applications a stable entry point while internals evolve.
|
|
41
|
-
# @limits
|
|
43
|
+
# @limits Rails integration remains optional and must be loaded through chronos/rails.
|
|
42
44
|
# @collaborators Configuration and Agent.
|
|
43
45
|
# @thread_safety Agent replacement and lookup are protected by a mutex.
|
|
44
46
|
# @compatibility Ruby 2.2.10 through Ruby 2.6.
|
|
@@ -95,6 +97,35 @@ module Chronos
|
|
|
95
97
|
false
|
|
96
98
|
end
|
|
97
99
|
|
|
100
|
+
def record_event(event_type, payload = {}, context = {})
|
|
101
|
+
agent = current_agent
|
|
102
|
+
agent ? agent.record_event(event_type, payload, context) : false
|
|
103
|
+
rescue StandardError
|
|
104
|
+
false
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Returns only trace/request identifiers for optional process-boundary adapters.
|
|
108
|
+
def propagation_context
|
|
109
|
+
agent = current_agent
|
|
110
|
+
agent ? agent.propagation_context : {}
|
|
111
|
+
rescue StandardError
|
|
112
|
+
{}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def notify_once(exception, context = {})
|
|
116
|
+
agent = current_agent
|
|
117
|
+
agent ? agent.notify_once(exception, context) : false
|
|
118
|
+
rescue StandardError
|
|
119
|
+
false
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def rails_integration_options(environment = nil, console = false)
|
|
123
|
+
agent = current_agent
|
|
124
|
+
agent ? agent.rails_integration_options(environment, console) : {:enabled => false}
|
|
125
|
+
rescue StandardError
|
|
126
|
+
{:enabled => false}
|
|
127
|
+
end
|
|
128
|
+
|
|
98
129
|
def configured?
|
|
99
130
|
!current_agent.nil?
|
|
100
131
|
end
|
|
@@ -124,3 +155,5 @@ module Chronos
|
|
|
124
155
|
end
|
|
125
156
|
end
|
|
126
157
|
end
|
|
158
|
+
|
|
159
|
+
require "chronos/rails" if defined?(::Rails::Railtie)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "rails/generators"
|
|
2
|
+
|
|
3
|
+
module Chronos
|
|
4
|
+
module Generators
|
|
5
|
+
# Generates the explicit Chronos initializer for legacy Rails applications.
|
|
6
|
+
#
|
|
7
|
+
# @responsibility Copy one documented initializer into config/initializers.
|
|
8
|
+
# @motivation Keep credentials explicit and avoid automatic environment scanning.
|
|
9
|
+
# @limits It does not modify routes, application classes, or Gemfiles.
|
|
10
|
+
# @collaborators Rails::Generators::Base file-copy API.
|
|
11
|
+
# @thread_safety Generator instances are used serially by the Rails command.
|
|
12
|
+
# @compatibility Rails generator APIs available in Rails 4.2 through Rails 5.2.
|
|
13
|
+
# @example
|
|
14
|
+
# rails generate chronos:install
|
|
15
|
+
# @errors Existing-file conflict handling is delegated to Rails generators.
|
|
16
|
+
# @performance Copies one small text file.
|
|
17
|
+
class InstallGenerator < ::Rails::Generators::Base
|
|
18
|
+
source_root File.expand_path("templates", __dir__)
|
|
19
|
+
|
|
20
|
+
def create_initializer
|
|
21
|
+
copy_file "chronos.rb", "config/initializers/chronos.rb"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "chronos/rails"
|
|
2
|
+
|
|
3
|
+
Chronos.configure do |config|
|
|
4
|
+
# Chronos reads only the environment variables explicitly selected here.
|
|
5
|
+
config.project_id = ENV["CHRONOS_PROJECT_ID"]
|
|
6
|
+
config.project_key = ENV["CHRONOS_PROJECT_KEY"]
|
|
7
|
+
config.host = ENV["CHRONOS_HOST"]
|
|
8
|
+
config.environment = Rails.env.to_s
|
|
9
|
+
config.service_name = ENV["CHRONOS_SERVICE_NAME"]
|
|
10
|
+
config.app_version = ENV["CHRONOS_APP_VERSION"]
|
|
11
|
+
config.logger = Rails.logger if Rails.respond_to?(:logger)
|
|
12
|
+
|
|
13
|
+
# Safe legacy defaults: test and console integrations remain disabled.
|
|
14
|
+
config.rails_capture_in_test = false
|
|
15
|
+
config.rails_capture_in_console = false
|
|
16
|
+
config.rails_capture_user_agent = false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Safe when the Railtie already ran or will run later; installation is idempotent.
|
|
20
|
+
Chronos::Rails::Installer.new.install(Rails.application)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chronos-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0.pre.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Antonio Jefferson
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-07-
|
|
11
|
+
date: 2026-07-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -88,6 +88,7 @@ files:
|
|
|
88
88
|
- SECURITY.md
|
|
89
89
|
- contracts/event-v1.schema.json
|
|
90
90
|
- contracts/rack-context-v1.schema.json
|
|
91
|
+
- contracts/sidekiq-job-v1.schema.json
|
|
91
92
|
- docs/adr/ADR-001-core-and-integrations.md
|
|
92
93
|
- docs/adr/ADR-002-version-lines.md
|
|
93
94
|
- docs/adr/ADR-003-net-http-legacy-transport.md
|
|
@@ -96,6 +97,8 @@ files:
|
|
|
96
97
|
- docs/adr/ADR-006-versioned-event-contract.md
|
|
97
98
|
- docs/adr/ADR-011-bounded-resilience-and-remote-control.md
|
|
98
99
|
- docs/adr/ADR-012-rack-context-isolation.md
|
|
100
|
+
- docs/adr/ADR-013-legacy-rails-notifications.md
|
|
101
|
+
- docs/adr/ADR-014-sidekiq-envelope-context.md
|
|
99
102
|
- docs/architecture.md
|
|
100
103
|
- docs/compatibility.md
|
|
101
104
|
- docs/configuration.md
|
|
@@ -105,10 +108,13 @@ files:
|
|
|
105
108
|
- docs/modules/configuration.md
|
|
106
109
|
- docs/modules/notice-pipeline.md
|
|
107
110
|
- docs/modules/rack-context.md
|
|
111
|
+
- docs/modules/rails-legacy.md
|
|
108
112
|
- docs/modules/remote-configuration.md
|
|
109
113
|
- docs/modules/retry-backlog.md
|
|
110
114
|
- docs/modules/sanitization.md
|
|
111
115
|
- docs/modules/serialization.md
|
|
116
|
+
- docs/modules/sidekiq-legacy.md
|
|
117
|
+
- docs/modules/telemetry-events.md
|
|
112
118
|
- docs/modules/transport.md
|
|
113
119
|
- docs/performance.md
|
|
114
120
|
- docs/privacy-lgpd.md
|
|
@@ -120,11 +126,14 @@ files:
|
|
|
120
126
|
- lib/chronos/agent.rb
|
|
121
127
|
- lib/chronos/application.rb
|
|
122
128
|
- lib/chronos/application/capture_exception.rb
|
|
129
|
+
- lib/chronos/application/capture_telemetry.rb
|
|
123
130
|
- lib/chronos/application/circuit_breaker.rb
|
|
124
131
|
- lib/chronos/application/delivery_pipeline.rb
|
|
125
132
|
- lib/chronos/application/remote_configuration.rb
|
|
126
133
|
- lib/chronos/application/retry_policy.rb
|
|
127
134
|
- lib/chronos/configuration.rb
|
|
135
|
+
- lib/chronos/configuration/snapshot.rb
|
|
136
|
+
- lib/chronos/configuration/validation.rb
|
|
128
137
|
- lib/chronos/core.rb
|
|
129
138
|
- lib/chronos/core/backtrace_parser.rb
|
|
130
139
|
- lib/chronos/core/breadcrumb.rb
|
|
@@ -136,10 +145,13 @@ files:
|
|
|
136
145
|
- lib/chronos/core/safe_serializer.rb
|
|
137
146
|
- lib/chronos/core/sanitizer.rb
|
|
138
147
|
- lib/chronos/core/sensitive_value_filter.rb
|
|
148
|
+
- lib/chronos/core/telemetry_event.rb
|
|
139
149
|
- lib/chronos/errors.rb
|
|
140
150
|
- lib/chronos/integrations.rb
|
|
151
|
+
- lib/chronos/integrations/job_payload.rb
|
|
141
152
|
- lib/chronos/integrations/rack.rb
|
|
142
153
|
- lib/chronos/integrations/rack/middleware.rb
|
|
154
|
+
- lib/chronos/integrations/sidekiq.rb
|
|
143
155
|
- lib/chronos/internal.rb
|
|
144
156
|
- lib/chronos/internal/bounded_queue.rb
|
|
145
157
|
- lib/chronos/internal/memory_backlog.rb
|
|
@@ -148,9 +160,16 @@ files:
|
|
|
148
160
|
- lib/chronos/ports.rb
|
|
149
161
|
- lib/chronos/ports/context_store.rb
|
|
150
162
|
- lib/chronos/ports/transport.rb
|
|
163
|
+
- lib/chronos/rails.rb
|
|
164
|
+
- lib/chronos/rails/installer.rb
|
|
165
|
+
- lib/chronos/rails/notifications_subscriber.rb
|
|
166
|
+
- lib/chronos/rails/railtie.rb
|
|
151
167
|
- lib/chronos/ruby.rb
|
|
152
168
|
- lib/chronos/ruby/version.rb
|
|
169
|
+
- lib/chronos/sidekiq.rb
|
|
153
170
|
- lib/chronos/version.rb
|
|
171
|
+
- lib/generators/chronos/install/install_generator.rb
|
|
172
|
+
- lib/generators/chronos/install/templates/chronos.rb
|
|
154
173
|
homepage: https://github.com/antoniojefferson/chronos-ruby
|
|
155
174
|
licenses:
|
|
156
175
|
- MIT
|