plain_apm 0.9.7 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa551d3d06407550f5b0dcdb0290d00044097193060a3652314835d77de94880
4
- data.tar.gz: 1f6240ab1462eecbbb9ddf83378a7eb02dc13d3e4daf9008150f94d5a312ae28
3
+ metadata.gz: 72d2d8915ce85d5a10557fd615a6011840b329155bc0d8765c1a5cef05383bc3
4
+ data.tar.gz: e9473490d411042af5e1cc04d7374ebb6b8f7b5c07aebaaa0bda604ca0bfb3a2
5
5
  SHA512:
6
- metadata.gz: ee98c2b0f5d46042248423b8e3b8c57eeab8144ce3417b94483b63a03bc7fad694ce7cd4ee125f726a678a932a90311dbce7b39173fa458769a07d3c1ebe48f9
7
- data.tar.gz: dbcdf5c2b5faf4bdd7e7b2c8a268b09cf726455b853d650d0e04717f0a90d519412c93da0e534448e8590e5a3e817208a893eb414a95a6013441ea3096ff6214
6
+ metadata.gz: 7230625a30f50a3777ba5364544979b3edf1718b752836791b4c66997bb4988ca3e8311b1a11ddbefd8de4c0c80f2bae6761532fc0a08567d7b09b67d65a2062
7
+ data.tar.gz: ff5e0376280f779a9ce2e4cd8cab148d61bf87c8280406b43a71aa409c63974d149afd727540774e564c9d383788d69b9cc533d90bd64849e86ff8f6763db536
@@ -31,8 +31,8 @@ module PlainApm
31
31
  attrs[:event_source] = error_source
32
32
  end
33
33
 
34
- if context[:env]
35
- attrs[:params] = context[:env]["action_dispatch.request.parameters"]
34
+ if context[:controller]&.is_a?(ActionController::Base)
35
+ attrs[:controller] = context[:controller].class.name
36
36
  end
37
37
 
38
38
  if context[:job]&.is_a?(ActiveJob::Base)
@@ -40,6 +40,12 @@ module PlainApm
40
40
  attrs[:queue_name] = context[:job].queue_name
41
41
  end
42
42
 
43
+ if context[:env]
44
+ attrs[:params] = context.dig(:env, "action_dispatch.request.parameters")
45
+ attrs[:action] = context.dig(:env, "action_dispatch.request.parameters", :action)
46
+ attrs[:controller] = context.dig(:env, "action_controller.instance")&.class.name
47
+ end
48
+
43
49
  # https://bugs.ruby-lang.org/issues/19197
44
50
  root_cause = e
45
51
  root_cause = root_cause.cause while root_cause.cause
@@ -73,9 +79,22 @@ module PlainApm
73
79
  attrs[:source] = source
74
80
  attrs[:name] = name
75
81
  attrs[:allocations] = event.allocations
82
+ attrs[:thread_cpu_time] = event.cpu_time
76
83
  attrs[:event_time] = event.time
77
84
  attrs[:duration] = event.duration
78
85
 
86
+ if event.respond_to?(:gc_time)
87
+ attrs[:gc_time] = event.gc_time
88
+ end
89
+
90
+ if event.respond_to?(:gc_major_count)
91
+ attrs[:gc_major_count] = event.gc_major_count
92
+ end
93
+
94
+ if event.respond_to?(:gc_minor_count)
95
+ attrs[:gc_minor_count] = event.gc_minor_count
96
+ end
97
+
79
98
  if event.respond_to?(:thread_allocations)
80
99
  attrs[:thread_allocations] = event.thread_allocations
81
100
  end
