solarwinds_apm 6.0.0.preV2 → 6.0.0.preV4

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/ext/oboe_metal/lib/liboboe-1.0-aarch64.so.sha256 +1 -1
  3. data/ext/oboe_metal/lib/liboboe-1.0-alpine-aarch64.so.sha256 +1 -1
  4. data/ext/oboe_metal/lib/liboboe-1.0-alpine-x86_64.so.sha256 +1 -1
  5. data/ext/oboe_metal/lib/liboboe-1.0-x86_64.so.sha256 +1 -1
  6. data/ext/oboe_metal/src/VERSION +1 -2
  7. data/ext/oboe_metal/src/oboe.h +0 -12
  8. data/ext/oboe_metal/src/oboe_swig_wrap.cc +5 -5
  9. data/lib/rails/generators/solarwinds_apm/templates/solarwinds_apm_initializer.rb +1 -9
  10. data/lib/solarwinds_apm/api/current_trace_info.rb +0 -1
  11. data/lib/solarwinds_apm/api/opentelemetry.rb +39 -0
  12. data/lib/solarwinds_apm/api/transaction_name.rb +17 -17
  13. data/lib/solarwinds_apm/api.rb +2 -0
  14. data/lib/solarwinds_apm/config.rb +3 -19
  15. data/lib/solarwinds_apm/constants.rb +2 -4
  16. data/lib/solarwinds_apm/noop/context.rb +1 -1
  17. data/lib/solarwinds_apm/oboe_init_options.rb +2 -5
  18. data/lib/solarwinds_apm/opentelemetry/solarwinds_exporter.rb +92 -87
  19. data/lib/solarwinds_apm/opentelemetry/solarwinds_processor.rb +18 -17
  20. data/lib/solarwinds_apm/opentelemetry/solarwinds_propagator.rb +28 -28
  21. data/lib/solarwinds_apm/opentelemetry/solarwinds_response_propagator.rb +9 -14
  22. data/lib/solarwinds_apm/opentelemetry/solarwinds_sampler.rb +122 -170
  23. data/lib/solarwinds_apm/otel_config.rb +47 -28
  24. data/lib/solarwinds_apm/support/lumberjack_formatter.rb +17 -2
  25. data/lib/solarwinds_apm/support/swomarginalia/swomarginalia.rb +5 -4
  26. data/lib/solarwinds_apm/support/transaction_cache.rb +27 -2
  27. data/lib/solarwinds_apm/support/transaction_settings.rb +2 -2
  28. data/lib/solarwinds_apm/support/txn_name_manager.rb +34 -17
  29. data/lib/solarwinds_apm/support/utils.rb +24 -0
  30. data/lib/solarwinds_apm/support.rb +2 -4
  31. data/lib/solarwinds_apm/version.rb +1 -1
  32. data/lib/solarwinds_apm.rb +2 -2
  33. metadata +13 -13
  34. data/lib/oboe.rb +0 -7
  35. data/lib/solarwinds_apm/support/transformer.rb +0 -56
@@ -6,12 +6,12 @@ module SolarWindsAPM
6
6
  module OTelConfig
7
7
  @@config = {}
8
8
  @@config_map = {}
9
-
9
+
10
10
  @@agent_enabled = true
11
11
 
12
12
  def self.disable_agent
13
13
  return unless @@agent_enabled # only show the msg once
14
-
14
+
15
15
  @@agent_enabled = false
16
16
  SolarWindsAPM.logger.warn {"[#{name}/#{__method__}] Agent disabled. No Trace exported."}
17
17
  end
@@ -25,36 +25,54 @@ module SolarWindsAPM
25
25
  def self.resolve_sampler
26
26
 
27
27
  resolve_sampler_config
28
- @@config[:sampler] =
28
+ @@config[:sampler] =
29
29
  ::OpenTelemetry::SDK::Trace::Samplers.parent_based(
30
30
  root: SolarWindsAPM::OpenTelemetry::SolarWindsSampler.new(@@config[:sampler_config]),
31
31
  remote_parent_sampled: SolarWindsAPM::OpenTelemetry::SolarWindsSampler.new(@@config[:sampler_config]),
32
32
  remote_parent_not_sampled: SolarWindsAPM::OpenTelemetry::SolarWindsSampler.new(@@config[:sampler_config]))
