opentelemetry-instrumentation-active_job 0.7.3 → 0.7.5

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: 6596ca74536a5ebd8fbff3e7529c419eaf1ae8338228916d6392c9f437f5874a
4
- data.tar.gz: 9cb094923456136ea279f8f12dfb9b21973d71478c95ea3f29f4af0ddc2cd925
3
+ metadata.gz: b2f611f3efbc3f35b9e0d58031844bc5d2ad060fc1e506b4a0725e28d376ea50
4
+ data.tar.gz: 65217a6e1ff43d6d3011581e9c811b8072e751b1cd49b873dabb1f1ac12ad9c2
5
5
  SHA512:
6
- metadata.gz: a3f8de8a994f503e226b18afe81a5dac2df0d98d0eb915b8c164777c50332836f29278b6af595ad7f93afb3c1d3436257034bf6e150914cdc572dbe76f31f6cc
7
- data.tar.gz: 189ec1ed576d3c7320bf3b633088934ed8aa1aec8c4f5530459e573f87e8fc63a829a329498082919ce5827ef05de092a0720f830887747a697ed5cc71c9f534
6
+ metadata.gz: fc1fddc77bd99891601c505684d7c418550b0b29067d5b0ffd030b41f7addaf8eec4f3419ae2cb0e2744622a9a38b1a395c2ec12f1dd93b4d1069079e9667097
7
+ data.tar.gz: 2e7250e62b5fac75799c73ca0b89e6217cac445b3cb477c9abb6a33197fa43682ce1533b0c7105dcd49dc2b71ea8496f524a870e293829cdd1b2ff1b8f7fcf83
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Release History: opentelemetry-instrumentation-active_job
2
2
 
3
+ ### v0.7.5 / 2024-08-15
4
+
5
+ * FIXED: Use Active Support Lazy Load Hooks to avoid prematurely initializing ActiveRecord::Base and ActiveJob::Base
6
+
7
+ ### v0.7.4 / 2024-07-30
8
+
9
+ * FIXED: Honour dynamic changes in configuration
10
+
3
11
  ### v0.7.3 / 2024-07-22
4
12
 
5
13
  * FIXED: ActiveJob::Handlers.unsubscribe
data/README.md CHANGED
@@ -6,7 +6,7 @@ The OpenTelemetry Active Job gem is a community maintained instrumentation for [
6
6
 
7
7
  Install the gem using:
8
8
 
9
- ```
9
+ ```console
10
10
  gem install opentelemetry-instrumentation-active_job
11
11
  ```
12
12
 
@@ -96,7 +96,7 @@ Example usage can be seen in the `./example/active_job.rb` file [here](https://g
96
96
 
97
97
  The `opentelemetry-instrumentation-active_job` gem source is [on github][repo-github], along with related gems including `opentelemetry-api` and `opentelemetry-sdk`.
98
98
 
99
- The OpenTelemetry Ruby gems are maintained by the OpenTelemetry-Ruby special interest group (SIG). You can get involved by joining us in [GitHub Discussions][discussions-url] or attending our weekly meeting. See the [meeting calendar][community-meetings] for dates and times. For more information on this and other language SIGs, see the OpenTelemetry [community page][ruby-sig].
99
+ The OpenTelemetry Ruby gems are maintained by the OpenTelemetry Ruby special interest group (SIG). You can get involved by joining us on our [GitHub Discussions][discussions-url], [Slack Channel][slack-channel] or attending our weekly meeting. See the [meeting calendar][community-meetings] for dates and times. For more information on this and other language SIGs, see the OpenTelemetry [community page][ruby-sig].
100
100
 
101
101
  ## License
102
102
 
@@ -108,4 +108,5 @@ The `opentelemetry-instrumentation-active_job` gem is distributed under the Apac
108
108
  [license-github]: https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/LICENSE
109
109
  [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
110
110
  [community-meetings]: https://github.com/open-telemetry/community#community-meetings
111
+ [slack-channel]: https://cloud-native.slack.com/archives/C01NWKKMKMY
111
112
  [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
@@ -40,7 +40,10 @@ module OpenTelemetry
40
40
  # @param payload [Hash] containing job run information
41
41
  # @return [Hash] with the span and generated context tokens
42
42
  def start_span(name, _id, payload)
43
- span = tracer.start_span(name, attributes: @mapper.call(payload))
43
+ job = payload.fetch(:job)
44
+ event_name = name.delete_suffix(".#{EVENT_NAMESPACE}")
45
+ span_name = span_name(job, event_name)
46
+ span = tracer.start_span(span_name, attributes: @mapper.call(payload))
44
47
  token = OpenTelemetry::Context.attach(OpenTelemetry::Trace.context_with_span(span))
45
48
 
46
49
  { span: span, ctx_token: token }
@@ -106,6 +109,18 @@ module OpenTelemetry
106
109
  def tracer
107
110
  OpenTelemetry::Instrumentation::ActiveJob::Instrumentation.instance.tracer
108
111
  end
112
+
113
+ private
114
+
115
+ def span_name(job, event_name)
116
+ prefix = if @config[:span_naming] == :job_class
117
+ job.class.name
118
+ else
119
+ job.queue_name
120
+ end
121
+
122
+ "#{prefix} #{event_name}"
123
+ end
109
124
  end
110
125
  end
111
126
  end
@@ -10,14 +10,7 @@ module OpenTelemetry
10
10
  module Handlers
11
11
  # Handles `enqueue.active_job` and `enqueue_at.active_job` to generate egress spans
12
12
  class Enqueue < Default
13
- def initialize(...)
14
- super
15
- @span_name_formatter = if @config[:span_naming] == :job_class
16
- ->(job) { "#{job.class.name} publish" }
17
- else
18
- ->(job) { "#{job.queue_name} publish" }
19
- end
20
- end
13
+ EVENT_NAME = 'publish'
21
14
 
22
15
  # Overrides the `Default#start_span` method to create an egress span
23
16
  # and registers it with the current context
@@ -28,7 +21,8 @@ module OpenTelemetry
28
21
  # @return [Hash] with the span and generated context tokens
29
22
  def start_span(name, _id, payload)
30
23
  job = payload.fetch(:job)
31
- span = tracer.start_span(@span_name_formatter.call(job), kind: :producer, attributes: @mapper.call(payload))
24
+ span_name = span_name(job, EVENT_NAME)
25
+ span = tracer.start_span(span_name, kind: :producer, attributes: @mapper.call(payload))
32
26
  OpenTelemetry.propagation.inject(job.__otel_headers) # This must be transmitted over the wire
33
27
  { span: span, ctx_token: OpenTelemetry::Context.attach(OpenTelemetry::Trace.context_with_span(span)) }
34
28
  end
@@ -10,14 +10,7 @@ module OpenTelemetry
10
10
  module Handlers
11
11
  # Handles perform.active_job to generate ingress spans
12
12
  class Perform < Default
13
- def initialize(...)
14
- super
15
- @span_name_formatter = if @config[:span_naming] == :job_class
16
- ->(job) { "#{job.class.name} process" }
17
- else
18
- ->(job) { "#{job.queue_name} process" }
19
- end
20
- end
13
+ EVENT_NAME = 'process'
21
14
 
22
15
  # Overrides the `Default#start_span` method to create an ingress span
23
16
  # and registers it with the current context
@@ -28,10 +21,9 @@ module OpenTelemetry
28
21
  # @return [Hash] with the span and generated context tokens
29
22
  def start_span(name, _id, payload)
30
23
  job = payload.fetch(:job)
24
+ span_name = span_name(job, EVENT_NAME)
31
25
  parent_context = OpenTelemetry.propagation.extract(job.__otel_headers)
32
26
 
33
- span_name = @span_name_formatter.call(job)
34
-
35
27
  # TODO: Refactor into a propagation strategy
36
28
  propagation_style = @config[:propagation_style]
37
29
  if propagation_style == :child
@@ -14,6 +14,8 @@ module OpenTelemetry
14
14
  module ActiveJob
15
15
  # Module that contains custom event handlers, which are used to generate spans per event
16
16
  module Handlers
17
+ EVENT_NAMESPACE = 'active_job'
18
+
17
19
  module_function
18
20
 
19
21
  # Subscribes Event Handlers to relevant ActiveJob notifications
@@ -57,7 +59,7 @@ module OpenTelemetry
57
59
  }
58
60
 
59
61
  @subscriptions = handlers_by_pattern.map do |key, handler|
60
- ::ActiveSupport::Notifications.subscribe("#{key}.active_job", handler)
62
+ ::ActiveSupport::Notifications.subscribe("#{key}.#{EVENT_NAMESPACE}", handler)
61
63
  end
62
64
  end
63
65
 
@@ -63,14 +63,17 @@ module OpenTelemetry
63
63
  end
64
64
 
65
65
  def require_dependencies
66
+ require 'active_support/lazy_load_hooks'
66
67
  require_relative 'patches/base'
67
68
  require_relative 'handlers'
68
69
  end
69
70
 
70
71
  def patch_activejob
71
- ::ActiveJob::Base.prepend(Patches::Base) unless ::ActiveJob::Base <= Patches::Base
72
-
73
72
  Handlers.subscribe
73
+
74
+ ActiveSupport.on_load(:active_job) do
75
+ ::ActiveJob::Base.prepend(Patches::Base) unless ::ActiveJob::Base <= Patches::Base
76
+ end
74
77
  end
75
78
  end
76
79
  end
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module ActiveJob
10
- VERSION = '0.7.3'
10
+ VERSION = '0.7.5'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-instrumentation-active_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-22 00:00:00.000000000 Z
11
+ date: 2024-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -232,10 +232,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
232
232
  licenses:
233
233
  - Apache-2.0
234
234
  metadata:
235
- changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_job/0.7.3/file/CHANGELOG.md
235
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_job/0.7.5/file/CHANGELOG.md
236
236
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/active_job
237
237
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
238
- documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_job/0.7.3
238
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-active_job/0.7.5
239
239
  post_install_message:
240
240
  rdoc_options: []
241
241
  require_paths: