solarwinds_apm 6.0.0.preV1 → 6.0.0.preV3
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 +4 -4
- data/LICENSE +28 -54
- data/ext/oboe_metal/extconf.rb +23 -23
- data/ext/oboe_metal/lib/liboboe-1.0-aarch64.so.sha256 +1 -1
- data/ext/oboe_metal/lib/liboboe-1.0-alpine-aarch64.so.sha256 +1 -1
- data/ext/oboe_metal/lib/liboboe-1.0-alpine-x86_64.so.sha256 +1 -1
- data/ext/oboe_metal/lib/liboboe-1.0-x86_64.so.sha256 +1 -1
- data/ext/oboe_metal/src/VERSION +1 -2
- data/ext/oboe_metal/src/init_solarwinds_apm.cc +0 -6
- data/ext/oboe_metal/src/oboe.h +0 -12
- data/ext/oboe_metal/src/oboe_swig_wrap.cc +5 -5
- data/lib/oboe_metal.rb +3 -3
- data/lib/rails/generators/solarwinds_apm/install_generator.rb +0 -3
- data/lib/rails/generators/solarwinds_apm/templates/solarwinds_apm_initializer.rb +8 -25
- data/lib/solarwinds_apm/api/current_trace_info.rb +1 -2
- data/lib/solarwinds_apm/api/opentelemetry.rb +39 -0
- data/lib/solarwinds_apm/api/transaction_name.rb +18 -17
- data/lib/solarwinds_apm/api.rb +2 -0
- data/lib/solarwinds_apm/config.rb +21 -63
- data/lib/solarwinds_apm/constants.rb +2 -4
- data/lib/solarwinds_apm/noop/context.rb +1 -1
- data/lib/solarwinds_apm/oboe_init_options.rb +11 -16
- data/lib/solarwinds_apm/opentelemetry/solarwinds_exporter.rb +92 -87
- data/lib/solarwinds_apm/opentelemetry/solarwinds_processor.rb +27 -23
- data/lib/solarwinds_apm/opentelemetry/solarwinds_propagator.rb +28 -28
- data/lib/solarwinds_apm/opentelemetry/solarwinds_response_propagator.rb +9 -14
- data/lib/solarwinds_apm/opentelemetry/solarwinds_sampler.rb +132 -175
- data/lib/solarwinds_apm/otel_config.rb +55 -36
- data/lib/solarwinds_apm/support/lumberjack_formatter.rb +17 -2
- data/lib/solarwinds_apm/support/swomarginalia/comment.rb +2 -2
- data/lib/solarwinds_apm/support/swomarginalia/swomarginalia.rb +6 -5
- data/lib/solarwinds_apm/support/transaction_cache.rb +27 -2
- data/lib/solarwinds_apm/support/transaction_settings.rb +10 -10
- data/lib/solarwinds_apm/support/txn_name_manager.rb +34 -17
- data/lib/solarwinds_apm/support/utils.rb +24 -0
- data/lib/solarwinds_apm/support.rb +4 -2
- data/lib/solarwinds_apm/version.rb +1 -1
- data/lib/solarwinds_apm.rb +3 -4
- metadata +18 -33
- data/lib/oboe.rb +0 -7
- data/lib/solarwinds_apm/noop/profiling.rb +0 -17
- data/lib/solarwinds_apm/support/transformer.rb +0 -56
@@ -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
|
-
|
15
|
-
|
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)
|
@@ -53,7 +54,7 @@ module SolarWindsAPM
|
|
53
54
|
# We don't want to trace framework caches.
|
54
55
|
# Only instrument SQL that directly hits the database.
|
55
56
|
def ignore_payload?(name)
|
56
|
-
%w
|
57
|
+
%w[SCHEMA EXPLAIN CACHE].include?(name.to_s)
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
@@ -1,21 +1,46 @@
|
|
1
1
|
module SolarWindsAPM
|
2
|
-
#
|
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
|
@@ -9,14 +9,14 @@ module SolarWindsAPM
|
|
9
9
|
SWO_TRACING_ENABLED = 1
|
10
10
|
SWO_TRACING_DISABLED = 0
|
11
11
|
|
12
|
-
def initialize(
|
13
|
-
@
|
14
|
-
@name
|
15
|
-
@kind
|
12
|
+
def initialize(url_path: '', name: '', kind: '')
|
13
|
+
@url_path = url_path
|
14
|
+
@name = name
|
15
|
+
@kind = kind
|
16
16
|
end
|
17
17
|
|
18
|
-
# calculate trace mode to set either 1 or 0 based on
|
19
|
-
# first check if
|
18
|
+
# calculate trace mode to set either 1 or 0 based on url_path and name+kind
|
19
|
+
# first check if url_path match, if not match, then match the name+kind
|
20
20
|
def calculate_trace_mode
|
21
21
|
tracing_mode_enabled? && tracing_enabled? ? SWO_TRACING_ENABLED : SWO_TRACING_DISABLED
|
22
22
|
end
|
@@ -28,16 +28,16 @@ module SolarWindsAPM
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def tracing_enabled?
|
31
|
-
span_layer = "#{@
|
31
|
+
span_layer = "#{@kind}:#{@name}"
|
32
32
|
|
33
|
-
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}"}
|
37
37
|
SolarWindsAPM.logger.debug {"[#{self.class}/#{__method__}] disabled_regexps: #{disabled_regexps&.inspect}"}
|
38
38
|
|
39
|
-
return false if disabled_regexps.is_a?(Array) && disabled_regexps.any? { |regex| regex.match?(@
|
40
|
-
return true if enabled_regexps.is_a?(Array) && enabled_regexps.any? { |regex| regex.match?(@
|
39
|
+
return false if disabled_regexps.is_a?(Array) && disabled_regexps.any? { |regex| regex.match?(@url_path) }
|
40
|
+
return true if enabled_regexps.is_a?(Array) && enabled_regexps.any? { |regex| regex.match?(@url_path) }
|
41
41
|
return false if disabled_regexps.is_a?(Array) && disabled_regexps.any? { |regex| regex.match?(span_layer) }
|
42
42
|
return true if enabled_regexps.is_a?(Array) && enabled_regexps.any? { |regex| regex.match?(span_layer) }
|
43
43
|
|
@@ -1,25 +1,42 @@
|
|
1
1
|
module SolarWindsAPM
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
# SolarWindsTxnNameManager
|
3
|
+
class TxnNameManager
|
4
|
+
def initialize
|
5
|
+
@cache = {}
|
6
|
+
@root_context_h = {}
|
7
|
+
@mutex = Mutex.new
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def get(key)
|
11
|
+
@cache[key]
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
def del(key)
|
15
|
+
@cache.delete(key)
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
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/
|
14
|
+
require_relative './support/utils'
|
15
15
|
require_relative './support/x_trace_options'
|
16
16
|
|
17
17
|
if SolarWindsAPM::Config[:tag_sql]
|
@@ -27,9 +27,11 @@ if SolarWindsAPM::Config[:tag_sql]
|
|
27
27
|
# }
|
28
28
|
# }
|
29
29
|
# ]
|
30
|
+
SolarWindsAPM.logger.info {"In Rails 7, tag tracecontext on a query by including SolarWindsAPM::SWOMarginalia::Comment.traceparent as function in config.active_record.query_log_tags."}
|
31
|
+
SolarWindsAPM.logger.info {"For more information, please check https://api.rubyonrails.org/classes/ActiveRecord/QueryLogs.html"}
|
30
32
|
require_relative './support/swomarginalia/comment'
|
31
33
|
end
|
32
|
-
|
34
|
+
elsif defined?(::ActiveRecord)
|
33
35
|
require_relative './support/swomarginalia/load_swomarginalia'
|
34
36
|
SolarWindsAPM::SWOMarginalia::LoadSWOMarginalia.insert
|
35
37
|
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 = '
|
12
|
+
PRE = 'preV3'.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
|
data/lib/solarwinds_apm.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# Copyright (c) 2016 SolarWinds, LLC.
|
2
2
|
# All rights reserved.
|
3
3
|
|
4
|
-
begin
|
5
|
-
|
6
|
-
|
7
|
-
SolarWindsAPM.logger.warn 'SOLARWINDS_APM_ENABLED environment variable detected and was set to false; SolarWindsAPM disabled'
|
4
|
+
begin
|
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'
|
8
7
|
return
|
9
8
|
end
|
10
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.
|
4
|
+
version: 6.0.0.preV3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maia Engeli
|
@@ -11,50 +11,36 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2023-
|
14
|
+
date: 2023-09-13 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
|
-
version: 1.2.
|
22
|
+
version: 1.2.1
|
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
|
-
version: 1.2.
|
29
|
+
version: 1.2.1
|
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
|
-
version: 0.
|
36
|
+
version: 0.33.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
|
-
version: 0.
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
|
-
name: ruby2_keywords
|
46
|
-
requirement: !ruby/object:Gem::Requirement
|
47
|
-
requirements:
|
48
|
-
- - "~>"
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 0.0.5
|
51
|
-
type: :runtime
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: 0.0.5
|
43
|
+
version: 0.33.0
|
58
44
|
- !ruby/object:Gem::Dependency
|
59
45
|
name: json
|
60
46
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,16 +59,16 @@ dependencies:
|
|
73
59
|
name: opentelemetry-exporter-otlp
|
74
60
|
requirement: !ruby/object:Gem::Requirement
|
75
61
|
requirements:
|
76
|
-
- - "
|
62
|
+
- - ">="
|
77
63
|
- !ruby/object:Gem::Version
|
78
|
-
version: 0.24.
|
64
|
+
version: 0.24.2
|
79
65
|
type: :development
|
80
66
|
prerelease: false
|
81
67
|
version_requirements: !ruby/object:Gem::Requirement
|
82
68
|
requirements:
|
83
|
-
- - "
|
69
|
+
- - ">="
|
84
70
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.24.
|
71
|
+
version: 0.24.2
|
86
72
|
description: Automatic tracing and metrics for Ruby applications. Get started at cloud.solarwinds.com
|
87
73
|
email: technicalsupport@solarwinds.com
|
88
74
|
executables: []
|
@@ -106,13 +92,13 @@ files:
|
|
106
92
|
- ext/oboe_metal/src/oboe_api.h
|
107
93
|
- ext/oboe_metal/src/oboe_debug.h
|
108
94
|
- ext/oboe_metal/src/oboe_swig_wrap.cc
|
109
|
-
- lib/oboe.rb
|
110
95
|
- lib/oboe_metal.rb
|
111
96
|
- lib/rails/generators/solarwinds_apm/install_generator.rb
|
112
97
|
- lib/rails/generators/solarwinds_apm/templates/solarwinds_apm_initializer.rb
|
113
98
|
- lib/solarwinds_apm.rb
|
114
99
|
- lib/solarwinds_apm/api.rb
|
115
100
|
- lib/solarwinds_apm/api/current_trace_info.rb
|
101
|
+
- lib/solarwinds_apm/api/opentelemetry.rb
|
116
102
|
- lib/solarwinds_apm/api/tracing.rb
|
117
103
|
- lib/solarwinds_apm/api/transaction_name.rb
|
118
104
|
- lib/solarwinds_apm/base.rb
|
@@ -123,7 +109,6 @@ files:
|
|
123
109
|
- lib/solarwinds_apm/noop/README.md
|
124
110
|
- lib/solarwinds_apm/noop/context.rb
|
125
111
|
- lib/solarwinds_apm/noop/metadata.rb
|
126
|
-
- lib/solarwinds_apm/noop/profiling.rb
|
127
112
|
- lib/solarwinds_apm/oboe_init_options.rb
|
128
113
|
- lib/solarwinds_apm/opentelemetry.rb
|
129
114
|
- lib/solarwinds_apm/opentelemetry/solarwinds_exporter.rb
|
@@ -145,8 +130,8 @@ files:
|
|
145
130
|
- lib/solarwinds_apm/support/swomarginalia/swomarginalia.rb
|
146
131
|
- lib/solarwinds_apm/support/transaction_cache.rb
|
147
132
|
- lib/solarwinds_apm/support/transaction_settings.rb
|
148
|
-
- lib/solarwinds_apm/support/transformer.rb
|
149
133
|
- lib/solarwinds_apm/support/txn_name_manager.rb
|
134
|
+
- lib/solarwinds_apm/support/utils.rb
|
150
135
|
- lib/solarwinds_apm/support/x_trace_options.rb
|
151
136
|
- lib/solarwinds_apm/support_report.rb
|
152
137
|
- lib/solarwinds_apm/thread_local.rb
|
@@ -167,14 +152,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
152
|
requirements:
|
168
153
|
- - ">="
|
169
154
|
- !ruby/object:Gem::Version
|
170
|
-
version: 2.
|
155
|
+
version: 2.7.0
|
171
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
157
|
requirements:
|
173
158
|
- - ">"
|
174
159
|
- !ruby/object:Gem::Version
|
175
160
|
version: 1.3.1
|
176
161
|
requirements: []
|
177
|
-
rubygems_version: 3.
|
162
|
+
rubygems_version: 3.3.26
|
178
163
|
signing_key:
|
179
164
|
specification_version: 4
|
180
165
|
summary: SolarWindsAPM performance instrumentation gem for Ruby
|
data/lib/oboe.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module SolarWindsAPM
|
2
|
-
# override the Ruby method, so that no code related to profiling gets executed
|
3
|
-
class Profiling
|
4
|
-
def self.run
|
5
|
-
yield
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
# these put the c-functions into "noop"
|
10
|
-
module CProfiler
|
11
|
-
def self.interval_setup(_); end
|
12
|
-
|
13
|
-
def self.tid
|
14
|
-
0
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -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
|