atatus 1.7.0 → 2.0.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 +5 -0
- data/Gemfile +49 -13
- data/LICENSE +1 -1
- data/atatus.gemspec +3 -3
- data/lib/atatus/agent.rb +10 -7
- data/lib/atatus/central_config.rb +19 -8
- data/lib/atatus/collector/layer.rb +1 -1
- data/lib/atatus/{sql_summarizer.rb → config/log_level_map.rb} +22 -28
- data/lib/atatus/config/options.rb +2 -1
- data/lib/atatus/config/regexp_list.rb +1 -1
- data/lib/atatus/config/round_float.rb +31 -0
- data/lib/atatus/config/server_info.rb +50 -0
- data/lib/atatus/config/wildcard_pattern_list.rb +3 -1
- data/lib/atatus/config.rb +91 -70
- data/lib/atatus/context/request/socket.rb +1 -2
- data/lib/atatus/context/response.rb +1 -3
- data/lib/atatus/context.rb +3 -10
- data/lib/atatus/context_builder.rb +3 -3
- data/lib/atatus/error.rb +2 -1
- data/lib/atatus/error_builder.rb +1 -1
- data/lib/atatus/fields.rb +98 -0
- data/lib/atatus/graphql.rb +2 -0
- data/lib/atatus/grpc.rb +5 -7
- data/lib/atatus/instrumenter.rb +29 -25
- data/lib/atatus/metadata/cloud_info.rb +156 -0
- data/lib/atatus/metadata/service_info.rb +3 -3
- data/lib/atatus/metadata/system_info/container_info.rb +20 -8
- data/lib/atatus/metadata/system_info.rb +20 -5
- data/lib/atatus/metadata.rb +3 -1
- data/lib/atatus/metrics/cpu_mem_set.rb +10 -38
- data/lib/atatus/metrics/jvm_set.rb +88 -0
- data/lib/atatus/metrics/metric.rb +2 -0
- data/lib/atatus/metrics.rb +33 -16
- data/lib/atatus/middleware.rb +8 -3
- data/lib/atatus/naively_hashable.rb +1 -0
- data/lib/atatus/normalizers/rails/active_record.rb +25 -7
- data/lib/atatus/normalizers.rb +2 -2
- data/lib/atatus/opentracing.rb +5 -3
- data/lib/atatus/rails.rb +1 -1
- data/lib/atatus/span/context/db.rb +1 -1
- data/lib/atatus/span/context/destination.rb +58 -32
- data/lib/atatus/span/context/http.rb +2 -0
- data/lib/atatus/span/context/links.rb +32 -0
- data/lib/atatus/{sql.rb → span/context/message.rb} +16 -12
- data/lib/atatus/span/context/service.rb +55 -0
- data/lib/atatus/span/context.rb +28 -3
- data/lib/atatus/span.rb +35 -5
- data/lib/atatus/span_helpers.rb +12 -23
- data/lib/atatus/spies/action_dispatch.rb +10 -13
- data/lib/atatus/spies/azure_storage_table.rb +148 -0
- data/lib/atatus/spies/delayed_job.rb +19 -13
- data/lib/atatus/spies/dynamo_db.rb +56 -15
- data/lib/atatus/spies/elasticsearch.rb +54 -39
- data/lib/atatus/spies/faraday.rb +92 -58
- data/lib/atatus/spies/http.rb +33 -37
- data/lib/atatus/spies/json.rb +5 -9
- data/lib/atatus/spies/mongo.rb +26 -19
- data/lib/atatus/spies/net_http.rb +53 -51
- data/lib/atatus/spies/racecar.rb +77 -0
- data/lib/atatus/spies/rake.rb +27 -27
- data/lib/atatus/spies/redis.rb +11 -12
- data/lib/atatus/spies/resque.rb +18 -23
- data/lib/atatus/spies/s3.rb +132 -0
- data/lib/atatus/spies/sequel.rb +11 -2
- data/lib/atatus/spies/shoryuken.rb +4 -6
- data/lib/atatus/spies/sidekiq.rb +23 -31
- data/lib/atatus/spies/sinatra.rb +20 -28
- data/lib/atatus/spies/sneakers.rb +2 -0
- data/lib/atatus/spies/sns.rb +126 -0
- data/lib/atatus/spies/sqs.rb +231 -0
- data/lib/atatus/spies/sucker_punch.rb +20 -22
- data/lib/atatus/spies/tilt.rb +10 -13
- data/lib/atatus/spies.rb +20 -0
- data/lib/atatus/sql/signature.rb +4 -2
- data/lib/atatus/sql/tokenizer.rb +23 -7
- data/lib/atatus/stacktrace/frame.rb +1 -0
- data/lib/atatus/stacktrace_builder.rb +12 -16
- data/lib/atatus/subscriber.rb +1 -0
- data/lib/atatus/trace_context/traceparent.rb +5 -8
- data/lib/atatus/trace_context/tracestate.rb +16 -14
- data/lib/atatus/trace_context.rb +6 -16
- data/lib/atatus/transaction.rb +17 -4
- data/lib/atatus/transport/base.rb +1 -3
- data/lib/atatus/transport/connection/http.rb +11 -3
- data/lib/atatus/transport/connection/proxy_pipe.rb +1 -2
- data/lib/atatus/transport/connection.rb +3 -2
- data/lib/atatus/transport/filters/hash_sanitizer.rb +16 -34
- data/lib/atatus/transport/filters/secrets_filter.rb +35 -12
- data/lib/atatus/transport/serializers/context_serializer.rb +1 -2
- data/lib/atatus/transport/serializers/metadata_serializer.rb +54 -8
- data/lib/atatus/transport/serializers/metricset_serializer.rb +2 -2
- data/lib/atatus/transport/serializers/span_serializer.rb +55 -9
- data/lib/atatus/transport/serializers/transaction_serializer.rb +1 -0
- data/lib/atatus/transport/serializers.rb +9 -6
- data/lib/atatus/transport/user_agent.rb +16 -9
- data/lib/atatus/transport/worker.rb +2 -1
- data/lib/atatus/util/deep_dup.rb +65 -0
- data/lib/atatus/util/precision_validator.rb +46 -0
- data/lib/atatus/util.rb +2 -0
- data/lib/atatus/version.rb +1 -1
- data/lib/atatus.rb +32 -5
- metadata +40 -11
|
@@ -23,14 +23,19 @@ module Atatus
|
|
|
23
23
|
# @api private
|
|
24
24
|
class MetadataSerializer < Serializer
|
|
25
25
|
def build(metadata)
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
base =
|
|
27
|
+
{
|
|
28
28
|
service: build_service(metadata.service),
|
|
29
29
|
process: build_process(metadata.process),
|
|
30
30
|
system: build_system(metadata.system),
|
|
31
31
|
labels: build_labels(metadata.labels)
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
if metadata.cloud.provider
|
|
35
|
+
base[:cloud] = build_cloud(metadata.cloud)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
{ metadata: base }
|
|
34
39
|
end
|
|
35
40
|
|
|
36
41
|
private
|
|
@@ -59,8 +64,8 @@ module Atatus
|
|
|
59
64
|
}
|
|
60
65
|
}
|
|
61
66
|
|
|
62
|
-
if node_name = service.node_name
|
|
63
|
-
base[:node] = {
|
|
67
|
+
if (node_name = service.node_name)
|
|
68
|
+
base[:node] = { configured_name: keyword_field(node_name) }
|
|
64
69
|
end
|
|
65
70
|
|
|
66
71
|
base
|
|
@@ -75,17 +80,58 @@ module Atatus
|
|
|
75
80
|
end
|
|
76
81
|
|
|
77
82
|
def build_system(system)
|
|
78
|
-
{
|
|
79
|
-
|
|
83
|
+
base = {
|
|
84
|
+
configured_hostname: keyword_field(system.configured_hostname),
|
|
80
85
|
architecture: keyword_field(system.architecture),
|
|
81
86
|
platform: keyword_field(system.platform),
|
|
82
|
-
kubernetes: keyword_object(system.kubernetes)
|
|
87
|
+
kubernetes: keyword_object(system.kubernetes),
|
|
88
|
+
container: keyword_object(system.container)
|
|
83
89
|
}
|
|
90
|
+
if system.detected_hostname
|
|
91
|
+
base[:detected_hostname] = keyword_field(system.detected_hostname)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
base
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def build_cloud(cloud)
|
|
98
|
+
strip_nulls!(
|
|
99
|
+
provider: cloud.provider,
|
|
100
|
+
account: {
|
|
101
|
+
id: keyword_field(cloud.account_id),
|
|
102
|
+
name: keyword_field(cloud.account_name)
|
|
103
|
+
},
|
|
104
|
+
availability_zone: keyword_field(cloud.availability_zone),
|
|
105
|
+
instance: {
|
|
106
|
+
id: keyword_field(cloud.instance_id),
|
|
107
|
+
name: keyword_field(cloud.instance_name)
|
|
108
|
+
},
|
|
109
|
+
machine: { type: keyword_field(cloud.machine_type) },
|
|
110
|
+
project: {
|
|
111
|
+
id: keyword_field(cloud.project_id),
|
|
112
|
+
name: keyword_field(cloud.project_name)
|
|
113
|
+
},
|
|
114
|
+
region: keyword_field(cloud.region)
|
|
115
|
+
)
|
|
84
116
|
end
|
|
85
117
|
|
|
86
118
|
def build_labels(labels)
|
|
87
119
|
keyword_object(labels)
|
|
88
120
|
end
|
|
121
|
+
|
|
122
|
+
# A bug in APM Server 7.9 disallows null values in `cloud`
|
|
123
|
+
def strip_nulls!(hash)
|
|
124
|
+
hash.each_key do |key|
|
|
125
|
+
case value = hash[key]
|
|
126
|
+
when Hash
|
|
127
|
+
strip_nulls!(value)
|
|
128
|
+
hash.delete(key) if value.empty?
|
|
129
|
+
when nil then hash.delete(key)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
hash
|
|
134
|
+
end
|
|
89
135
|
end
|
|
90
136
|
end
|
|
91
137
|
end
|
|
@@ -43,14 +43,14 @@ module Atatus
|
|
|
43
43
|
stacktrace: span.stacktrace.to_a,
|
|
44
44
|
timestamp: span.timestamp,
|
|
45
45
|
trace_id: span.trace_id,
|
|
46
|
-
sample_rate: span.sample_rate
|
|
46
|
+
sample_rate: span.sample_rate,
|
|
47
|
+
outcome: keyword_field(span.outcome)
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
# @api private
|
|
52
53
|
class ContextSerializer < Serializer
|
|
53
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
|
54
54
|
def build(context)
|
|
55
55
|
return unless context
|
|
56
56
|
|
|
@@ -65,9 +65,20 @@ module Atatus
|
|
|
65
65
|
base[:destination] = build_destination(context.destination)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
if context.message
|
|
69
|
+
base[:message] = build_message(context.message)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
if context.service
|
|
73
|
+
base[:service] = build_service(context.service)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
if context.links && !context.links.empty?
|
|
77
|
+
base[:links] = build_links(context.links)
|
|
78
|
+
end
|
|
79
|
+
|
|
68
80
|
base
|
|
69
81
|
end
|
|
70
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
|
71
82
|
|
|
72
83
|
private
|
|
73
84
|
|
|
@@ -90,15 +101,50 @@ module Atatus
|
|
|
90
101
|
end
|
|
91
102
|
|
|
92
103
|
def build_destination(destination)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
resource: keyword_field(destination.resource),
|
|
97
|
-
type: keyword_field(destination.type)
|
|
98
|
-
},
|
|
104
|
+
return unless destination
|
|
105
|
+
|
|
106
|
+
base = {
|
|
99
107
|
address: keyword_field(destination.address),
|
|
100
108
|
port: destination.port
|
|
101
109
|
}
|
|
110
|
+
|
|
111
|
+
if (service = destination.service) && !service.empty?
|
|
112
|
+
base[:service] = service.to_h
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
if (cloud = destination.cloud) && !cloud.empty?
|
|
116
|
+
base[:cloud] = cloud.to_h
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
base
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def build_message(message)
|
|
123
|
+
{
|
|
124
|
+
queue: {
|
|
125
|
+
name: keyword_field(message.queue_name)
|
|
126
|
+
},
|
|
127
|
+
age: {
|
|
128
|
+
ms: message.age_ms.to_i
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def build_service(service)
|
|
134
|
+
{
|
|
135
|
+
target: {
|
|
136
|
+
name: keyword_field(service.target&.name),
|
|
137
|
+
type: keyword_field(service.target&.type)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def build_links(links)
|
|
143
|
+
{
|
|
144
|
+
links: links.map do |link|
|
|
145
|
+
{"trace_id" => link.trace_id, "span_id" => link.span_id}
|
|
146
|
+
end
|
|
147
|
+
}
|
|
102
148
|
end
|
|
103
149
|
end
|
|
104
150
|
|
|
@@ -35,6 +35,7 @@ module Atatus
|
|
|
35
35
|
name: keyword_field(transaction.name),
|
|
36
36
|
type: keyword_field(transaction.type),
|
|
37
37
|
result: keyword_field(transaction.result.to_s),
|
|
38
|
+
outcome: keyword_field(transaction.outcome),
|
|
38
39
|
duration: ms(transaction.duration),
|
|
39
40
|
timestamp: transaction.timestamp,
|
|
40
41
|
sampled: transaction.sampled?,
|
|
@@ -45,18 +45,20 @@ module Atatus
|
|
|
45
45
|
def keyword_object(hash)
|
|
46
46
|
return unless hash
|
|
47
47
|
|
|
48
|
-
hash.
|
|
49
|
-
|
|
48
|
+
hash.each do |k, v|
|
|
49
|
+
hash[k] =
|
|
50
|
+
case v
|
|
51
|
+
when Hash then keyword_object(v)
|
|
52
|
+
else keyword_field(v)
|
|
53
|
+
end
|
|
50
54
|
end
|
|
51
55
|
end
|
|
52
56
|
|
|
53
57
|
def mixed_object(hash)
|
|
54
58
|
return unless hash
|
|
55
59
|
|
|
56
|
-
hash.
|
|
57
|
-
|
|
58
|
-
hash[k] = v.is_a?(String) ? keyword_field(v) : v
|
|
59
|
-
end
|
|
60
|
+
hash.each do |k, v|
|
|
61
|
+
hash[k] = v.is_a?(String) ? keyword_field(v) : v
|
|
60
62
|
end
|
|
61
63
|
end
|
|
62
64
|
end
|
|
@@ -72,6 +74,7 @@ module Atatus
|
|
|
72
74
|
end
|
|
73
75
|
|
|
74
76
|
attr_reader :transaction, :span, :error, :metadata, :metricset
|
|
77
|
+
|
|
75
78
|
def serialize(resource)
|
|
76
79
|
case resource
|
|
77
80
|
when Transaction
|
|
@@ -21,7 +21,8 @@ module Atatus
|
|
|
21
21
|
module Transport
|
|
22
22
|
# @api private
|
|
23
23
|
class UserAgent
|
|
24
|
-
def initialize(config)
|
|
24
|
+
def initialize(config, version: VERSION)
|
|
25
|
+
@version = version
|
|
25
26
|
@built = build(config)
|
|
26
27
|
end
|
|
27
28
|
|
|
@@ -32,16 +33,22 @@ module Atatus
|
|
|
32
33
|
private
|
|
33
34
|
|
|
34
35
|
def build(config)
|
|
35
|
-
|
|
36
|
+
service = Metadata::ServiceInfo.new(config)
|
|
36
37
|
|
|
37
38
|
[
|
|
38
|
-
"atatus-ruby/#{
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
"atatus-ruby/#{@version}",
|
|
40
|
+
formatted_service_info(service)
|
|
41
|
+
].compact.join(' ')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def formatted_service_info(service)
|
|
45
|
+
if service.name
|
|
46
|
+
"(#{[
|
|
47
|
+
service.name,
|
|
48
|
+
service.version
|
|
49
|
+
].compact.join(' ')
|
|
50
|
+
})"
|
|
51
|
+
end
|
|
45
52
|
end
|
|
46
53
|
end
|
|
47
54
|
end
|
|
@@ -53,11 +53,12 @@ module Atatus
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
attr_reader :queue, :filters, :name, :connection, :serializers
|
|
56
|
+
|
|
56
57
|
def work_forever
|
|
57
58
|
while (msg = queue.pop)
|
|
58
59
|
case msg
|
|
59
60
|
when StopMessage
|
|
60
|
-
debug 'Stopping worker
|
|
61
|
+
debug 'Stopping worker [%s]', self
|
|
61
62
|
connection.flush(:halt)
|
|
62
63
|
break
|
|
63
64
|
else
|
|
@@ -0,0 +1,65 @@
|
|
|
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 Util
|
|
22
|
+
# @api private
|
|
23
|
+
#
|
|
24
|
+
# Makes a deep copy of an Array or Hash
|
|
25
|
+
# NB: Not guaranteed to work well with complex objects, only simple Hash,
|
|
26
|
+
# Array, String, Number, etc.
|
|
27
|
+
class DeepDup
|
|
28
|
+
def initialize(obj)
|
|
29
|
+
@obj = obj
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def dup
|
|
33
|
+
deep_dup(@obj)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.dup(obj)
|
|
37
|
+
new(obj).dup
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def deep_dup(obj)
|
|
43
|
+
case obj
|
|
44
|
+
when Hash then hash(obj)
|
|
45
|
+
when Array then array(obj)
|
|
46
|
+
else obj.dup
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def array(arr)
|
|
51
|
+
arr.map { |obj| deep_dup(obj) }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def hash(hsh)
|
|
55
|
+
result = hsh.dup
|
|
56
|
+
|
|
57
|
+
hsh.each_pair do |key, value|
|
|
58
|
+
result[key] = deep_dup(value)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
result
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
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 Util
|
|
22
|
+
# @api private
|
|
23
|
+
# Rounds half away from zero.
|
|
24
|
+
# If `minimum` is provided, and the value rounds to 0 (but was not zero to
|
|
25
|
+
# begin with), use the minimum instead.
|
|
26
|
+
module PrecisionValidator
|
|
27
|
+
module_function
|
|
28
|
+
|
|
29
|
+
def validate(value, precision: 0, minimum: nil)
|
|
30
|
+
float = Float(value)
|
|
31
|
+
return nil unless (0.0..1.0).cover?(float)
|
|
32
|
+
return float if float == 0
|
|
33
|
+
|
|
34
|
+
multiplier = Float(10**precision)
|
|
35
|
+
rounded = (float * multiplier + 0.5).floor / multiplier
|
|
36
|
+
if rounded == 0 && minimum
|
|
37
|
+
minimum
|
|
38
|
+
else
|
|
39
|
+
rounded
|
|
40
|
+
end
|
|
41
|
+
rescue ArgumentError
|
|
42
|
+
nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/atatus/util.rb
CHANGED
data/lib/atatus/version.rb
CHANGED
data/lib/atatus.rb
CHANGED
|
@@ -26,12 +26,14 @@ require 'logger'
|
|
|
26
26
|
require 'concurrent'
|
|
27
27
|
require 'forwardable'
|
|
28
28
|
require 'securerandom'
|
|
29
|
+
require 'ruby2_keywords'
|
|
29
30
|
|
|
30
31
|
require 'atatus/version'
|
|
31
32
|
require 'atatus/internal_error'
|
|
32
33
|
require 'atatus/logging'
|
|
33
34
|
|
|
34
35
|
# Core
|
|
36
|
+
require 'atatus/fields'
|
|
35
37
|
require 'atatus/agent'
|
|
36
38
|
require 'atatus/config'
|
|
37
39
|
require 'atatus/context'
|
|
@@ -106,6 +108,7 @@ module Atatus
|
|
|
106
108
|
# @yield [String|nil, String|nil, String|nil] The transaction, span,
|
|
107
109
|
# and trace ids.
|
|
108
110
|
# @return [String] Unless block given
|
|
111
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
109
112
|
def log_ids
|
|
110
113
|
trace_id = (current_transaction || current_span)&.trace_id
|
|
111
114
|
if block_given?
|
|
@@ -118,6 +121,7 @@ module Atatus
|
|
|
118
121
|
ids << "trace.id=#{trace_id}" if trace_id
|
|
119
122
|
ids.join(' ')
|
|
120
123
|
end
|
|
124
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
121
125
|
|
|
122
126
|
# Start a new transaction
|
|
123
127
|
#
|
|
@@ -183,7 +187,12 @@ module Atatus
|
|
|
183
187
|
context: context,
|
|
184
188
|
trace_context: trace_context
|
|
185
189
|
)
|
|
186
|
-
yield transaction
|
|
190
|
+
result = yield transaction
|
|
191
|
+
transaction&.outcome ||= Transaction::Outcome::SUCCESS
|
|
192
|
+
result
|
|
193
|
+
rescue
|
|
194
|
+
transaction&.outcome ||= Transaction::Outcome::FAILURE
|
|
195
|
+
raise
|
|
187
196
|
ensure
|
|
188
197
|
end_transaction
|
|
189
198
|
end
|
|
@@ -235,9 +244,12 @@ module Atatus
|
|
|
235
244
|
|
|
236
245
|
# Ends the current span
|
|
237
246
|
#
|
|
247
|
+
# @param span [Span] Optional span to be ended instead of the last span
|
|
248
|
+
# created, useful for asynchronous environments where multiple spans are created in parallel
|
|
249
|
+
#
|
|
238
250
|
# @return [Span]
|
|
239
|
-
def end_span
|
|
240
|
-
agent&.end_span
|
|
251
|
+
def end_span(span = nil)
|
|
252
|
+
agent&.end_span(span)
|
|
241
253
|
end
|
|
242
254
|
|
|
243
255
|
# rubocop:disable Metrics/ParameterLists
|
|
@@ -287,7 +299,12 @@ module Atatus
|
|
|
287
299
|
parent: parent,
|
|
288
300
|
sync: sync
|
|
289
301
|
)
|
|
290
|
-
yield span
|
|
302
|
+
result = yield span
|
|
303
|
+
span&.outcome ||= Span::Outcome::SUCCESS
|
|
304
|
+
result
|
|
305
|
+
rescue
|
|
306
|
+
span&.outcome ||= Span::Outcome::FAILURE
|
|
307
|
+
raise
|
|
291
308
|
ensure
|
|
292
309
|
end_span
|
|
293
310
|
end
|
|
@@ -392,6 +409,16 @@ module Atatus
|
|
|
392
409
|
agent&.set_response_body(response_body.to_s)
|
|
393
410
|
end
|
|
394
411
|
|
|
412
|
+
# Provide a filter to transform payloads before sending them off
|
|
413
|
+
#
|
|
414
|
+
# @param address [String] Destination address
|
|
415
|
+
# @param address [String] Destination address
|
|
416
|
+
# @param address [Hash] Destination service
|
|
417
|
+
# @param address [Hash] Destination cloud
|
|
418
|
+
def set_destination(address: nil, port: nil, service: nil, cloud: nil)
|
|
419
|
+
agent&.set_destination(address: address, port: port, service: service, cloud: cloud)
|
|
420
|
+
end
|
|
421
|
+
|
|
395
422
|
# Provide a filter to transform payloads before sending them off
|
|
396
423
|
#
|
|
397
424
|
# @param key [Symbol] Unique filter key
|
|
@@ -399,7 +426,7 @@ module Atatus
|
|
|
399
426
|
# @yield [Hash] A filter. Used if provided. Otherwise using `callback`
|
|
400
427
|
# @return [Bool] true
|
|
401
428
|
def add_filter(key, callback = nil, &block)
|
|
402
|
-
if callback.nil? && !
|
|
429
|
+
if callback.nil? && !block
|
|
403
430
|
raise ArgumentError, '#add_filter needs either `callback\' or a block'
|
|
404
431
|
end
|
|
405
432
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: atatus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Atatus
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-01-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -38,8 +38,23 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '3.0'
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: ruby2_keywords
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
description:
|
|
56
|
+
email:
|
|
57
|
+
- success@atatus.com
|
|
43
58
|
executables: []
|
|
44
59
|
extensions: []
|
|
45
60
|
extra_rdoc_files:
|
|
@@ -70,8 +85,11 @@ files:
|
|
|
70
85
|
- lib/atatus/config.rb
|
|
71
86
|
- lib/atatus/config/bytes.rb
|
|
72
87
|
- lib/atatus/config/duration.rb
|
|
88
|
+
- lib/atatus/config/log_level_map.rb
|
|
73
89
|
- lib/atatus/config/options.rb
|
|
74
90
|
- lib/atatus/config/regexp_list.rb
|
|
91
|
+
- lib/atatus/config/round_float.rb
|
|
92
|
+
- lib/atatus/config/server_info.rb
|
|
75
93
|
- lib/atatus/config/wildcard_pattern_list.rb
|
|
76
94
|
- lib/atatus/context.rb
|
|
77
95
|
- lib/atatus/context/company.rb
|
|
@@ -86,6 +104,7 @@ files:
|
|
|
86
104
|
- lib/atatus/error/exception.rb
|
|
87
105
|
- lib/atatus/error/log.rb
|
|
88
106
|
- lib/atatus/error_builder.rb
|
|
107
|
+
- lib/atatus/fields.rb
|
|
89
108
|
- lib/atatus/grape.rb
|
|
90
109
|
- lib/atatus/graphql.rb
|
|
91
110
|
- lib/atatus/grpc.rb
|
|
@@ -93,6 +112,7 @@ files:
|
|
|
93
112
|
- lib/atatus/internal_error.rb
|
|
94
113
|
- lib/atatus/logging.rb
|
|
95
114
|
- lib/atatus/metadata.rb
|
|
115
|
+
- lib/atatus/metadata/cloud_info.rb
|
|
96
116
|
- lib/atatus/metadata/process_info.rb
|
|
97
117
|
- lib/atatus/metadata/service_info.rb
|
|
98
118
|
- lib/atatus/metadata/system_info.rb
|
|
@@ -102,6 +122,7 @@ files:
|
|
|
102
122
|
- lib/atatus/metrics.rb
|
|
103
123
|
- lib/atatus/metrics/breakdown_set.rb
|
|
104
124
|
- lib/atatus/metrics/cpu_mem_set.rb
|
|
125
|
+
- lib/atatus/metrics/jvm_set.rb
|
|
105
126
|
- lib/atatus/metrics/metric.rb
|
|
106
127
|
- lib/atatus/metrics/set.rb
|
|
107
128
|
- lib/atatus/metrics/span_scoped_set.rb
|
|
@@ -128,9 +149,13 @@ files:
|
|
|
128
149
|
- lib/atatus/span/context/db.rb
|
|
129
150
|
- lib/atatus/span/context/destination.rb
|
|
130
151
|
- lib/atatus/span/context/http.rb
|
|
152
|
+
- lib/atatus/span/context/links.rb
|
|
153
|
+
- lib/atatus/span/context/message.rb
|
|
154
|
+
- lib/atatus/span/context/service.rb
|
|
131
155
|
- lib/atatus/span_helpers.rb
|
|
132
156
|
- lib/atatus/spies.rb
|
|
133
157
|
- lib/atatus/spies/action_dispatch.rb
|
|
158
|
+
- lib/atatus/spies/azure_storage_table.rb
|
|
134
159
|
- lib/atatus/spies/delayed_job.rb
|
|
135
160
|
- lib/atatus/spies/dynamo_db.rb
|
|
136
161
|
- lib/atatus/spies/elasticsearch.rb
|
|
@@ -139,21 +164,23 @@ files:
|
|
|
139
164
|
- lib/atatus/spies/json.rb
|
|
140
165
|
- lib/atatus/spies/mongo.rb
|
|
141
166
|
- lib/atatus/spies/net_http.rb
|
|
167
|
+
- lib/atatus/spies/racecar.rb
|
|
142
168
|
- lib/atatus/spies/rake.rb
|
|
143
169
|
- lib/atatus/spies/redis.rb
|
|
144
170
|
- lib/atatus/spies/resque.rb
|
|
171
|
+
- lib/atatus/spies/s3.rb
|
|
145
172
|
- lib/atatus/spies/sequel.rb
|
|
146
173
|
- lib/atatus/spies/shoryuken.rb
|
|
147
174
|
- lib/atatus/spies/sidekiq.rb
|
|
148
175
|
- lib/atatus/spies/sinatra.rb
|
|
149
176
|
- lib/atatus/spies/sneakers.rb
|
|
177
|
+
- lib/atatus/spies/sns.rb
|
|
178
|
+
- lib/atatus/spies/sqs.rb
|
|
150
179
|
- lib/atatus/spies/sucker_punch.rb
|
|
151
180
|
- lib/atatus/spies/tilt.rb
|
|
152
|
-
- lib/atatus/sql.rb
|
|
153
181
|
- lib/atatus/sql/signature.rb
|
|
154
182
|
- lib/atatus/sql/tokenizer.rb
|
|
155
183
|
- lib/atatus/sql/tokens.rb
|
|
156
|
-
- lib/atatus/sql_summarizer.rb
|
|
157
184
|
- lib/atatus/stacktrace.rb
|
|
158
185
|
- lib/atatus/stacktrace/frame.rb
|
|
159
186
|
- lib/atatus/stacktrace_builder.rb
|
|
@@ -180,17 +207,19 @@ files:
|
|
|
180
207
|
- lib/atatus/transport/user_agent.rb
|
|
181
208
|
- lib/atatus/transport/worker.rb
|
|
182
209
|
- lib/atatus/util.rb
|
|
210
|
+
- lib/atatus/util/deep_dup.rb
|
|
183
211
|
- lib/atatus/util/inflector.rb
|
|
184
212
|
- lib/atatus/util/lru_cache.rb
|
|
213
|
+
- lib/atatus/util/precision_validator.rb
|
|
185
214
|
- lib/atatus/util/throttle.rb
|
|
186
215
|
- lib/atatus/version.rb
|
|
187
216
|
homepage: https://www.atatus.com
|
|
188
217
|
licenses:
|
|
189
|
-
-
|
|
218
|
+
- Apache-2.0
|
|
190
219
|
metadata:
|
|
191
220
|
changelog_uri: https://docs.atatus.com/docs/release-notes/ruby.html
|
|
192
221
|
documentation_uri: https://docs.atatus.com/docs/application-monitoring/ruby-agent/overview.html
|
|
193
|
-
post_install_message:
|
|
222
|
+
post_install_message:
|
|
194
223
|
rdoc_options: []
|
|
195
224
|
require_paths:
|
|
196
225
|
- lib
|
|
@@ -205,8 +234,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
205
234
|
- !ruby/object:Gem::Version
|
|
206
235
|
version: '0'
|
|
207
236
|
requirements: []
|
|
208
|
-
rubygems_version: 3.0.
|
|
209
|
-
signing_key:
|
|
237
|
+
rubygems_version: 3.0.3.1
|
|
238
|
+
signing_key:
|
|
210
239
|
specification_version: 4
|
|
211
240
|
summary: Atatus Ruby Agent
|
|
212
241
|
test_files: []
|