elastic-apm 4.3.0 → 4.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ci/.jenkins_exclude.yml +23 -23
- data/.ci/.jenkins_framework.yml +2 -2
- data/.ci/{.jenkins_master_framework.yml → .jenkins_main_framework.yml} +0 -0
- data/.ci/Jenkinsfile +14 -13
- data/.ci/docker/jruby/11-jdk/Dockerfile +1 -1
- data/.ci/docker/jruby/12-jdk/Dockerfile +1 -1
- data/.ci/docker/jruby/13-jdk/Dockerfile +1 -1
- data/.ci/docker/jruby/7-jdk/Dockerfile +1 -1
- data/.ci/docker/jruby/8-jdk/Dockerfile +1 -1
- data/.ci/jobs/apm-agent-ruby-mbp.yml +1 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +5 -5
- data/.pre-commit-config.yaml +2 -2
- data/CHANGELOG.asciidoc +42 -0
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +11 -7
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/docs/api.asciidoc +2 -2
- data/docs/configuration.asciidoc +27 -3
- data/docs/introduction.asciidoc +3 -3
- data/docs/log-correlation.asciidoc +1 -1
- data/docs/upgrading.asciidoc +1 -1
- data/elastic-apm.gemspec +8 -8
- data/lib/elastic_apm/agent.rb +2 -2
- data/lib/elastic_apm/config.rb +19 -0
- data/lib/elastic_apm/context/request/socket.rb +1 -2
- data/lib/elastic_apm/fields.rb +29 -19
- data/lib/elastic_apm/instrumenter.rb +21 -19
- data/lib/elastic_apm/metadata/service_info.rb +1 -1
- data/lib/elastic_apm/metadata/system_info.rb +2 -1
- data/lib/elastic_apm/metrics/cpu_mem_set.rb +4 -1
- data/lib/elastic_apm/metrics/metric.rb +2 -0
- data/lib/elastic_apm/metrics.rb +2 -5
- data/lib/elastic_apm/span/context/destination.rb +2 -2
- data/lib/elastic_apm/span.rb +8 -16
- data/lib/elastic_apm/spies/dynamo_db.rb +8 -3
- data/lib/elastic_apm/spies/elasticsearch.rb +11 -1
- data/lib/elastic_apm/spies/mongo.rb +7 -6
- data/lib/elastic_apm/spies/s3.rb +10 -1
- data/lib/elastic_apm/spies/sns.rb +1 -1
- data/lib/elastic_apm/transport/base.rb +1 -3
- data/lib/elastic_apm/transport/serializers/context_serializer.rb +1 -2
- data/lib/elastic_apm/transport/serializers/metadata_serializer.rb +6 -2
- data/lib/elastic_apm/transport/serializers/span_serializer.rb +4 -4
- data/lib/elastic_apm/transport/user_agent.rb +12 -6
- data/lib/elastic_apm/version.rb +1 -1
- data/lib/elastic_apm.rb +5 -2
- metadata +8 -8
data/lib/elastic_apm/fields.rb
CHANGED
@@ -25,7 +25,7 @@ module ElasticAPM
|
|
25
25
|
# class MyThing
|
26
26
|
# include Fields
|
27
27
|
# field :name
|
28
|
-
# field :address,
|
28
|
+
# field :address, default: 'There'
|
29
29
|
# end
|
30
30
|
#
|
31
31
|
# MyThing.new(name: 'AJ').to_h
|
@@ -33,56 +33,66 @@ module ElasticAPM
|
|
33
33
|
# MyThing.new().empty?
|
34
34
|
# # => true
|
35
35
|
module Fields
|
36
|
+
class Field
|
37
|
+
def initialize(key, default: nil)
|
38
|
+
@key = key
|
39
|
+
@default = default
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :key, :default
|
43
|
+
end
|
44
|
+
|
36
45
|
module InstanceMethods
|
37
46
|
def initialize(**attrs)
|
47
|
+
schema.each do |key, field|
|
48
|
+
send(:"#{key}=", field.default)
|
49
|
+
end
|
50
|
+
|
38
51
|
attrs.each do |key, value|
|
39
|
-
|
52
|
+
send(:"#{key}=", value)
|
40
53
|
end
|
41
54
|
|
42
55
|
super()
|
43
56
|
end
|
44
57
|
|
45
58
|
def empty?
|
46
|
-
self.class.
|
47
|
-
next if send(key)
|
48
|
-
|
49
|
-
|
50
|
-
return true
|
59
|
+
self.class.schema.each do |key, field|
|
60
|
+
next if send(key).nil?
|
61
|
+
return false
|
51
62
|
end
|
52
63
|
|
53
|
-
|
64
|
+
true
|
54
65
|
end
|
55
66
|
|
56
67
|
def to_h
|
57
|
-
|
58
|
-
|
68
|
+
schema.each_with_object({}) do |(key, field), hsh|
|
69
|
+
hsh[key] = send(key)
|
59
70
|
end
|
60
71
|
end
|
61
72
|
|
62
73
|
private
|
63
74
|
|
64
|
-
def
|
65
|
-
self.class.
|
75
|
+
def schema
|
76
|
+
self.class.schema
|
66
77
|
end
|
67
78
|
end
|
68
79
|
|
69
80
|
module ClassMethods
|
70
|
-
def field(key,
|
71
|
-
|
81
|
+
def field(key, default: nil)
|
82
|
+
field = Field.new(key, default: default)
|
83
|
+
schema[key] = field
|
72
84
|
|
73
|
-
|
74
|
-
optionals.push(key) if optional
|
85
|
+
attr_accessor(key)
|
75
86
|
end
|
76
87
|
|
77
|
-
attr_reader :
|
88
|
+
attr_reader :schema
|
78
89
|
end
|
79
90
|
|
80
91
|
def self.included(cls)
|
81
92
|
cls.extend(ClassMethods)
|
82
93
|
cls.include(InstanceMethods)
|
83
94
|
|
84
|
-
cls.instance_variable_set(:@
|
85
|
-
cls.instance_variable_set(:@optionals, [])
|
95
|
+
cls.instance_variable_set(:@schema, {})
|
86
96
|
end
|
87
97
|
end
|
88
98
|
end
|
@@ -179,7 +179,8 @@ module ElasticAPM
|
|
179
179
|
context: nil,
|
180
180
|
trace_context: nil,
|
181
181
|
parent: nil,
|
182
|
-
sync: nil
|
182
|
+
sync: nil,
|
183
|
+
exit_span: nil
|
183
184
|
)
|
184
185
|
|
185
186
|
transaction =
|
@@ -197,6 +198,15 @@ module ElasticAPM
|
|
197
198
|
|
198
199
|
parent ||= (current_span || current_transaction)
|
199
200
|
|
201
|
+
# To not mess with breakdown metric stats, exit spans MUST not add
|
202
|
+
# sub-spans unless they share the same type and subtype.
|
203
|
+
if parent && parent.is_a?(Span) && parent.exit_span?
|
204
|
+
if parent.type != type || parent.subtype != subtype
|
205
|
+
debug "Skipping new span '#{name}' as its parent is an exit_span"
|
206
|
+
return
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
200
210
|
span = Span.new(
|
201
211
|
name: name,
|
202
212
|
subtype: subtype,
|
@@ -207,7 +217,8 @@ module ElasticAPM
|
|
207
217
|
type: type,
|
208
218
|
context: context,
|
209
219
|
stacktrace_builder: stacktrace_builder,
|
210
|
-
sync: sync
|
220
|
+
sync: sync,
|
221
|
+
exit_span: exit_span
|
211
222
|
)
|
212
223
|
|
213
224
|
if backtrace && transaction.span_frames_min_duration
|
@@ -222,8 +233,14 @@ module ElasticAPM
|
|
222
233
|
# rubocop:enable Metrics/CyclomaticComplexity
|
223
234
|
# rubocop:enable Metrics/PerceivedComplexity
|
224
235
|
|
225
|
-
def end_span
|
226
|
-
|
236
|
+
def end_span(span = nil)
|
237
|
+
if span
|
238
|
+
current_spans.delete(span)
|
239
|
+
else
|
240
|
+
span = current_spans.pop
|
241
|
+
end
|
242
|
+
|
243
|
+
return unless span
|
227
244
|
|
228
245
|
span.done
|
229
246
|
|
@@ -273,24 +290,9 @@ module ElasticAPM
|
|
273
290
|
'transaction.type': transaction.type
|
274
291
|
}
|
275
292
|
|
276
|
-
@metrics.get(:transaction).timer(
|
277
|
-
:'transaction.duration.sum.us',
|
278
|
-
tags: tags, reset_on_collect: true
|
279
|
-
).update(transaction.duration)
|
280
|
-
|
281
|
-
@metrics.get(:transaction).counter(
|
282
|
-
:'transaction.duration.count',
|
283
|
-
tags: tags, reset_on_collect: true
|
284
|
-
).inc!
|
285
|
-
|
286
293
|
return unless transaction.sampled?
|
287
294
|
return unless transaction.breakdown_metrics
|
288
295
|
|
289
|
-
@metrics.get(:breakdown).counter(
|
290
|
-
:'transaction.breakdown.count',
|
291
|
-
tags: tags, reset_on_collect: true
|
292
|
-
).inc!
|
293
|
-
|
294
296
|
span_tags = tags.merge('span.type': 'app')
|
295
297
|
|
296
298
|
@metrics.get(:breakdown).timer(
|
@@ -49,7 +49,7 @@ module ElasticAPM
|
|
49
49
|
)
|
50
50
|
@language = Language.new(name: 'ruby', version: RUBY_VERSION)
|
51
51
|
@runtime = lookup_runtime
|
52
|
-
@version = @config.service_version
|
52
|
+
@version = @config.service_version
|
53
53
|
end
|
54
54
|
|
55
55
|
attr_reader :name, :node_name, :environment, :agent, :framework,
|
@@ -77,7 +77,7 @@ module ElasticAPM
|
|
77
77
|
|
78
78
|
def sampler_for_os(os)
|
79
79
|
case os
|
80
|
-
when
|
80
|
+
when /^linux/ then Linux.new
|
81
81
|
else
|
82
82
|
warn "Disabling system metrics, unsupported host OS '#{os}'"
|
83
83
|
disable!
|
@@ -116,6 +116,9 @@ module ElasticAPM
|
|
116
116
|
process_cpu_usage =
|
117
117
|
current.process_cpu_usage - previous.process_cpu_usage
|
118
118
|
|
119
|
+
# No change / avoid dividing by 0
|
120
|
+
return [0, 0] if system_cpu_total == 0
|
121
|
+
|
119
122
|
cpu_usage_pct = system_cpu_usage.to_f / system_cpu_total
|
120
123
|
cpu_process_pct = process_cpu_usage.to_f / system_cpu_total
|
121
124
|
|
data/lib/elastic_apm/metrics.rb
CHANGED
@@ -29,15 +29,13 @@ module ElasticAPM
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.os
|
32
|
-
@
|
32
|
+
@os ||= RbConfig::CONFIG.fetch('host_os', 'unknown').to_sym
|
33
33
|
end
|
34
34
|
|
35
35
|
# @api private
|
36
36
|
class Registry
|
37
37
|
include Logging
|
38
38
|
|
39
|
-
TIMEOUT_INTERVAL = 5 # seconds
|
40
|
-
|
41
39
|
def initialize(config, &block)
|
42
40
|
@config = config
|
43
41
|
@callback = block
|
@@ -76,8 +74,7 @@ module ElasticAPM
|
|
76
74
|
|
77
75
|
@timer_task = Concurrent::TimerTask.execute(
|
78
76
|
run_now: true,
|
79
|
-
execution_interval: config.metrics_interval
|
80
|
-
timeout_interval: TIMEOUT_INTERVAL
|
77
|
+
execution_interval: config.metrics_interval
|
81
78
|
) do
|
82
79
|
begin
|
83
80
|
debug 'Collecting metrics'
|
data/lib/elastic_apm/span.rb
CHANGED
@@ -49,7 +49,8 @@ module ElasticAPM
|
|
49
49
|
action: nil,
|
50
50
|
context: nil,
|
51
51
|
stacktrace_builder: nil,
|
52
|
-
sync: nil
|
52
|
+
sync: nil,
|
53
|
+
exit_span: false
|
53
54
|
)
|
54
55
|
@name = name
|
55
56
|
|
@@ -68,6 +69,8 @@ module ElasticAPM
|
|
68
69
|
|
69
70
|
@context = context || Span::Context.new(sync: sync)
|
70
71
|
@stacktrace_builder = stacktrace_builder
|
72
|
+
|
73
|
+
@exit_span = exit_span
|
71
74
|
end
|
72
75
|
# rubocop:enable Metrics/ParameterLists
|
73
76
|
|
@@ -75,6 +78,7 @@ module ElasticAPM
|
|
75
78
|
|
76
79
|
attr_accessor(
|
77
80
|
:action,
|
81
|
+
:exit_span,
|
78
82
|
:name,
|
79
83
|
:original_backtrace,
|
80
84
|
:outcome,
|
@@ -93,6 +97,8 @@ module ElasticAPM
|
|
93
97
|
:transaction
|
94
98
|
)
|
95
99
|
|
100
|
+
alias :exit_span? :exit_span
|
101
|
+
|
96
102
|
# life cycle
|
97
103
|
|
98
104
|
def start(clock_start = Util.monotonic_micros)
|
@@ -107,17 +113,6 @@ module ElasticAPM
|
|
107
113
|
@parent.child_stopped
|
108
114
|
@self_time = @duration - child_durations.duration
|
109
115
|
|
110
|
-
if exit_span?
|
111
|
-
context.destination ||= Context::Destination.new
|
112
|
-
context.destination.service ||= Context::Destination::Service.new
|
113
|
-
context.destination.service.resource ||= (subtype || type)
|
114
|
-
|
115
|
-
# Deprecated fields but required by some versions of APM Server, so
|
116
|
-
# we auto-infer them from existing fields
|
117
|
-
context.destination.service.name ||= (subtype || type)
|
118
|
-
context.destination.service.type ||= type
|
119
|
-
end
|
120
|
-
|
121
116
|
self
|
122
117
|
end
|
123
118
|
|
@@ -158,6 +153,7 @@ module ElasticAPM
|
|
158
153
|
" type:#{type.inspect}" \
|
159
154
|
" subtype:#{subtype.inspect}" \
|
160
155
|
" action:#{action.inspect}" \
|
156
|
+
" exit_span:#{exit_span.inspect}" \
|
161
157
|
'>'
|
162
158
|
end
|
163
159
|
|
@@ -180,9 +176,5 @@ module ElasticAPM
|
|
180
176
|
|
181
177
|
duration >= min_duration
|
182
178
|
end
|
183
|
-
|
184
|
-
def exit_span?
|
185
|
-
context.destination || context.db || context.message || context.http
|
186
|
-
end
|
187
179
|
end
|
188
180
|
end
|
@@ -22,9 +22,9 @@ module ElasticAPM
|
|
22
22
|
module Spies
|
23
23
|
# @api private
|
24
24
|
class DynamoDBSpy
|
25
|
-
NAME = 'dynamodb'
|
26
25
|
TYPE = 'db'
|
27
26
|
SUBTYPE = 'dynamodb'
|
27
|
+
ACTION = 'query'
|
28
28
|
|
29
29
|
@@formatted_op_names = Concurrent::Map.new
|
30
30
|
|
@@ -63,7 +63,12 @@ module ElasticAPM
|
|
63
63
|
statement: params[:key_condition_expression]
|
64
64
|
},
|
65
65
|
destination: {
|
66
|
-
|
66
|
+
address: config.endpoint.host,
|
67
|
+
port: config.endpoint.port,
|
68
|
+
service: {
|
69
|
+
name: SUBTYPE,
|
70
|
+
type: TYPE,
|
71
|
+
resource: SUBTYPE },
|
67
72
|
cloud: { region: config.region }
|
68
73
|
}
|
69
74
|
)
|
@@ -72,7 +77,7 @@ module ElasticAPM
|
|
72
77
|
ElasticAPM::Spies::DynamoDBSpy.span_name(operation_name, params),
|
73
78
|
TYPE,
|
74
79
|
subtype: SUBTYPE,
|
75
|
-
action:
|
80
|
+
action: ACTION,
|
76
81
|
context: context
|
77
82
|
) do
|
78
83
|
ElasticAPM::Spies::DynamoDBSpy.without_net_http do
|
@@ -79,7 +79,11 @@ module ElasticAPM
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def install
|
82
|
-
::
|
82
|
+
if defined?(::Elastic::Transport::Client)
|
83
|
+
::Elastic::Transport::Client.prepend(Ext)
|
84
|
+
elsif defined?(::Elasticsearch::Transport::Client)
|
85
|
+
::Elasticsearch::Transport::Client.prepend(Ext)
|
86
|
+
end
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
@@ -88,5 +92,11 @@ module ElasticAPM
|
|
88
92
|
'elasticsearch-transport',
|
89
93
|
ElasticsearchSpy.new
|
90
94
|
)
|
95
|
+
|
96
|
+
register(
|
97
|
+
'Elastic::Transport::Client',
|
98
|
+
'elastic-transport',
|
99
|
+
ElasticsearchSpy.new
|
100
|
+
)
|
91
101
|
end
|
92
102
|
end
|
@@ -35,8 +35,10 @@ module ElasticAPM
|
|
35
35
|
SUBTYPE = 'mongodb'
|
36
36
|
ACTION = 'query'
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
EVENT_KEY = :__elastic_instrumenter_mongo_events_key
|
39
|
+
|
40
|
+
def events
|
41
|
+
Thread.current[EVENT_KEY] ||= []
|
40
42
|
end
|
41
43
|
|
42
44
|
def started(event)
|
@@ -70,7 +72,7 @@ module ElasticAPM
|
|
70
72
|
# and the collection name is at the key `collection`
|
71
73
|
collection =
|
72
74
|
if event.command[event.command_name] == 1 ||
|
73
|
-
|
75
|
+
event.command[event.command_name].is_a?(BSON::Int64)
|
74
76
|
event.command[:collection]
|
75
77
|
else
|
76
78
|
event.command[event.command_name]
|
@@ -89,14 +91,13 @@ module ElasticAPM
|
|
89
91
|
context: build_context(event)
|
90
92
|
)
|
91
93
|
|
92
|
-
|
94
|
+
events << span
|
93
95
|
end
|
94
96
|
|
95
97
|
def pop_event(event)
|
96
|
-
span = @events.delete(event.operation_id)
|
97
98
|
return unless (curr = ElasticAPM.current_span)
|
98
99
|
|
99
|
-
curr ==
|
100
|
+
curr == events[-1] && ElasticAPM.end_span(events.pop)
|
100
101
|
end
|
101
102
|
|
102
103
|
def build_context(event)
|
data/lib/elastic_apm/spies/s3.rb
CHANGED
@@ -87,8 +87,17 @@ module ElasticAPM
|
|
87
87
|
|
88
88
|
resource = "#{SUBTYPE}/#{bucket_name || 'unknown-bucket'}"
|
89
89
|
context = ElasticAPM::Span::Context.new(
|
90
|
+
db: {
|
91
|
+
instance: config.region,
|
92
|
+
type: SUBTYPE
|
93
|
+
},
|
90
94
|
destination: {
|
91
|
-
|
95
|
+
address: config.endpoint.host,
|
96
|
+
port: config.endpoint.port,
|
97
|
+
service: {
|
98
|
+
name: SUBTYPE,
|
99
|
+
type: TYPE,
|
100
|
+
resource: resource },
|
92
101
|
cloud: { region: region }
|
93
102
|
}
|
94
103
|
)
|
@@ -35,7 +35,6 @@ module ElasticAPM
|
|
35
35
|
include Logging
|
36
36
|
|
37
37
|
WATCHER_EXECUTION_INTERVAL = 5
|
38
|
-
WATCHER_TIMEOUT_INTERVAL = 4
|
39
38
|
WORKER_JOIN_TIMEOUT = 5
|
40
39
|
|
41
40
|
def initialize(config)
|
@@ -112,8 +111,7 @@ module ElasticAPM
|
|
112
111
|
|
113
112
|
def create_watcher
|
114
113
|
@watcher = Concurrent::TimerTask.execute(
|
115
|
-
execution_interval: WATCHER_EXECUTION_INTERVAL
|
116
|
-
timeout_interval: WATCHER_TIMEOUT_INTERVAL
|
114
|
+
execution_interval: WATCHER_EXECUTION_INTERVAL
|
117
115
|
) { ensure_worker_count }
|
118
116
|
end
|
119
117
|
|
@@ -80,14 +80,18 @@ module ElasticAPM
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def build_system(system)
|
83
|
-
{
|
84
|
-
detected_hostname: keyword_field(system.detected_hostname),
|
83
|
+
base = {
|
85
84
|
configured_hostname: keyword_field(system.configured_hostname),
|
86
85
|
architecture: keyword_field(system.architecture),
|
87
86
|
platform: keyword_field(system.platform),
|
88
87
|
kubernetes: keyword_object(system.kubernetes),
|
89
88
|
container: keyword_object(system.container)
|
90
89
|
}
|
90
|
+
if system.detected_hostname
|
91
|
+
base[:detected_hostname] = keyword_field(system.detected_hostname)
|
92
|
+
end
|
93
|
+
|
94
|
+
base
|
91
95
|
end
|
92
96
|
|
93
97
|
def build_cloud(cloud)
|
@@ -100,12 +100,12 @@ module ElasticAPM
|
|
100
100
|
port: destination.port
|
101
101
|
}
|
102
102
|
|
103
|
-
|
104
|
-
base[:service] =
|
103
|
+
if (service = destination.service) && !service.empty?
|
104
|
+
base[:service] = service.to_h
|
105
105
|
end
|
106
106
|
|
107
|
-
|
108
|
-
base[:cloud] =
|
107
|
+
if (cloud = destination.cloud) && !cloud.empty?
|
108
|
+
base[:cloud] = cloud.to_h
|
109
109
|
end
|
110
110
|
|
111
111
|
base
|
@@ -37,12 +37,18 @@ module ElasticAPM
|
|
37
37
|
|
38
38
|
[
|
39
39
|
"elastic-apm-ruby/#{@version}",
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
46
52
|
end
|
47
53
|
end
|
48
54
|
end
|
data/lib/elastic_apm/version.rb
CHANGED
data/lib/elastic_apm.rb
CHANGED
@@ -243,9 +243,12 @@ module ElasticAPM
|
|
243
243
|
|
244
244
|
# Ends the current span
|
245
245
|
#
|
246
|
+
# @param span [Span] Optional span to be ended instead of the last span
|
247
|
+
# created, useful for asynchronous environments where multiple spans are created in parallel
|
248
|
+
#
|
246
249
|
# @return [Span]
|
247
|
-
def end_span
|
248
|
-
agent&.end_span
|
250
|
+
def end_span(span = nil)
|
251
|
+
agent&.end_span(span)
|
249
252
|
end
|
250
253
|
|
251
254
|
# rubocop:disable Metrics/ParameterLists
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastic-apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikkel Malmberg
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
description:
|
41
|
+
description:
|
42
42
|
email:
|
43
43
|
- mikkel@elastic.co
|
44
44
|
executables: []
|
@@ -48,7 +48,7 @@ files:
|
|
48
48
|
- ".ci/.jenkins_codecov.yml"
|
49
49
|
- ".ci/.jenkins_exclude.yml"
|
50
50
|
- ".ci/.jenkins_framework.yml"
|
51
|
-
- ".ci/.
|
51
|
+
- ".ci/.jenkins_main_framework.yml"
|
52
52
|
- ".ci/.jenkins_ruby.yml"
|
53
53
|
- ".ci/Jenkinsfile"
|
54
54
|
- ".ci/docker/jruby/11-jdk/Dockerfile"
|
@@ -258,7 +258,7 @@ licenses:
|
|
258
258
|
- Apache-2.0
|
259
259
|
metadata:
|
260
260
|
source_code_uri: https://github.com/elastic/apm-agent-ruby
|
261
|
-
post_install_message:
|
261
|
+
post_install_message:
|
262
262
|
rdoc_options: []
|
263
263
|
require_paths:
|
264
264
|
- lib
|
@@ -273,8 +273,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
273
|
- !ruby/object:Gem::Version
|
274
274
|
version: '0'
|
275
275
|
requirements: []
|
276
|
-
rubygems_version: 3.0.
|
277
|
-
signing_key:
|
276
|
+
rubygems_version: 3.0.3.1
|
277
|
+
signing_key:
|
278
278
|
specification_version: 4
|
279
279
|
summary: The official Elastic APM agent for Ruby
|
280
280
|
test_files: []
|