33
33
  end
34
34
 
35
- def self.resolve_sampler_config
35
+ def self.resolve_sampler_config
36
36
  sampler_config = {}
37
- sampler_config["trigger_trace"] = "enabled"
37
+ sampler_config["trigger_trace"] = "enabled"
38
38
  sampler_config["trigger_trace"] = nil if ENV["SW_APM_TRIGGER_TRACING_MODE"] == 'disabled'
39
39
  @@config[:sampler_config] = sampler_config
40
40
  end
41
41
 
42
42
  #
43
43
  # append/add solarwinds_response_propagator into rack instrumentation
44
- #
45
- def self.resolve_for_response_propagator
46
- response_propagator = SolarWindsAPM::OpenTelemetry::SolarWindsResponsePropagator::TextMapPropagator.new
47
- if @@config_map["OpenTelemetry::Instrumentation::Rack"]
48
- if @@config_map["OpenTelemetry::Instrumentation::Rack"][:response_propagators].instance_of?(Array)
49
- @@config_map["OpenTelemetry::Instrumentation::Rack"][:response_propagators].append(response_propagator)
44
+ #
45
+ def self.resolve_response_propagator
46
+ response_propagator = SolarWindsAPM::OpenTelemetry::SolarWindsResponsePropagator::TextMapPropagator.new
47
+ rack_setting = @@config_map["OpenTelemetry::Instrumentation::Rack"]
48
+
49
+ if rack_setting
50
+ if rack_setting[:response_propagators].instance_of?(Array)
51
+ rack_setting[:response_propagators].append(response_propagator)
52
+ elsif rack_setting[:response_propagators].nil?
53
+ rack_setting[:response_propagators] = [response_propagator]
50
54
  else
51
- @@config_map["OpenTelemetry::Instrumentation::Rack"][:response_propagators] = [response_propagator]
55
+ SolarWindsAPM.logger.warn {"[#{name}/#{__method__}] Rack response propagator resolve failed. Provided type #{rack_setting[:response_propagators].class}, please provide Array e.g. [#{rack_setting[:response_propagators]}]"}
52
56
  end
53
57
  else
54
58
  @@config_map["OpenTelemetry::Instrumentation::Rack"] = {response_propagators: [response_propagator]}
55
59
  end
56
60
  end
57
61
 
62
+ def self.obfuscate_helper(instrumentation)
63
+ if @@config_map[instrumentation] # user provided the option
64
+ @@config_map[instrumentation][:db_statement] = :obfuscate unless @@config_map[instrumentation][:db_statement] # user provided the db_statement, ignore our default setting
65
+ else
66
+ @@config_map[instrumentation] = {db_statement: :obfuscate}
67
+ end
68
+ end
69
+
70
+ def self.obfuscate_query
71
+ obfuscate_helper("OpenTelemetry::Instrumentation::Dalli")
72
+ obfuscate_helper("OpenTelemetry::Instrumentation::Mysql2")
73
+ obfuscate_helper("OpenTelemetry::Instrumentation::PG")
74
+ end
75
+
58
76
  def self.[](key)
59
77
  @@config[key.to_sym]
60
78
  end
@@ -69,7 +87,7 @@ module SolarWindsAPM
69
87
  end
70
88
 
71
89
  def self.resolve_solarwinds_processor
72
- txn_manager = SolarWindsAPM::OpenTelemetry::TxnNameManager.new
90
+ txn_manager = SolarWindsAPM::TxnNameManager.new
73
91
  exporter = SolarWindsAPM::OpenTelemetry::SolarWindsExporter.new(txn_manager: txn_manager)
74
92
  @@config[:span_processor] = SolarWindsAPM::OpenTelemetry::SolarWindsProcessor.new(exporter, txn_manager)
75
93
  end
@@ -103,39 +121,40 @@ module SolarWindsAPM
103
121
  return unless @@agent_enabled
104
122
 
105
123
  resolve_sampler
106
-
124
+
107
125
  resolve_solarwinds_propagator
108
126
  resolve_solarwinds_processor
109
- resolve_for_response_propagator
127
+ resolve_response_propagator
128
+
129
+ obfuscate_query
110
130
 
111
131
  print_config if SolarWindsAPM.logger.level.zero?
112
132
 
