opentelemetry-instrumentation-active_job 0.7.3 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
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: