elastic-apm 3.11.1 → 3.12.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.asciidoc +8 -0
- data/docs/api.asciidoc +2 -1
- data/lib/elastic_apm.rb +14 -2
- data/lib/elastic_apm/middleware.rb +8 -3
- data/lib/elastic_apm/span.rb +12 -0
- data/lib/elastic_apm/spies/delayed_job.rb +2 -0
- data/lib/elastic_apm/spies/faraday.rb +1 -0
- data/lib/elastic_apm/spies/http.rb +1 -0
- data/lib/elastic_apm/spies/mongo.rb +6 -2
- data/lib/elastic_apm/spies/net_http.rb +1 -0
- data/lib/elastic_apm/spies/rake.rb +4 -2
- data/lib/elastic_apm/spies/resque.rb +4 -2
- data/lib/elastic_apm/spies/sequel.rb +10 -1
- data/lib/elastic_apm/spies/shoryuken.rb +2 -0
- data/lib/elastic_apm/spies/sidekiq.rb +2 -0
- data/lib/elastic_apm/spies/sneakers.rb +2 -0
- data/lib/elastic_apm/spies/sucker_punch.rb +2 -0
- data/lib/elastic_apm/transaction.rb +13 -1
- data/lib/elastic_apm/transport/serializers/span_serializer.rb +2 -1
- data/lib/elastic_apm/transport/serializers/transaction_serializer.rb +1 -0
- data/lib/elastic_apm/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c810b4e9b4f1149873235af4d1ddd6b4a85acf7734c491a42d21777443d57a0
|
4
|
+
data.tar.gz: f63af16c444a3a5499cd9246b1d11bba2cd9a7a31efed58bfd23d5b1c8b3e0d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed48f7f3870b346a17ec5e263c90c67f68b1f355a4900c3a79ae998bf689b1b549e6658d7c4165b934091669734bea561acf9991b82446a6ca4164558a488301
|
7
|
+
data.tar.gz: f87f347bf3a72e8d331e95d95ceca640d12754cb049ce4c39097b03b75d022c347f95062d3e311e0fb0cbc90f61050449ed1bd6f39f8682c95e935fccf7509f9
|
data/CHANGELOG.asciidoc
CHANGED
@@ -35,6 +35,14 @@ endif::[]
|
|
35
35
|
[[release-notes-3.x]]
|
36
36
|
=== Ruby Agent version 3.x
|
37
37
|
|
38
|
+
[[release-notes-3.12.0]]
|
39
|
+
==== 3.12.0 (2020-11-10)
|
40
|
+
|
41
|
+
[float]
|
42
|
+
===== Added
|
43
|
+
|
44
|
+
- Add outcome to transactions and spans {pull}883[#883]
|
45
|
+
|
38
46
|
[[release-notes-3.11.1]]
|
39
47
|
==== 3.11.1 (2020-11-05)
|
40
48
|
|
data/docs/api.asciidoc
CHANGED
@@ -433,6 +433,7 @@ end
|
|
433
433
|
- `name`: String
|
434
434
|
- `type`: String
|
435
435
|
- `result`: String
|
436
|
+
- `outcome`: String ('unknown', 'success', 'failure', nil)
|
436
437
|
- `trace_id`: String (readonly)
|
437
438
|
|
438
439
|
[float]
|
@@ -457,7 +458,7 @@ If your service generates the HTML page dynamically, initializing the
|
|
457
458
|
JavaScript RUM agent with the value of this method allows analyzing the time
|
458
459
|
spent in the browser vs in the backend services.
|
459
460
|
|
460
|
-
To enable the JavaScript RUM agent,
|
461
|
+
To enable the JavaScript RUM agent, initialize the RUM agent with the Ruby
|
461
462
|
agent's current transaction:
|
462
463
|
|
463
464
|
[source,html]
|
data/lib/elastic_apm.rb
CHANGED
@@ -183,7 +183,12 @@ module ElasticAPM
|
|
183
183
|
context: context,
|
184
184
|
trace_context: trace_context
|
185
185
|
)
|
186
|
-
yield transaction
|
186
|
+
result = yield transaction
|
187
|
+
transaction&.outcome ||= Transaction::Outcome::SUCCESS
|
188
|
+
result
|
189
|
+
rescue
|
190
|
+
transaction&.outcome ||= Transaction::Outcome::FAILURE
|
191
|
+
raise
|
187
192
|
ensure
|
188
193
|
end_transaction
|
189
194
|
end
|
@@ -287,7 +292,14 @@ module ElasticAPM
|
|
287
292
|
parent: parent,
|
288
293
|
sync: sync
|
289
294
|
)
|
290
|
-
yield span
|
295
|
+
result = yield span
|
296
|
+
span&.outcome =
|
297
|
+
Span::Outcome::SUCCESS unless span&.outcome
|
298
|
+
result
|
299
|
+
rescue
|
300
|
+
span&.outcome =
|
301
|
+
Span::Outcome::FAILURE unless span&.outcome
|
302
|
+
raise
|
291
303
|
ensure
|
292
304
|
end_span
|
293
305
|
end
|
@@ -41,9 +41,14 @@ module ElasticAPM
|
|
41
41
|
ElasticAPM.report(e, context: context, handled: false)
|
42
42
|
raise
|
43
43
|
ensure
|
44
|
-
if
|
45
|
-
|
46
|
-
|
44
|
+
if transaction
|
45
|
+
if resp
|
46
|
+
status, headers, _body = resp
|
47
|
+
transaction.add_response(status, headers: headers.dup)
|
48
|
+
transaction&.outcome = Transaction::Outcome.from_http_status(status)
|
49
|
+
else
|
50
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
49
54
|
ElasticAPM.end_transaction http_result(status)
|
data/lib/elastic_apm/span.rb
CHANGED
@@ -25,6 +25,17 @@ module ElasticAPM
|
|
25
25
|
extend Forwardable
|
26
26
|
include ChildDurations::Methods
|
27
27
|
|
28
|
+
# @api private
|
29
|
+
class Outcome
|
30
|
+
FAILURE = "failure"
|
31
|
+
SUCCESS = "success"
|
32
|
+
UNKNOWN = "unknown"
|
33
|
+
|
34
|
+
def self.from_http_status(code)
|
35
|
+
code.to_i >= 400 ? FAILURE : SUCCESS
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
28
39
|
DEFAULT_TYPE = 'custom'
|
29
40
|
|
30
41
|
# rubocop:disable Metrics/ParameterLists
|
@@ -67,6 +78,7 @@ module ElasticAPM
|
|
67
78
|
:action,
|
68
79
|
:name,
|
69
80
|
:original_backtrace,
|
81
|
+
:outcome,
|
70
82
|
:subtype,
|
71
83
|
:trace_context,
|
72
84
|
:type
|
@@ -42,9 +42,11 @@ module ElasticAPM
|
|
42
42
|
transaction = ElasticAPM.start_transaction(job_name, TYPE)
|
43
43
|
job.invoke_job_without_apm(*args, &block)
|
44
44
|
transaction&.done 'success'
|
45
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
45
46
|
rescue ::Exception => e
|
46
47
|
ElasticAPM.report(e, handled: false)
|
47
48
|
transaction&.done 'error'
|
49
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
48
50
|
raise
|
49
51
|
ensure
|
50
52
|
ElasticAPM.end_transaction
|
@@ -44,11 +44,15 @@ module ElasticAPM
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def failed(event)
|
47
|
-
pop_event(event)
|
47
|
+
span = pop_event(event)
|
48
|
+
span&.outcome = Span::Outcome::FAILURE
|
49
|
+
span
|
48
50
|
end
|
49
51
|
|
50
52
|
def succeeded(event)
|
51
|
-
pop_event(event)
|
53
|
+
span = pop_event(event)
|
54
|
+
span&.outcome = Span::Outcome::SUCCESS
|
55
|
+
span
|
52
56
|
end
|
53
57
|
|
54
58
|
private
|
@@ -39,9 +39,11 @@ module ElasticAPM
|
|
39
39
|
begin
|
40
40
|
result = execute_without_apm(*args)
|
41
41
|
|
42
|
-
transaction
|
42
|
+
transaction&.result = 'success'
|
43
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
43
44
|
rescue StandardError => e
|
44
|
-
transaction
|
45
|
+
transaction&.result = 'error'
|
46
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
45
47
|
ElasticAPM.report(e)
|
46
48
|
|
47
49
|
raise
|
@@ -36,10 +36,12 @@ module ElasticAPM
|
|
36
36
|
name = @payload && @payload['class']&.to_s
|
37
37
|
transaction = ElasticAPM.start_transaction(name, TYPE)
|
38
38
|
perform_without_elastic_apm
|
39
|
-
transaction
|
39
|
+
transaction&.done 'success'
|
40
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
40
41
|
rescue ::Exception => e
|
41
42
|
ElasticAPM.report(e, handled: false)
|
42
|
-
transaction
|
43
|
+
transaction&.done 'error'
|
44
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
43
45
|
raise
|
44
46
|
ensure
|
45
47
|
ElasticAPM.end_transaction
|
@@ -61,7 +61,12 @@ module ElasticAPM
|
|
61
61
|
action: ACTION,
|
62
62
|
context: context
|
63
63
|
)
|
64
|
-
|
64
|
+
log_connection_yield_without_apm(
|
65
|
+
sql,
|
66
|
+
connection,
|
67
|
+
args,
|
68
|
+
&block
|
69
|
+
).tap do |result|
|
65
70
|
if name =~ /^(UPDATE|DELETE)/
|
66
71
|
if connection.respond_to?(:changes)
|
67
72
|
span.context.db.rows_affected = connection.changes
|
@@ -70,7 +75,11 @@ module ElasticAPM
|
|
70
75
|
end
|
71
76
|
end
|
72
77
|
end
|
78
|
+
rescue
|
79
|
+
span&.outcome = Span::Outcome::FAILURE
|
80
|
+
raise
|
73
81
|
ensure
|
82
|
+
span&.outcome ||= Span::Outcome::SUCCESS
|
74
83
|
ElasticAPM.end_span
|
75
84
|
end
|
76
85
|
end
|
@@ -37,9 +37,11 @@ module ElasticAPM
|
|
37
37
|
yield
|
38
38
|
|
39
39
|
transaction&.done :success
|
40
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
40
41
|
rescue ::Exception => e
|
41
42
|
ElasticAPM.report(e, handled: false)
|
42
43
|
transaction&.done :error
|
44
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
43
45
|
raise
|
44
46
|
ensure
|
45
47
|
ElasticAPM.end_transaction
|
@@ -35,9 +35,11 @@ module ElasticAPM
|
|
35
35
|
yield
|
36
36
|
|
37
37
|
transaction&.done :success
|
38
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
38
39
|
rescue ::Exception => e
|
39
40
|
ElasticAPM.report(e, handled: false)
|
40
41
|
transaction&.done :error
|
42
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
41
43
|
raise
|
42
44
|
ensure
|
43
45
|
ElasticAPM.end_transaction
|
@@ -57,11 +57,13 @@ module ElasticAPM
|
|
57
57
|
|
58
58
|
res = @app.call(deserialized_msg, delivery_info, metadata, handler)
|
59
59
|
transaction&.done(:success)
|
60
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
60
61
|
|
61
62
|
res
|
62
63
|
rescue ::Exception => e
|
63
64
|
ElasticAPM.report(e, handled: false)
|
64
65
|
transaction&.done(:error)
|
66
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
65
67
|
raise
|
66
68
|
ensure
|
67
69
|
ElasticAPM.end_transaction
|
@@ -35,12 +35,14 @@ module ElasticAPM
|
|
35
35
|
transaction = ElasticAPM.start_transaction(name, TYPE)
|
36
36
|
__run_perform_without_elastic_apm(*args)
|
37
37
|
transaction.done 'success'
|
38
|
+
transaction&.outcome = Transaction::Outcome::SUCCESS
|
38
39
|
rescue ::Exception => e
|
39
40
|
# Note that SuckerPunch by default doesn't raise the errors from
|
40
41
|
# the user-defined JobClass#perform method as it uses an error
|
41
42
|
# handler, accessed via `SuckerPunch.exception_handler`.
|
42
43
|
ElasticAPM.report(e, handled: false)
|
43
44
|
transaction.done 'error'
|
45
|
+
transaction&.outcome = Transaction::Outcome::FAILURE
|
44
46
|
raise
|
45
47
|
ensure
|
46
48
|
ElasticAPM.end_transaction
|
@@ -20,6 +20,18 @@
|
|
20
20
|
module ElasticAPM
|
21
21
|
# @api private
|
22
22
|
class Transaction
|
23
|
+
|
24
|
+
# @api private
|
25
|
+
class Outcome
|
26
|
+
FAILURE = "failure"
|
27
|
+
SUCCESS = "success"
|
28
|
+
UNKNOWN = "unknown"
|
29
|
+
|
30
|
+
def self.from_http_status(code)
|
31
|
+
code.to_i >= 500 ? FAILURE : SUCCESS
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
23
35
|
extend Forwardable
|
24
36
|
include ChildDurations::Methods
|
25
37
|
|
@@ -74,7 +86,7 @@ module ElasticAPM
|
|
74
86
|
end
|
75
87
|
# rubocop:enable Metrics/ParameterLists
|
76
88
|
|
77
|
-
attr_accessor :name, :type, :result
|
89
|
+
attr_accessor :name, :type, :result, :outcome
|
78
90
|
|
79
91
|
attr_reader(
|
80
92
|
:breakdown_metrics,
|
@@ -35,6 +35,7 @@ module ElasticAPM
|
|
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?,
|
data/lib/elastic_apm/version.rb
CHANGED
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: 3.
|
4
|
+
version: 3.12.0
|
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: 2020-11-
|
11
|
+
date: 2020-11-10 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: []
|
@@ -245,7 +245,7 @@ licenses:
|
|
245
245
|
- Apache-2.0
|
246
246
|
metadata:
|
247
247
|
source_code_uri: https://github.com/elastic/apm-agent-ruby
|
248
|
-
post_install_message:
|
248
|
+
post_install_message:
|
249
249
|
rdoc_options: []
|
250
250
|
require_paths:
|
251
251
|
- lib
|
@@ -260,8 +260,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
260
260
|
- !ruby/object:Gem::Version
|
261
261
|
version: '0'
|
262
262
|
requirements: []
|
263
|
-
rubygems_version: 3.0.
|
264
|
-
signing_key:
|
263
|
+
rubygems_version: 3.0.6
|
264
|
+
signing_key:
|
265
265
|
specification_version: 4
|
266
266
|
summary: The official Elastic APM agent for Ruby
|
267
267
|
test_files: []
|