sentry-opentelemetry 6.3.1 → 6.4.0

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: 87748e3599ae6d335e57798ba09e0c6aca8949bbded34605968dd4d7e38d4377
4
- data.tar.gz: 7d88f8af58505b4239ac68deaddd7a9c9eccc18d6e3db40100254a890a5a7b3c
3
+ metadata.gz: daa7a9bda91b8495497e7f2d8df45011f9a69b436156ec15e1d03bc6631b8b06
4
+ data.tar.gz: c3d64746ab277a28c149e9aaeb1a4c6e80aa9379f13cdc3a004845cac7dd8edd
5
5
  SHA512:
6
- metadata.gz: 8339b7661c0372bd195f600a676a77781fb999009b730aed3a804814500933544e48b6e2d8881c5254756e7900284b9dc7f0861d2f91fb08a62729bcf77ce77a
7
- data.tar.gz: ecf2bf87d9a91e361fcfc7843c7501e67630b010a733a7bc75d624abefe0c3531608154d9ee0ee89f4849e748b5f03766063d7f10b5da86c0193c6c2d17016ee
6
+ metadata.gz: cf620bf63c5f2164bac179a53890d59b08f702d8c648337794a693d9da4f8c8f2bd2d7e88a2e19ddc7ca7adc229327ad25ba892719988350a2a0e5bd5909bb38
7
+ data.tar.gz: f542e467b5245b2d30198baeddcd001a716170e79aa91d68cd136787717a2e65c751b6fcbc805464318b76a9309528806388d166e1fd46e699c96245865dfe95
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "sentry/opentelemetry/otlp_setup"
4
+
5
+ module Sentry
6
+ class Configuration
7
+ # OTLP related configuration.
8
+ # @return [OTLP::Configuration]
9
+ attr_reader :otlp
10
+
11
+ after(:initialize) do
12
+ @otlp = OTLP::Configuration.new
13
+ end
14
+
15
+ after(:configured) do
16
+ Sentry::OpenTelemetry::OTLPSetup.setup(self) if otlp.enabled
17
+ end
18
+ end
19
+
20
+ module OTLP
21
+ class Configuration
22
+ attr_accessor :enabled
23
+ attr_accessor :setup_otlp_traces_exporter
24
+ attr_accessor :setup_propagator
25
+
26
+ def initialize
27
+ @enabled = false
28
+ @setup_otlp_traces_exporter = true
29
+ @setup_propagator = true
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sentry
4
+ module OpenTelemetry
5
+ class OTLPPropagator < Propagator
6
+ def inject(
7
+ carrier,
8
+ context: ::OpenTelemetry::Context.current,
9
+ setter: ::OpenTelemetry::Context::Propagation.text_map_setter
10
+ )
11
+ span_context = ::OpenTelemetry::Trace.current_span(context).context
12
+ return unless span_context.valid?
13
+
14
+ setter.set(carrier, SENTRY_TRACE_HEADER_NAME, to_sentry_trace(span_context))
15
+
16
+ baggage = context[SENTRY_BAGGAGE_KEY]
17
+ if baggage.is_a?(Sentry::Baggage)
18
+ baggage_string = baggage.serialize
19
+ setter.set(carrier, BAGGAGE_HEADER_NAME, baggage_string) unless baggage_string&.empty?
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def to_sentry_trace(span_context)
26
+ sampled = span_context.trace_flags.sampled? ? "1" : "0"
27
+ "#{span_context.hex_trace_id}-#{span_context.hex_span_id}-#{sampled}"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ require "sentry/opentelemetry/otlp_propagator"
5
+
6
+ module Sentry
7
+ module OpenTelemetry
8
+ module OTLPSetup
9
+ USER_AGENT = "sentry-ruby.otlp/#{Sentry::VERSION}"
10
+
11
+ class << self
12
+ def setup(config)
13
+ @dsn = config.dsn
14
+ @sdk_logger = config.sdk_logger
15
+ log_debug("[OTLP] Setting up OTLP integration")
16
+
17
+ setup_external_propagation_context
18
+ setup_otlp_exporter if config.otlp.setup_otlp_traces_exporter
19
+ setup_sentry_propagator if config.otlp.setup_propagator
20
+ end
21
+
22
+ private
23
+
24
+ def log_debug(message)
25
+ @sdk_logger&.debug(message)
26
+ end
27
+
28
+ def log_warn(message)
29
+ @sdk_logger&.warn(message)
30
+ end
31
+
32
+ def setup_external_propagation_context
33
+ log_debug("[OTLP] Setting up trace linking for all events")
34
+
35
+ Sentry.register_external_propagation_context do
36
+ span_context = ::OpenTelemetry::Trace.current_span.context
37
+ span_context.valid? ? [span_context.hex_trace_id, span_context.hex_span_id] : nil
38
+ end
39
+ end
40
+
41
+ def setup_otlp_exporter
42
+ return unless @dsn
43
+
44
+ log_debug("[OTLP] Setting up OTLP exporter")
45
+
46
+ begin
47
+ require "opentelemetry/exporter/otlp"
48
+ rescue LoadError
49
+ log_warn("[OTLP] opentelemetry-exporter-otlp gem is not installed. " \
50
+ "Please add it to your Gemfile to use the OTLP exporter.")
51
+ return
52
+ end
53
+
54
+ endpoint = "#{@dsn.server}#{@dsn.otlp_traces_endpoint}"
55
+ auth_header = @dsn.generate_auth_header(client: USER_AGENT)
56
+
57
+ log_debug("[OTLP] Sending traces to #{endpoint}")
58
+
59
+ exporter = ::OpenTelemetry::Exporter::OTLP::Exporter.new(
60
+ endpoint: endpoint,
61
+ headers: { "X-Sentry-Auth" => auth_header }
62
+ )
63
+
64
+ span_processor = ::OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter)
65
+ ::OpenTelemetry.tracer_provider.add_span_processor(span_processor)
66
+ end
67
+
68
+ def setup_sentry_propagator
69
+ log_debug("[OTLP] Setting up propagator for distributed tracing")
70
+ ::OpenTelemetry.propagation = OTLPPropagator.new
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sentry
4
4
  module OpenTelemetry