@@ -0,0 +1,77 @@
1
+ module PlainApm
2
+ module Extensions
3
+ module ActiveSupport
4
+ module Event
5
+ def start!
6
+ super
7
+ @thread_allocation_count_start = now_thread_allocations
8
+ @gc_time_start = now_gc_time
9
+ @gc_major_count_start = now_gc_major_count
10
+ @gc_minor_count_start = now_gc_minor_count
11
+ end
12
+
13
+ def finish!
14
+ super
15
+ @thread_allocation_count_finish = now_thread_allocations
16
+ @gc_time_finish = now_gc_time
17
+ @gc_major_count_finish = now_gc_major_count
18
+ @gc_minor_count_finish = now_gc_minor_count
19
+ end
20
+
21
+ def thread_allocations
22
+ @thread_allocation_count_finish - @thread_allocation_count_start
23
+ end
24
+
25
+ def gc_time
26
+ @gc_time_finish - @gc_time_start
27
+ end
28
+
29
+ def gc_major_count
30
+ @gc_major_count_finish - @gc_major_count_start
31
+ end
32
+
33
+ def gc_minor_count
34
+ @gc_minor_count_finish - @gc_minor_count_start
35
+ end
36
+
37
+ private
38
+
39
+ # Per thread GC counter
40
+ def now_thread_allocations
41
+ PlainApm::ObjectTracing.total_thread_allocated_objects
42
+ end
43
+
44
+ if GC.stat.key?(:major_gc_count)
45
+ def now_gc_major_count
46
+ GC.stat(:major_gc_count)
47
+ end
48
+ else
49
+ def now_gc_major_count
50
+ 0
51
+ end
52
+ end
53
+
54
+ if GC.stat.key?(:minor_gc_count)
55
+ def now_gc_minor_count
56
+ GC.stat(:minor_gc_count)
57
+ end
58
+ else
59
+ def now_gc_minor_count
60
+ 0
61
+ end
62
+ end
63
+
64
+ # Time in ms spent in GC
65
+ if GC.stat.key?(:time)
66
+ def now_gc_time
67
+ GC.stat(:time)
68
+ end
69
+ else
70
+ def now_gc_time
71
+ 0
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PlainApm
4
+ module Extensions
5
+ module ActiveSupport
6
+ class Railtie < Rails::Railtie
7
+ initializer(:plain_apm_thread_allocations, after: :plain_apm_agent_start) do
8
+ next if !PlainApm.agent.enabled?
9
+
10
+ require "object_tracing"
11
+
12
+ ::ActiveSupport::Notifications::Event.prepend(
13
+ PlainApm::Extensions::ActiveSupport::Event
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ require_relative "active_support/event"
2
+ require_relative "active_support/railtie" if defined?(Rails::Railtie)
@@ -14,7 +14,7 @@ module PlainApm
14
14
  initializer(:plain_apm_thread_context, after: :plain_apm_agent_start) do |app|
15
15
  next if !PlainApm.agent.enabled?
16
16
 
17
- ActiveSupport.on_load(:active_job, run_once: true) do |klass|
17
+ ::ActiveSupport.on_load(:active_job, run_once: true) do |klass|
18
18
  klass.prepend(PlainApm::Extensions::Context::ActiveJob)
19
19
  end
20
20
 
@@ -25,6 +25,7 @@ module PlainApm
25
25
  base.tap do |o|
26
26
  o[:sql] = payload[:sql]
27
27
  o[:sql_name] = payload[:name]
28
+ o[:async] = payload[:async]
28
29
  end
29
30
  when "instantiation"
30
31
  base.tap do |o|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PlainApm
4
- VERSION = "0.9.7"
4
+ VERSION = "0.9.8"
5
5
  end
data/lib/plain_apm.rb CHANGED
@@ -24,8 +24,8 @@ require_relative "plain_apm/extensions/context"
24
24
  # Rack exceptions. Activate the middleware if in Rails.
25
25
  require_relative "plain_apm/extensions/exceptions"
26
26
 
27
- # Per thread allocations in ASN events
28
- require_relative "plain_apm/extensions/thread_allocations"
27
+ # Extra stats in ASN events
28
+ require_relative "plain_apm/extensions/active_support"
29
29
 
30
30
  # Rails instrumentation. The hooks won't install unless
31
31
  # ActiveSupport::Notifications is loaded.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plain_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - PlainAPM Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-24 00:00:00.000000000 Z
11
+ date: 2024-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -101,6 +101,9 @@ files:
101
101
  - lib/plain_apm/config.rb
102
102
  - lib/plain_apm/deploy_tracking.rb
103
103
  - lib/plain_apm/event_attributes.rb
104
+ - lib/plain_apm/extensions/active_support.rb
105
+ - lib/plain_apm/extensions/active_support/event.rb
106
+ - lib/plain_apm/extensions/active_support/railtie.rb
104
107
  - lib/plain_apm/extensions/context.rb
105
108
  - lib/plain_apm/extensions/context/LICENSE.txt
106
109
  - lib/plain_apm/extensions/context/active_job.rb
@@ -108,12 +111,8 @@ files:
108
111
  - lib/plain_apm/extensions/context/rack.rb
109
112
  - lib/plain_apm/extensions/context/railtie.rb
110
113
  - lib/plain_apm/extensions/exceptions.rb
111
- - lib/plain_apm/extensions/exceptions/active_job.rb
112
114
  - lib/plain_apm/extensions/exceptions/rack.rb
113
115
  - lib/plain_apm/extensions/exceptions/railtie.rb
114
- - lib/plain_apm/extensions/thread_allocations.rb
115
- - lib/plain_apm/extensions/thread_allocations/active_support_event.rb
116
- - lib/plain_apm/extensions/thread_allocations/railtie.rb
117
116
  - lib/plain_apm/helpers.rb
118
117
  - lib/plain_apm/hooks/action_mailer.rb
119
118
  - lib/plain_apm/hooks/action_pack.rb
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PlainApm
4
- module Extensions
5
- module TraceId
6
- module ActiveJob
7
- attr_accessor :trace_id
8
-
9
- def initialize(*arguments)
10
- super(*arguments)
11
-
12
- # Either from request headers / a previous job, or a new trace.
13
- @trace_id = PlainApm::Extensions::TraceId.current || SecureRandom.uuid
14
- end
15
-
16
- def serialize
17
- super.update("trace_id" => trace_id)
18
- end
19
-
20
- def deserialize(job)
21
- PlainApm::Extensions::TraceId.current = job["trace_id"]
22
-
23
- super(job)
24
- end
25
- end
26
-
27
- ##
28
- # Allow tracing request ID through jobs
29
- ActiveSupport.on_load(:active_job, run_once: true) do |klass|
30
- klass.prepend(ActiveJob)
31
- end
32
- end
33
- end
34
- end
@@ -1,25 +0,0 @@
1
- module PlainApm
2
- module Extensions
3
- module ThreadAllocations
4
- module ActiveSupportEvent
5
- def start!
6
- super
7
- @thread_allocation_count_start = now_thread_allocations
8
- end
9
-
10
- def finish!
11
- super
12
- @thread_allocation_count_finish = now_thread_allocations
13
- end
14
-
15
- def thread_allocations
16
- @thread_allocation_count_finish - @thread_allocation_count_start
17
- end
18
-
19
- def now_thread_allocations
20
- PlainApm::ObjectTracing.total_thread_allocated_objects
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PlainApm
4
- module Extensions
5
- module ThreadAllocations
6
- class Railtie < Rails::Railtie
7
- initializer(:plain_apm_thread_allocationss, after: :plain_apm_agent_start) do
8
- next if !PlainApm.agent.enabled?
9
-
10
- require "object_tracing"
11
-
12
- ActiveSupport::Notifications::Event.prepend(
13
- PlainApm::Extensions::ThreadAllocations::ActiveSupportEvent
14
- )
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,2 +0,0 @@
1
- require_relative "thread_allocations/active_support_event"
2
- require_relative "thread_allocations/railtie" if defined?(Rails::Railtie)