logister-ruby 0.5.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a71c622e00652d3d7cc881b852987bb0c16ce383456e8c6f1aaacb4d195bbca1
4
- data.tar.gz: 3ce350703b176ce69a72bc96a2a860f29d615a5132ee242c0a0b39fbdb1bb54d
3
+ metadata.gz: 831c1daef24ddf24e6b74e58b22abf58280881bc1b6db683819198e5f6808c03
4
+ data.tar.gz: 1682771b953d6db5f323b33013c97618945bf3ff95b1c3117ae513c09e565d4c
5
5
  SHA512:
6
- metadata.gz: e62e74979448480d5d383c08b0b53f0f3e39789aa4ee050d85debe6a9a5c4b922779a5866fe4d48632bc96f3346c8b69799b63d92f2bd5c4152e866037d16fe0
7
- data.tar.gz: ae516f75badb5bc30013410e9c540fb8066a63edd2c637ae320d26dc01016e660178f83a0da8b456b0b0efedd850af34bd6d6703b9693cd16d4c4878cf35b36a
6
+ metadata.gz: 5580094db13b735ec710752d10633d646f4975ebc48cc4720ea224af883e75c353f9afd724f4e7d41dddf32169498a4fea6f3c2bb1fb6bba0272cb72826ec094
7
+ data.tar.gz: bae736ef8c2fff8e37b87fe10b21d5ce9162917c5ae24d63aa58c52396f0f0f8b74101a782840d86aba98eb90d1a6b4ebe73c39bc76b61dc6aaaeb58c5771856
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.5.1 - 2026-09-26
4
+
5
+ - Restore the enclosing request or job scope after inline and nested Active Job executions, including failures, preserving request tracing, breadcrumbs, and dependencies while keeping job telemetry isolated.
6
+ - Capture request identity before invoking the Rack app so response headers stay stable if ambient context changes; clear request summaries using that captured identity during cleanup.
7
+
3
8
  ## v0.5.0 - 2026-09-24
4
9
 
5
10
  - Propagate W3C request context through Rack and Rails, including logs, errors, transactions, and server spans.
@@ -15,24 +15,23 @@ module Logister
15
15
 
16
16
  included do
17
17
  around_perform do |job, block|
18
- Logister::ContextStore.reset_request_scope!
19
- Logister.add_breadcrumb(
20
- category: "job",
21
- message: "Starting #{job.class.name}",
22
- data: { queue: job.queue_name, jobId: job.job_id }
23
- )
24
- started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
25
-
26
- begin
27
- block.call
28
- rescue StandardError => error
29
- Logister.report_error(
30
- error,
31
- context: Logister::ActiveJobReporter.build_job_error_context(job, started_at: started_at)
18
+ Logister::ContextStore.with_request_scope do
19
+ Logister.add_breadcrumb(
20
+ category: "job",
21
+ message: "Starting #{job.class.name}",
22
+ data: { queue: job.queue_name, jobId: job.job_id }
32
23
  )
33
- raise
34
- ensure
35
- Logister::ContextStore.reset_request_scope!
24
+ started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
25
+
26
+ begin
27
+ block.call
28
+ rescue StandardError => error
29
+ Logister.report_error(
30
+ error,
31
+ context: Logister::ActiveJobReporter.build_job_error_context(job, started_at: started_at)
32
+ )
33
+ raise
34
+ end
36
35
  end
37
36
  end
38
37
  end
@@ -12,6 +12,16 @@ module Logister
12
12
  }
13
13
  end
14
14
 
15
+ # Jobs may run inline inside a request or another job. Keep the complete
16
+ # caller scope intact while collecting this execution's telemetry separately.
17
+ def with_request_scope
18
+ previous_scope = Thread.current[REQUEST_SCOPE_KEY]
19
+ reset_request_scope!
20
+ yield
21
+ ensure
22
+ Thread.current[REQUEST_SCOPE_KEY] = previous_scope
23
+ end
24
+
15
25
  def add_breadcrumb(category:, message:, data: {}, level: "info", timestamp: Time.now.utc.iso8601)
16
26
  scope = request_scope
17
27
  breadcrumbs = scope[:breadcrumbs]
@@ -12,13 +12,14 @@ module Logister
12
12
 
13
13
  def call(env)
14
14
  Logister::ContextStore.reset_request_scope!
15
- Logister::ContextStore.trace_context = Logister::TraceContext.from_headers(
15
+ trace_context = Logister::TraceContext.from_headers(
16
16
  traceparent: env["HTTP_TRACEPARENT"], request_id: env["action_dispatch.request_id"] || env["HTTP_X_REQUEST_ID"]
17
17
  )
18
- env["logister.trace_context"] = Logister::ContextStore.trace_context
18
+ Logister::ContextStore.trace_context = trace_context
19
+ env["logister.trace_context"] = trace_context
19
20
  started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
20
21
  status, headers, body = @app.call(env)
21
- headers = headers.merge("x-request-id" => Logister::ContextStore.trace_context.request_id)
22
+ headers = headers.merge("x-request-id" => trace_context.request_id)
22
23
  [status, headers, body]
23
24
  rescue StandardError => e
24
25
  request = ActionDispatch::Request.new(env)
@@ -30,6 +31,7 @@ module Logister
30
31
  )
31
32
  raise
32
33
  ensure
34
+ Logister::ContextStore.clear_request_summary(trace_context&.request_id)
33
35
  request_id = env["action_dispatch.request_id"]
34
36
  Logister::ContextStore.clear_request_summary(request_id)
35
37
  Logister::ContextStore.reset_request_scope!
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logister
4
- VERSION = '0.5.0'
4
+ VERSION = '0.5.1'
5
5
  end
@@ -28,5 +28,6 @@ Gem::Specification.new do |spec|
28
28
  # ActiveSupport 8 passes JSON.parse options positionally; JSON 3 removed that API.
29
29
  spec.add_dependency 'json', '>= 2', '< 3'
30
30
  spec.add_development_dependency 'actionpack', '>= 8.0.5', '< 9'
31
+ spec.add_development_dependency 'activejob', '>= 8.0.5', '< 9'
31
32
  spec.add_development_dependency 'rake', '>= 13.0'
32
33
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logister-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Logister
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-09-24 00:00:00.000000000 Z
10
+ date: 2026-09-26 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -69,6 +69,26 @@ dependencies:
69
69
  - - "<"
70
70
  - !ruby/object:Gem::Version
71
71
  version: '9'
72
+ - !ruby/object:Gem::Dependency
73
+ name: activejob
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 8.0.5
79
+ - - "<"
80
+ - !ruby/object:Gem::Version
81
+ version: '9'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 8.0.5
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: '9'
72
92
  - !ruby/object:Gem::Dependency
73
93
  name: rake
74
94
  requirement: !ruby/object:Gem::Requirement