113
- ENV['OTEL_TRACES_EXPORTER'] = 'none' if ENV['OTEL_TRACES_EXPORTER'].nil?
114
- ::OpenTelemetry::SDK.configure do |c|
115
- c.use_all(@@config_map)
116
- end
117
-
133
+ ENV['OTEL_TRACES_EXPORTER'] = 'none' if ENV['OTEL_TRACES_EXPORTER'].to_s.empty?
134
+
135
+ ::OpenTelemetry::SDK.configure { |c| c.use_all(@@config_map) }
136
+
118
137
  validate_propagator(::OpenTelemetry.propagation.instance_variable_get(:@propagators))
119
138
 
120
139
  return unless @@agent_enabled
121
140
 
122
141
  # append our propagators
123
- ::OpenTelemetry.propagation.instance_variable_get(:@propagators).append(@@config[:propagators])
124
-
125
- # append our processors (with our exporter)
142
+ ::OpenTelemetry.propagation.instance_variable_get(:@propagators).append(@@config[:propagators])
143
+
144
+ # append our processors (with our exporter)
126
145
  ::OpenTelemetry.tracer_provider.add_span_processor(@@config[:span_processor])
127
-
146
+
128
147
  # configure sampler afterwards
129
148
  ::OpenTelemetry.tracer_provider.sampler = @@config[:sampler]
130
149
  nil
131
150
  end
132
151
 
133
- #
152
+ #
134
153
  # Allow initialize after set new value to SolarWindsAPM::Config[:key]=value
135
- #
154
+ #
136
155
  # Usage:
137
- #
138
- # Default using the use_all to load all instrumentation
156
+ #
157
+ # Default using the use_all to load all instrumentation
139
158
  # But with specific instrumentation disabled, use {:enabled: false} in config
140
159
  # SolarWindsAPM::OTelConfig.initialize_with_config do |config|
141
160
  # config["OpenTelemetry::Instrumentation::Rack"] = {"a" => "b"}
@@ -1,6 +1,21 @@
1
- # Copyright (c) 2019 SolarWinds, LLC.
1
+ # Copyright (c) 2023 SolarWinds, LLC.
2
2
  # All rights reserved.
3
3
 
4
4
  require_relative 'logger_formatter'
5
5
 
6
- Lumberjack::Formatter.prepend(SolarWindsAPM::Logger::Formatter) if SolarWindsAPM.loaded && defined?(Lumberjack::Formatter)
6
+ module SolarWindsAPM
7
+ module Lumberjack
8
+ module LogEntry
9
+ include SolarWindsAPM::Logger::Formatter # provides #insert_trace_id
10
+
11
+ def initialize(time, severity, message, progname, pid, tags)
12
+ super if SolarWindsAPM::Config[:log_traceId] == :never
13
+
14
+ message = insert_trace_id(message)
15
+ super
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ Lumberjack::LogEntry.prepend(SolarWindsAPM::Lumberjack::LogEntry) if SolarWindsAPM.loaded && defined?(Lumberjack::LogEntry)
@@ -7,12 +7,13 @@ module SolarWindsAPM
7
7
  # This ActiveRecordInstrumentation should only work for activerecord < 7.0 since after rails 7
8
8
  # this module won't be prepend to activerecord
9
9
  module ActiveRecordInstrumentation
10
- def execute(sql, *args)
11
- super(annotate_sql(sql), *args)
10
+ def execute(sql, *args, **options)
11
+ super(annotate_sql(sql), *args, **options)
12
12
  end
13
13
 
14
- def execute_and_clear(sql, *args, &block)
15
- super(annotate_sql(sql), *args, &block)
14
+ # only for postgresql adapter
15
+ def execute_and_clear(sql, *args, **options)
16
+ super(annotate_sql(sql), *args, **options)
16
17
  end
17
18
 
18
19
  def exec_query(sql, *args, **options)
@@ -1,21 +1,46 @@
1
1
  module SolarWindsAPM
2
- # Simple TransactionCache
3
- # TODO: improve cache to have lru mechanism that avoid too many values
2
+ # LRU TransactionCache with initial limit 1000
4
3
  module TransactionCache
4
+ attr_reader :capacity
5
+
5
6
  def self.initialize
7
+ @capacity = 1000
6
8
  @cache = {}
9
+ @order = []
7
10
  end
8
11
 
9
12
  def self.get(key)
13
+ return nil unless @cache.has_key?(key)
14
+
15
+ @order.delete(key)
16
+ @order.push(key)
10
17
  @cache[key]
11
18
  end
12
19
 
13
20
  def self.del(key)
14
21
  @cache.delete(key)
22
+ @order.delete(key)
23
+ end
24
+
25
+ def self.clear
26
+ @cache.clear
27
+ @order.clear
28
+ end
29
+
30
+ def self.size
31
+ @cache.size
15
32
  end
16
33
 
17
34
  def self.set(key, value)
35
+ if @cache.has_key?(key)
36
+ @cache.delete(key)
37
+ elsif @order.size >= @capacity
38
+ evict_key = @order.shift
39
+ @cache.delete(evict_key)
40
+ end
41
+
18
42
  @cache[key] = value
43
+ @order.push(key)
19
44
  SolarWindsAPM.logger.debug {"[#{self.class}/#{__method__}] current TransactionCache #{@cache.inspect}"}
20
45
  end
21
46
  end
@@ -28,9 +28,9 @@ module SolarWindsAPM
28
28
  end
29
29
 
30
30
  def tracing_enabled?
31
- span_layer = "#{@name}:#{@kind}"
31
+ span_layer = "#{@kind}:#{@name}"
32
32
 
33
- enabled_regexps = SolarWindsAPM::Config[:enabled_regexps]
33
+ enabled_regexps = SolarWindsAPM::Config[:enabled_regexps]
34
34
  disabled_regexps = SolarWindsAPM::Config[:disabled_regexps]
35
35
 
36
36
  SolarWindsAPM.logger.debug {"[#{self.class}/#{__method__}] enabled_regexps: #{enabled_regexps&.inspect}"}
@@ -1,25 +1,42 @@
1
1
  module SolarWindsAPM
2
- module OpenTelemetry
3
- # SolarWindsTxnNameManager
4
- class TxnNameManager
5
- def initialize
6
- @cache = {}
7
- end
2
+ # SolarWindsTxnNameManager
3
+ class TxnNameManager
4
+ def initialize
5
+ @cache = {}
6
+ @root_context_h = {}
7
+ @mutex = Mutex.new
8
+ end
8
9
 
9
- def get(key)
10
- @cache[key]
11
- end
10
+ def get(key)
11
+ @cache[key]
12
+ end
12
13
 
13
- def del(key)
14
- @cache.delete(key)
15
- end
14
+ def del(key)
15
+ @cache.delete(key)
16
+ end
16
17
 
17
- def set(key, value)
18
- SolarWindsAPM.logger.debug {"[#{self.class}/#{__method__}] current cache #{@cache.inspect}"}
19
- @cache[key] = value
18
+ def set(key, value)
19
+ @cache[key] = value
20
+ SolarWindsAPM.logger.debug {"[#{self.class}/#{__method__}] txn manager current cache #{@cache.inspect}"}
21
+ end
22
+
23
+ alias []= set
24
+
25
+ def set_root_context_h(key, value)
26
+ @mutex.synchronize do
27
+ @root_context_h[key] = value
20
28
  end
29
+ SolarWindsAPM.logger.debug {"[#{self.class}/#{__method__}] txn manager current root_context_h #{@root_context_h.inspect}"}
30
+ end
21
31
 
22
- alias []= set
32
+ def get_root_context_h(key)
33
+ @root_context_h[key]
34
+ end
35
+
36
+ def delete_root_context_h(key)
37
+ @mutex.synchronize do
38
+ @root_context_h.delete(key)
39
+ end
23
40
  end
24
41
  end
