atatus 1.3.0 → 1.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile +72 -22
- data/LICENSE +1 -1
- data/atatus.gemspec +2 -2
- data/lib/atatus.rb +76 -16
- data/lib/atatus/agent.rb +78 -29
- data/lib/atatus/central_config.rb +72 -27
- data/lib/atatus/central_config/cache_control.rb +18 -1
- data/lib/atatus/child_durations.rb +64 -0
- data/lib/atatus/collector/base.rb +61 -29
- data/lib/atatus/collector/builder.rb +46 -2
- data/lib/atatus/collector/hist.rb +54 -0
- data/lib/atatus/collector/transport.rb +41 -11
- data/lib/atatus/config.rb +129 -28
- data/lib/atatus/config/bytes.rb +17 -0
- data/lib/atatus/config/duration.rb +17 -0
- data/lib/atatus/config/options.rb +29 -9
- data/lib/atatus/config/regexp_list.rb +17 -0
- data/lib/atatus/config/wildcard_pattern_list.rb +64 -0
- data/lib/atatus/context.rb +32 -1
- data/lib/atatus/context/request.rb +17 -0
- data/lib/atatus/context/request/socket.rb +18 -1
- data/lib/atatus/context/request/url.rb +17 -0
- data/lib/atatus/context/response.rb +27 -2
- data/lib/atatus/context/user.rb +17 -0
- data/lib/atatus/context_builder.rb +19 -4
- data/lib/atatus/deprecations.rb +17 -0
- data/lib/atatus/error.rb +27 -0
- data/lib/atatus/error/exception.rb +24 -0
- data/lib/atatus/error/log.rb +17 -0
- data/lib/atatus/error_builder.rb +17 -2
- data/lib/atatus/grape.rb +62 -0
- data/lib/atatus/graphql.rb +91 -0
- data/lib/atatus/grpc.rb +99 -0
- data/lib/atatus/instrumenter.rb +135 -30
- data/lib/atatus/internal_error.rb +17 -0
- data/lib/atatus/logging.rb +17 -2
- data/lib/atatus/metadata.rb +17 -0
- data/lib/atatus/metadata/process_info.rb +17 -0
- data/lib/atatus/metadata/service_info.rb +21 -6
- data/lib/atatus/metadata/system_info.rb +22 -3
- data/lib/atatus/metadata/system_info/container_info.rb +49 -10
- data/lib/atatus/metadata/system_info/hw_info.rb +1 -1
- data/lib/atatus/metrics.rb +69 -27
- data/lib/atatus/metrics/breakdown_set.rb +31 -0
- data/lib/atatus/metrics/{cpu_mem.rb → cpu_mem_set.rb} +110 -63
- data/lib/atatus/metrics/metric.rb +140 -0
- data/lib/atatus/metrics/set.rb +123 -0
- data/lib/atatus/metrics/span_scoped_set.rb +56 -0
- data/lib/atatus/metrics/transaction_set.rb +26 -0
- data/lib/atatus/metrics/vm_set.rb +58 -0
- data/lib/atatus/metricset.rb +48 -4
- data/lib/atatus/middleware.rb +28 -8
- data/lib/atatus/naively_hashable.rb +17 -0
- data/lib/atatus/normalizers.rb +23 -9
- data/lib/atatus/normalizers/grape.rb +22 -0
- data/lib/atatus/normalizers/grape/endpoint_run.rb +65 -0
- data/lib/atatus/normalizers/rails.rb +27 -0
- data/lib/atatus/normalizers/rails/action_controller.rb +44 -0
- data/lib/atatus/normalizers/rails/action_mailer.rb +43 -0
- data/lib/atatus/normalizers/{action_view.rb → rails/action_view.rb} +17 -0
- data/lib/atatus/normalizers/rails/active_record.rb +80 -0
- data/lib/atatus/opentracing.rb +75 -42
- data/lib/atatus/rails.rb +29 -13
- data/lib/atatus/railtie.rb +19 -6
- data/lib/atatus/resque.rb +29 -0
- data/lib/atatus/sinatra.rb +53 -0
- data/lib/atatus/span.rb +44 -15
- data/lib/atatus/span/context.rb +43 -28
- data/lib/atatus/span/context/db.rb +43 -0
- data/lib/atatus/span/context/destination.rb +77 -0
- data/lib/atatus/span/context/http.rb +43 -0
- data/lib/atatus/span_helpers.rb +18 -1
- data/lib/atatus/spies.rb +33 -15
- data/lib/atatus/spies/action_dispatch.rb +27 -6
- data/lib/atatus/spies/delayed_job.rb +26 -5
- data/lib/atatus/spies/dynamo_db.rb +62 -0
- data/lib/atatus/spies/elasticsearch.rb +53 -7
- data/lib/atatus/spies/faraday.rb +54 -20
- data/lib/atatus/spies/http.rb +36 -6
- data/lib/atatus/spies/json.rb +18 -0
- data/lib/atatus/spies/mongo.rb +41 -10
- data/lib/atatus/spies/net_http.rb +52 -11
- data/lib/atatus/spies/rake.rb +42 -23
- data/lib/atatus/spies/redis.rb +17 -0
- data/lib/atatus/spies/resque.rb +57 -0
- data/lib/atatus/spies/sequel.rb +54 -17
- data/lib/atatus/spies/shoryuken.rb +69 -0
- data/lib/atatus/spies/sidekiq.rb +46 -25
- data/lib/atatus/spies/sinatra.rb +20 -4
- data/lib/atatus/spies/sneakers.rb +74 -0
- data/lib/atatus/spies/sucker_punch.rb +58 -0
- data/lib/atatus/spies/tilt.rb +20 -1
- data/lib/atatus/sql.rb +36 -0
- data/lib/atatus/sql/signature.rb +169 -0
- data/lib/atatus/sql/tokenizer.rb +264 -0
- data/lib/atatus/sql/tokens.rb +63 -0
- data/lib/atatus/sql_summarizer.rb +24 -6
- data/lib/atatus/stacktrace.rb +17 -0
- data/lib/atatus/stacktrace/frame.rb +17 -3
- data/lib/atatus/stacktrace_builder.rb +23 -3
- data/lib/atatus/subscriber.rb +23 -4
- data/lib/atatus/trace_context.rb +84 -51
- data/lib/atatus/trace_context/traceparent.rb +111 -0
- data/lib/atatus/trace_context/tracestate.rb +148 -0
- data/lib/atatus/transaction.rb +74 -18
- data/lib/atatus/transport/base.rb +44 -27
- data/lib/atatus/transport/connection.rb +28 -72
- data/lib/atatus/transport/connection/http.rb +58 -35
- data/lib/atatus/transport/connection/proxy_pipe.rb +24 -5
- data/lib/atatus/transport/filters.rb +18 -1
- data/lib/atatus/transport/filters/hash_sanitizer.rb +77 -0
- data/lib/atatus/transport/filters/secrets_filter.rb +30 -55
- data/lib/atatus/transport/headers.rb +83 -0
- data/lib/atatus/transport/serializers.rb +17 -5
- data/lib/atatus/transport/serializers/context_serializer.rb +30 -3
- data/lib/atatus/transport/serializers/error_serializer.rb +17 -2
- data/lib/atatus/transport/serializers/metadata_serializer.rb +44 -22
- data/lib/atatus/transport/serializers/metricset_serializer.rb +34 -6
- data/lib/atatus/transport/serializers/span_serializer.rb +47 -12
- data/lib/atatus/transport/serializers/transaction_serializer.rb +18 -2
- data/lib/atatus/transport/user_agent.rb +48 -0
- data/lib/atatus/transport/worker.rb +31 -7
- data/lib/atatus/util.rb +18 -1
- data/lib/atatus/util/inflector.rb +17 -0
- data/lib/atatus/util/lru_cache.rb +17 -0
- data/lib/atatus/util/throttle.rb +17 -0
- data/lib/atatus/version.rb +19 -1
- metadata +46 -26
- data/Rakefile +0 -19
- data/bench/.gitignore +0 -2
- data/bench/app.rb +0 -53
- data/bench/benchmark.rb +0 -36
- data/bench/report.rb +0 -55
- data/bench/rubyprof.rb +0 -39
- data/bench/stackprof.rb +0 -23
- data/bin/build_docs +0 -5
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/bin/with_framework +0 -7
- data/lib/atatus/metrics/vm.rb +0 -60
- data/lib/atatus/normalizers/action_controller.rb +0 -27
- data/lib/atatus/normalizers/action_mailer.rb +0 -26
- data/lib/atatus/normalizers/active_record.rb +0 -45
- data/lib/atatus/util/prefixed_logger.rb +0 -18
- data/vendor/.gitkeep +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
# frozen_string_literal: true
|
|
19
|
+
|
|
20
|
+
module Atatus
|
|
21
|
+
module Normalizers
|
|
22
|
+
module ActionController
|
|
23
|
+
# @api private
|
|
24
|
+
class ProcessActionNormalizer < Normalizer
|
|
25
|
+
register 'process_action.action_controller'
|
|
26
|
+
|
|
27
|
+
TYPE = 'app'
|
|
28
|
+
SUBTYPE = 'controller'
|
|
29
|
+
ACTION = 'action'
|
|
30
|
+
|
|
31
|
+
def normalize(transaction, _name, payload)
|
|
32
|
+
transaction.name = endpoint(payload)
|
|
33
|
+
[transaction.name, TYPE, SUBTYPE, ACTION, nil]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def endpoint(payload)
|
|
39
|
+
"#{payload[:controller]}##{payload[:action]}"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
# frozen_string_literal: true
|
|
19
|
+
|
|
20
|
+
module Atatus
|
|
21
|
+
module Normalizers
|
|
22
|
+
module ActionMailer
|
|
23
|
+
# @api private
|
|
24
|
+
class ProcessActionNormalizer < Normalizer
|
|
25
|
+
register 'process.action_mailer'
|
|
26
|
+
|
|
27
|
+
TYPE = 'app'
|
|
28
|
+
SUBTYPE = 'mailer'
|
|
29
|
+
ACTION = 'action'
|
|
30
|
+
|
|
31
|
+
def normalize(_transaction, _name, payload)
|
|
32
|
+
[endpoint(payload), TYPE, SUBTYPE, ACTION, nil]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def endpoint(payload)
|
|
38
|
+
"#{payload[:mailer]}##{payload[:action]}"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
1
18
|
# frozen_string_literal: true
|
|
2
19
|
|
|
3
20
|
module Atatus
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
# frozen_string_literal: true
|
|
19
|
+
|
|
20
|
+
require 'atatus/sql'
|
|
21
|
+
|
|
22
|
+
module Atatus
|
|
23
|
+
module Normalizers
|
|
24
|
+
module ActiveRecord
|
|
25
|
+
# @api private
|
|
26
|
+
class SqlNormalizer < Normalizer
|
|
27
|
+
register 'sql.active_record'
|
|
28
|
+
|
|
29
|
+
TYPE = 'db'
|
|
30
|
+
ACTION = 'sql'
|
|
31
|
+
SKIP_NAMES = %w[SCHEMA CACHE].freeze
|
|
32
|
+
UNKNOWN = 'unknown'
|
|
33
|
+
|
|
34
|
+
def initialize(*args)
|
|
35
|
+
super
|
|
36
|
+
|
|
37
|
+
@summarizer = Sql.summarizer
|
|
38
|
+
|
|
39
|
+
@adapters = {}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def normalize(_transaction, _name, payload)
|
|
43
|
+
return :skip if SKIP_NAMES.include?(payload[:name])
|
|
44
|
+
|
|
45
|
+
name = summarize(payload[:sql]) || payload[:name]
|
|
46
|
+
subtype = subtype_for(payload)
|
|
47
|
+
|
|
48
|
+
context =
|
|
49
|
+
Span::Context.new(
|
|
50
|
+
db: { statement: payload[:sql], type: 'sql' },
|
|
51
|
+
destination: { name: subtype, resource: subtype, type: TYPE }
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
[name, TYPE, subtype, ACTION, context]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def subtype_for(payload)
|
|
60
|
+
cached_adapter_name(
|
|
61
|
+
payload[:connection]&.adapter_name ||
|
|
62
|
+
::ActiveRecord::Base.connection_config[:adapter]
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def summarize(sql)
|
|
67
|
+
@summarizer.summarize(sql)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def cached_adapter_name(adapter_name)
|
|
71
|
+
return UNKNOWN if adapter_name.nil? || adapter_name.empty?
|
|
72
|
+
@adapters[adapter_name] ||
|
|
73
|
+
(@adapters[adapter_name] = adapter_name.downcase)
|
|
74
|
+
rescue StandardError
|
|
75
|
+
nil
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
data/lib/atatus/opentracing.rb
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
|
3
|
+
# this work for additional information regarding copyright
|
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
|
6
|
+
# not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
1
18
|
# frozen_string_literal: true
|
|
2
19
|
|
|
3
20
|
require 'atatus'
|
|
@@ -22,8 +39,7 @@ module Atatus
|
|
|
22
39
|
@span_context
|
|
23
40
|
end
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
def set_label(key, val)
|
|
42
|
+
def set_tag(key, val)
|
|
27
43
|
if atatus_span.is_a?(Transaction)
|
|
28
44
|
case key.to_s
|
|
29
45
|
when 'type'
|
|
@@ -38,8 +54,9 @@ module Atatus
|
|
|
38
54
|
else
|
|
39
55
|
atatus_span.context.labels[key] = val
|
|
40
56
|
end
|
|
57
|
+
|
|
58
|
+
self
|
|
41
59
|
end
|
|
42
|
-
# rubocop:enable Metrics/MethodLength
|
|
43
60
|
|
|
44
61
|
def set_baggage_item(_key, _value)
|
|
45
62
|
Atatus.agent.config.logger.warn(
|
|
@@ -65,28 +82,20 @@ module Atatus
|
|
|
65
82
|
end
|
|
66
83
|
# rubocop:enable Lint/UnusedMethodArgument
|
|
67
84
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return unless (instrumenter = Atatus.agent&.instrumenter)
|
|
85
|
+
def finish(end_time: Time.now)
|
|
86
|
+
return unless (agent = Atatus.agent)
|
|
71
87
|
|
|
72
|
-
|
|
73
|
-
warn '[Atatus] DEPRECATED: Setting a custom end time as a ' \
|
|
74
|
-
'`Time` is deprecated. Use `clock_end:` and monotonic time instead.'
|
|
75
|
-
clock_end = end_time
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
atatus_span.done clock_end: clock_end
|
|
88
|
+
atatus_span.done clock_end: Util.micros(end_time)
|
|
79
89
|
|
|
80
90
|
case atatus_span
|
|
81
91
|
when Atatus::Transaction
|
|
82
|
-
instrumenter.current_transaction = nil
|
|
92
|
+
agent.instrumenter.current_transaction = nil
|
|
83
93
|
when Atatus::Span
|
|
84
|
-
instrumenter.current_spans.delete(atatus_span)
|
|
94
|
+
agent.instrumenter.current_spans.delete(atatus_span)
|
|
85
95
|
end
|
|
86
96
|
|
|
87
|
-
|
|
97
|
+
agent.enqueue atatus_span
|
|
88
98
|
end
|
|
89
|
-
# rubocop:enable Metrics/MethodLength
|
|
90
99
|
|
|
91
100
|
private
|
|
92
101
|
|
|
@@ -101,6 +110,8 @@ module Atatus
|
|
|
101
110
|
|
|
102
111
|
# @api private
|
|
103
112
|
class SpanContext
|
|
113
|
+
extend Forwardable
|
|
114
|
+
|
|
104
115
|
def initialize(trace_context:, baggage: nil)
|
|
105
116
|
if baggage
|
|
106
117
|
Atatus.agent.config.logger.warn(
|
|
@@ -112,10 +123,27 @@ module Atatus
|
|
|
112
123
|
end
|
|
113
124
|
|
|
114
125
|
attr_accessor :trace_context
|
|
126
|
+
def_delegators :trace_context, :trace_id, :id, :parent_id
|
|
127
|
+
|
|
128
|
+
def self.from_header(header)
|
|
129
|
+
return unless header
|
|
130
|
+
|
|
131
|
+
trace_context = Atatus::TraceContext.parse(header)
|
|
132
|
+
return unless trace_context
|
|
133
|
+
|
|
134
|
+
trace_context.traceparent.id = trace_context.parent_id
|
|
135
|
+
trace_context.traceparent.parent_id = nil
|
|
136
|
+
|
|
137
|
+
from_trace_context(trace_context)
|
|
138
|
+
end
|
|
115
139
|
|
|
116
140
|
def self.from_trace_context(trace_context)
|
|
117
141
|
new(trace_context: trace_context)
|
|
118
142
|
end
|
|
143
|
+
|
|
144
|
+
def child
|
|
145
|
+
self.class.from_trace_context(trace_context.child)
|
|
146
|
+
end
|
|
119
147
|
end
|
|
120
148
|
|
|
121
149
|
# @api private
|
|
@@ -179,8 +207,6 @@ module Atatus
|
|
|
179
207
|
@scope_stack.last
|
|
180
208
|
end
|
|
181
209
|
end
|
|
182
|
-
|
|
183
|
-
# rubocop:disable Metrics/ClassLength
|
|
184
210
|
# A custom tracer to use the OpenTracing API with Atatus
|
|
185
211
|
class Tracer
|
|
186
212
|
def initialize
|
|
@@ -193,13 +219,13 @@ module Atatus
|
|
|
193
219
|
scope_manager.active&.span
|
|
194
220
|
end
|
|
195
221
|
|
|
196
|
-
# rubocop:disable Metrics/
|
|
222
|
+
# rubocop:disable Metrics/ParameterLists
|
|
197
223
|
def start_active_span(
|
|
198
224
|
operation_name,
|
|
199
225
|
child_of: nil,
|
|
200
226
|
references: nil,
|
|
201
227
|
start_time: Time.now,
|
|
202
|
-
|
|
228
|
+
tags: {},
|
|
203
229
|
ignore_active_scope: false,
|
|
204
230
|
finish_on_close: true,
|
|
205
231
|
**
|
|
@@ -209,14 +235,14 @@ module Atatus
|
|
|
209
235
|
child_of: child_of,
|
|
210
236
|
references: references,
|
|
211
237
|
start_time: start_time,
|
|
212
|
-
|
|
238
|
+
tags: tags,
|
|
213
239
|
ignore_active_scope: ignore_active_scope
|
|
214
240
|
)
|
|
215
241
|
scope = scope_manager.activate(span, finish_on_close: finish_on_close)
|
|
216
242
|
|
|
217
243
|
if block_given?
|
|
218
244
|
begin
|
|
219
|
-
yield scope
|
|
245
|
+
return yield scope
|
|
220
246
|
ensure
|
|
221
247
|
scope.close
|
|
222
248
|
end
|
|
@@ -224,16 +250,15 @@ module Atatus
|
|
|
224
250
|
|
|
225
251
|
scope
|
|
226
252
|
end
|
|
227
|
-
# rubocop:enable Metrics/
|
|
253
|
+
# rubocop:enable Metrics/ParameterLists
|
|
228
254
|
|
|
229
|
-
# rubocop:disable Metrics/
|
|
230
|
-
# rubocop:disable Metrics/AbcSize
|
|
255
|
+
# rubocop:disable Metrics/ParameterLists
|
|
231
256
|
def start_span(
|
|
232
257
|
operation_name,
|
|
233
258
|
child_of: nil,
|
|
234
259
|
references: nil,
|
|
235
260
|
start_time: Time.now,
|
|
236
|
-
|
|
261
|
+
tags: {},
|
|
237
262
|
ignore_active_scope: false,
|
|
238
263
|
**
|
|
239
264
|
)
|
|
@@ -245,7 +270,6 @@ module Atatus
|
|
|
245
270
|
|
|
246
271
|
if span_context
|
|
247
272
|
trace_context =
|
|
248
|
-
span_context &&
|
|
249
273
|
span_context.respond_to?(:trace_context) &&
|
|
250
274
|
span_context.trace_context
|
|
251
275
|
end
|
|
@@ -263,7 +287,7 @@ module Atatus
|
|
|
263
287
|
)
|
|
264
288
|
end
|
|
265
289
|
|
|
266
|
-
# if no Atatus
|
|
290
|
+
# if no Atatus agent is running or transaction not sampled
|
|
267
291
|
unless atatus_span
|
|
268
292
|
return ::OpenTracing::Span::NOOP_INSTANCE
|
|
269
293
|
end
|
|
@@ -271,7 +295,7 @@ module Atatus
|
|
|
271
295
|
span_context ||=
|
|
272
296
|
SpanContext.from_trace_context(atatus_span.trace_context)
|
|
273
297
|
|
|
274
|
-
|
|
298
|
+
tags.each do |key, value|
|
|
275
299
|
atatus_span.context.labels[key] = value
|
|
276
300
|
end
|
|
277
301
|
|
|
@@ -279,13 +303,14 @@ module Atatus
|
|
|
279
303
|
|
|
280
304
|
Span.new(atatus_span, span_context)
|
|
281
305
|
end
|
|
282
|
-
|
|
283
|
-
# rubocop:enable Metrics/
|
|
306
|
+
|
|
307
|
+
# rubocop:enable Metrics/ParameterLists
|
|
284
308
|
|
|
285
309
|
def inject(span_context, format, carrier)
|
|
286
310
|
case format
|
|
287
|
-
when ::OpenTracing::FORMAT_RACK
|
|
288
|
-
carrier['atatus-traceparent'] =
|
|
311
|
+
when ::OpenTracing::FORMAT_RACK, ::OpenTracing::FORMAT_TEXT_MAP
|
|
312
|
+
carrier['atatus-traceparent'] =
|
|
313
|
+
span_context.traceparent.to_header
|
|
289
314
|
else
|
|
290
315
|
warn 'Only injection via HTTP headers and Rack is available'
|
|
291
316
|
end
|
|
@@ -294,10 +319,16 @@ module Atatus
|
|
|
294
319
|
def extract(format, carrier)
|
|
295
320
|
case format
|
|
296
321
|
when ::OpenTracing::FORMAT_RACK
|
|
297
|
-
|
|
298
|
-
|
|
322
|
+
SpanContext.from_header(
|
|
323
|
+
carrier['HTTP_ATATUS_TRACEPARENT']
|
|
324
|
+
)
|
|
325
|
+
when ::OpenTracing::FORMAT_TEXT_MAP
|
|
326
|
+
SpanContext.from_header(
|
|
327
|
+
carrier['atatus-traceparent']
|
|
328
|
+
)
|
|
299
329
|
else
|
|
300
|
-
warn 'Only extraction from HTTP headers via Rack
|
|
330
|
+
warn 'Only extraction from HTTP headers via Rack or in ' \
|
|
331
|
+
'text map format are available'
|
|
301
332
|
nil
|
|
302
333
|
end
|
|
303
334
|
rescue Atatus::TraceContext::InvalidTraceparentHeader
|
|
@@ -311,9 +342,12 @@ module Atatus
|
|
|
311
342
|
references:,
|
|
312
343
|
ignore_active_scope:
|
|
313
344
|
)
|
|
314
|
-
context_from_child_of(child_of) ||
|
|
315
|
-
|
|
316
|
-
|
|
345
|
+
context = context_from_child_of(child_of) ||
|
|
346
|
+
context_from_references(references) ||
|
|
347
|
+
context_from_active_scope(ignore_active_scope)
|
|
348
|
+
return context.child if context&.respond_to?(:child)
|
|
349
|
+
|
|
350
|
+
context
|
|
317
351
|
end
|
|
318
352
|
|
|
319
353
|
def context_from_child_of(child_of)
|
|
@@ -334,13 +368,12 @@ module Atatus
|
|
|
334
368
|
def context_from_active_scope(ignore_active_scope)
|
|
335
369
|
if ignore_active_scope
|
|
336
370
|
Atatus.agent&.config&.logger&.warn(
|
|
337
|
-
'ignore_active_scope might lead to
|
|
371
|
+
'ignore_active_scope might lead to unexpected results'
|
|
338
372
|
)
|
|
339
373
|
return
|
|
340
374
|
end
|
|
341
375
|
@scope_manager.active&.span&.context
|
|
342
376
|
end
|
|
343
377
|
end
|
|
344
|
-
# rubocop:enable Metrics/ClassLength
|
|
345
378
|
end
|
|
346
379
|
end
|