5
- VERSION = "6.3.1"
5
+ VERSION = "6.4.0"
6
6
  end
7
7
  end
@@ -6,3 +6,4 @@ require "opentelemetry-sdk"
6
6
  require "sentry/opentelemetry/version"
7
7
  require "sentry/opentelemetry/span_processor"
8
8
  require "sentry/opentelemetry/propagator"
9
+ require "sentry/opentelemetry/configuration"
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_dependency "sentry-ruby", "~> 6.3.1"
33
+ spec.add_dependency "sentry-ruby", "~> 6.4.0"
34
34
  spec.add_dependency "opentelemetry-sdk", "~> 1.0"
35
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-opentelemetry
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.1
4
+ version: 6.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 6.3.1
18
+ version: 6.4.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 6.3.1
25
+ version: 6.4.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: opentelemetry-sdk
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -55,19 +55,22 @@ files:
55
55
  - bin/console
56
56
  - bin/setup
57
57
  - lib/sentry-opentelemetry.rb
58
+ - lib/sentry/opentelemetry/configuration.rb
59
+ - lib/sentry/opentelemetry/otlp_propagator.rb
60
+ - lib/sentry/opentelemetry/otlp_setup.rb
58
61
  - lib/sentry/opentelemetry/propagator.rb
59
62
  - lib/sentry/opentelemetry/span_processor.rb
60
63
  - lib/sentry/opentelemetry/version.rb
61
64
  - sentry-opentelemetry.gemspec
62
- homepage: https://github.com/getsentry/sentry-ruby/tree/6.3.1/sentry-opentelemetry
65
+ homepage: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-opentelemetry
63
66
  licenses:
64
67
  - MIT
65
68
  metadata:
66
- homepage_uri: https://github.com/getsentry/sentry-ruby/tree/6.3.1/sentry-opentelemetry
67
- source_code_uri: https://github.com/getsentry/sentry-ruby/tree/6.3.1/sentry-opentelemetry
68
- changelog_uri: https://github.com/getsentry/sentry-ruby/blob/6.3.1/CHANGELOG.md
69
+ homepage_uri: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-opentelemetry
70
+ source_code_uri: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-opentelemetry
71
+ changelog_uri: https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md
69
72
  bug_tracker_uri: https://github.com/getsentry/sentry-ruby/issues
70
- documentation_uri: http://www.rubydoc.info/gems/sentry-opentelemetry/6.3.1
73
+ documentation_uri: http://www.rubydoc.info/gems/sentry-opentelemetry/6.4.0
71
74
  rdoc_options: []
72
75
  require_paths:
73
76
  - lib