25
- end
42
+ end
@@ -0,0 +1,24 @@
1
+ module SolarWindsAPM
2
+ # Utils
3
+ class Utils
4
+ VERSION = '00'.freeze
5
+
6
+ def self.trace_state_header(trace_state)
7
+ return nil if trace_state.nil?
8
+
9
+ arr = []
10
+ trace_state.to_h.each { |key, value| arr << "#{key}=#{value}" }
11
+ header = arr.join(",")
12
+ SolarWindsAPM.logger.debug {"[#{name}/#{__method__}] generated trace_state_header: #{header}"}
13
+ header
14
+ end
15
+
16
+ # Generates a liboboe W3C compatible trace_context from provided OTel span context.
17
+ def self.traceparent_from_context(span_context)
18
+ flag = span_context.trace_flags.sampled?? 1 : 0
19
+ xtr = "#{VERSION}-#{span_context.hex_trace_id}-#{span_context.hex_span_id}-0#{flag}"
20
+ SolarWindsAPM.logger.debug {"[#{name}/#{__method__}] generated traceparent: #{xtr} from #{span_context.inspect}"}
21
+ xtr
22
+ end
23
+ end
24
+ end
@@ -11,7 +11,7 @@ require_relative './support/transaction_cache'
11
11
  require_relative './support/transaction_settings'
12
12
  require_relative './support/oboe_tracing_mode'
13
13
  require_relative './support/txn_name_manager'
14
- require_relative './support/transformer'
14
+ require_relative './support/utils'
15
15
  require_relative './support/x_trace_options'
16
16
 
17
17
  if SolarWindsAPM::Config[:tag_sql]
@@ -31,10 +31,8 @@ if SolarWindsAPM::Config[:tag_sql]
31
31
  SolarWindsAPM.logger.info {"For more information, please check https://api.rubyonrails.org/classes/ActiveRecord/QueryLogs.html"}
32
32
  require_relative './support/swomarginalia/comment'
33
33
  end
34
- elsif defined?(::ActiveRecord) && ::ActiveRecord.version.to_s < '7'
34
+ elsif defined?(::ActiveRecord)
35
35
  require_relative './support/swomarginalia/load_swomarginalia'
36
36
  SolarWindsAPM::SWOMarginalia::LoadSWOMarginalia.insert
37
- else
38
- SolarWindsAPM.logger.info {"tag_sql currently is not supported in non-rails app that use active_record > 7"}
39
37
  end
40
38
  end
@@ -9,7 +9,7 @@ module SolarWindsAPM
9
9
  MAJOR = 6 # breaking,
10
10
  MINOR = 0 # feature,
11
11
  PATCH = 0 # fix => BFF
12
- PRE = 'preV2'.freeze # for pre-releases into packagecloud, set to nil for production releases into rubygems
12
+ PRE = 'preV4'.freeze # for pre-releases into packagecloud, set to nil for production releases into rubygems
13
13
 
14
14
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
15
15
  end
@@ -2,8 +2,8 @@
2
2
  # All rights reserved.
3
3
 
4
4
  begin
5
- if ENV.has_key?('SOLARWINDS_APM_ENABLED') && (ENV['SOLARWINDS_APM_ENABLED'] == 'false' || ENV['SOLARWINDS_APM_ENABLED'] == false)
6
- SolarWindsAPM.logger.warn 'SOLARWINDS_APM_ENABLED environment variable detected and was set to false; SolarWindsAPM disabled'
5
+ if ENV.has_key?('SW_APM_ENABLED') && (ENV['SW_APM_ENABLED'] == 'false' || ENV['SW_APM_ENABLED'] == false)
6
+ SolarWindsAPM.logger.warn 'SW_APM_ENABLED environment variable detected and was set to false; SolarWindsAPM disabled'
7
7
  return
8
8
  end
9
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solarwinds_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0.preV2
4
+ version: 6.0.0.preV4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maia Engeli
@@ -11,34 +11,34 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-08-08 00:00:00.000000000 Z
14
+ date: 2023-09-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: opentelemetry-sdk
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - "~>"
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.2.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: 1.2.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: opentelemetry-instrumentation-all
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - "~>"
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
36
  version: 0.31.0
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - "~>"
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: 0.31.0
44
44
  - !ruby/object:Gem::Dependency
@@ -59,16 +59,16 @@ dependencies:
59
59
  name: opentelemetry-exporter-otlp
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - "~>"
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: 0.24.0
64
+ version: 0.24.2
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - "~>"
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: 0.24.0
71
+ version: 0.24.2
72
72
  description: Automatic tracing and metrics for Ruby applications. Get started at cloud.solarwinds.com
73
73
  email: technicalsupport@solarwinds.com
74
74
  executables: []
@@ -92,13 +92,13 @@ files:
92
92
  - ext/oboe_metal/src/oboe_api.h
93
93
  - ext/oboe_metal/src/oboe_debug.h
94
94
  - ext/oboe_metal/src/oboe_swig_wrap.cc
95
- - lib/oboe.rb
96
95
  - lib/oboe_metal.rb
97
96
  - lib/rails/generators/solarwinds_apm/install_generator.rb
98
97
  - lib/rails/generators/solarwinds_apm/templates/solarwinds_apm_initializer.rb
99
98
  - lib/solarwinds_apm.rb
100
99
  - lib/solarwinds_apm/api.rb
101
100
  - lib/solarwinds_apm/api/current_trace_info.rb
101
+ - lib/solarwinds_apm/api/opentelemetry.rb
102
102
  - lib/solarwinds_apm/api/tracing.rb
103
103
  - lib/solarwinds_apm/api/transaction_name.rb
104
104
  - lib/solarwinds_apm/base.rb
@@ -130,8 +130,8 @@ files:
130
130
  - lib/solarwinds_apm/support/swomarginalia/swomarginalia.rb
131
131
  - lib/solarwinds_apm/support/transaction_cache.rb
132
132
  - lib/solarwinds_apm/support/transaction_settings.rb
133
- - lib/solarwinds_apm/support/transformer.rb
134
133
  - lib/solarwinds_apm/support/txn_name_manager.rb
134
+ - lib/solarwinds_apm/support/utils.rb
135
135
  - lib/solarwinds_apm/support/x_trace_options.rb
136
136
  - lib/solarwinds_apm/support_report.rb
137
137
  - lib/solarwinds_apm/thread_local.rb
@@ -152,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
152
  requirements:
153
153
  - - ">="
154
154
  - !ruby/object:Gem::Version
155
- version: 2.5.0
155
+ version: 2.7.0
156
156
  required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - ">"
data/lib/oboe.rb DELETED
@@ -1,7 +0,0 @@
1
- # Copyright (c) 2016 SolarWinds, LLC.
2
- # All rights reserved.
3
-
4
- # This module is provided for backward compatibility.
5
- # It simply redirects to the solarwinds_apm module which will
6
- # also load backward compatibility support.
7
- require 'solarwinds_apm'
@@ -1,56 +0,0 @@
1
- module SolarWindsAPM
2
- module OpenTelemetry
3
- # Transformer
4
- class Transformer
5
- VERSION = '00'.freeze
6
-
7
- def self.sw_from_context(span_context)
8
- flag = span_context.trace_flags.sampled?? 1 : 0
9
- "#{span_context.hex_span_id}-0#{flag}"
10
- end
11
-
12
- def self.trace_state_header(trace_state)
13
- arr = []
14
- trace_state.to_h.each do |key, value|
15
- arr << "#{key}=#{value}"
16
- end
17
- arr.join(",")
18
- end
19
-
20
- # Generates a liboboe W3C compatible trace_context from provided OTel span context.
21
- def self.traceparent_from_context(span_context)
22
- flag = span_context.trace_flags.sampled?? 1 : 0
23
- xtr = "#{VERSION}-#{span_context.hex_trace_id}-#{span_context.hex_span_id}-0#{flag}"
24
- SolarWindsAPM.logger.debug("Generated traceparent #{xtr} from #{span_context.inspect}")
25
- xtr
26
- end
27
-
28
- # Formats tracestate sw value from span_id and liboboe decision as 16-byte span_id with 8-bit trace_flags
29
- # e.g. 1a2b3c4d5e6f7g8h-01
30
- def self.sw_from_span_and_decision(span_id, decision)
31
- [span_id, decision].join("-")
32
- end
33
-
34
- # trace_flags [Integer]
35
- def self.trace_flags_from_int(trace_flags)
36
- "0#{trace_flags}"
37
- end
38
-
39
- def self.trace_flags_from_boolean(trace_flags)
40
- trace_flags == true ? "01" : "00"
41
- end
42
-
43
- def self.sampled?(decision)
44
- decision == ::OpenTelemetry::SDK::Trace::Samplers::Decision::RECORD_AND_SAMPLE
45
- end
46
-
47
- def self.span_id_from_sw(sw_value)
48
- sw_value.split("-")[0]
49
- end
50
-
51
- def self.create_key(name_)
52
- ::OpenTelemetry::Context.create_key(name_)
53
- end
54
- end
55
- end
56
- end