plain_apm 0.2.6 → 0.2.9

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: ef383306da20d00a0bc5c8b2072b1dfbb3d49eb7c5d1f0710cee6d6749b726d2
4
- data.tar.gz: b5c174eb5869f5909695af612182f2e9e6fe960230ce4ecd2d94b4701c5856fc
3
+ metadata.gz: c39a4ac239df66dd854830dcc645189a5a21aa1708acae43d2928fb03c691bd6
4
+ data.tar.gz: 1acda2ec24a71c06870c32697d00f63136fad59dacecea4e21b99c5df05982cc
5
5
  SHA512:
6
- metadata.gz: 86dc64bd65c57fc77f4713f10bf08beeff9f32c7f9e80e3fc454b4462ff14a4cfc0613bd24879d2ec08e2692e9e35eb3ccad49b015cbfc3e331e9bcbdf4e45b9
7
- data.tar.gz: 6f79c406f73217c44c06a46359722fb1ecb8d8c72e1c6de8ed5846992cab12ba56dc4c36fac18919896ab1f002a98129301d28cefde8502ccd32d7f6319f82c6
6
+ metadata.gz: 3f3c3d112b0bf4b364711d0072fdea6db28da08be2cf36c82bb3c982b9b3c7ba8205caa3a642be503e731c29a88d0e8684b246291dffa24b469a2600d3c875fc
7
+ data.tar.gz: c62b897b2b45e7f4bf98059d344e647099592c7b8541950d0a271b0a2ae7d8e3e70bd11a75775de0de7f0094313157cb698ccee13ec3edec2a1aee9c6090c180
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "singleton"
4
4
  require "json"
5
+ require "socket"
5
6
 
6
7
  module PlainApm
7
8
  class Agent
@@ -18,11 +19,24 @@ module PlainApm
18
19
  def collect(event)
19
20
  return unless @config.enabled
20
21
 
21
- @events << event.merge(
22
+ ##
23
+ # Context contains the trace ID (which comes from either
24
+ # HTTP_X_REQUEST_ID header, the deserialized job,
25
+ # or is generated by the trace_id middleware).
26
+ # It can also carry user inserted app data.
27
+ if defined?(PlainApm::Extensions::Context)
28
+ event.merge!(PlainApm::Extensions::Context.current)
29
+ end
30
+
31
+ event.merge!(
32
+ "version" => PlainApm::VERSION,
22
33
  "collected_at" => Time.now.utc.to_f,
34
+ "hostname" => Socket.gethostname,
23
35
  "pid" => Process.pid,
24
- "thread_id" => Thread.current.object_id.to_s
36
+ "thread_id" => Thread.current.object_id.to_s,
25
37
  )
38
+
39
+ @events << event
26
40
  end
27
41
 
28
42
  def start
@@ -2,15 +2,17 @@
2
2
 
3
3
  module PlainApm
4
4
  module Extensions
5
- module TraceId
5
+ module Context
6
6
  module ActiveJob
7
+ # TODO: would it be useful to de-serialize the whole context (e.g. user
8
+ # IDs, subscriptions, etc?)
7
9
  def serialize
8
- trace_id = PlainApm::Extensions::TraceId.current || SecureRandom.uuid
10
+ trace_id = PlainApm::Extensions::Context.trace_id || SecureRandom.uuid
9
11
  super.update("trace_id" => trace_id)
10
12
  end
11
13
 
12
14
  def deserialize(job)
13
- PlainApm::Extensions::TraceId.current = job["trace_id"]
15
+ PlainApm::Extensions::Context.trace_id = job["trace_id"]
14
16
 
15
17
  super(job)
16
18
  end
@@ -0,0 +1,11 @@
1
+ module PlainApm
2
+ module Extensions
3
+ module Context
4
+ module Helpers
5
+ def plain_apm_context(context = {})
6
+ PlainApm::Extensions::Context.context.merge!(context)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -10,26 +10,26 @@ require "securerandom"
10
10
  # See LICENSE.txt in the current directory for the license.
11
11
  module PlainApm
12
12
  module Extensions
13
- module TraceId
13
+ module Context
14
14
  class Middleware
15
15
  def initialize(app)
16
16
  @app = app
17
17
  end
18
18
 
19
19
  def call(env)
20
- TraceId.current = trace_id(env)
20
+ Context.trace_id = trace_id(env)
21
21
 
22
22
  status, headers, body = @app.call(env)
23
23
 
24
24
  body = Rack::BodyProxy.new(body) do
25
- TraceId.current = nil
25
+ Context.clear!
26
26
  end
27
27
 
28
28
  processed = true
29
29
 
30
30
  [status, headers, body]
31
31
  ensure
32
- TraceId.current = nil if !processed
32
+ Context.clear! if !processed
33
33
  end
34
34
 
35
35
  private
@@ -8,13 +8,13 @@
8
8
  # See LICENSE.txt in the current directory for the license.
9
9
  module PlainApm
10
10
  module Extensions
11
- module TraceId
11
+ module Context
12
12
  class Railtie < Rails::Railtie
13
- initializer "plain_apm.insert_trace_id_middleware" do |app|
13
+ initializer "plain_apm.insert_context_middleware" do |app|
14
14
  if defined?(ActionDispatch::RequestId)
15
- app.config.middleware.insert_after ActionDispatch::RequestId, PlainApm::Extensions::TraceId::Middleware
15
+ app.config.middleware.insert_after ActionDispatch::RequestId, PlainApm::Extensions::Context::Middleware
16
16
  else
17
- app.config.middleware.insert_after Rack::MethodOverride, PlainApm::Extensions::TraceId::Middleware
17
+ app.config.middleware.insert_after Rack::MethodOverride, PlainApm::Extensions::Context::Middleware
18
18
  end
19
19
  end
20
20
  end
@@ -0,0 +1,41 @@
1
+ module PlainApm
2
+ module Extensions
3
+ module Context
4
+ STORE_KEY = :plain_apm_extensions_store
5
+ TRACE_ID_KEY = :trace_id
6
+ CONTEXT_KEY = :context
7
+
8
+ def self.current
9
+ Thread.current[STORE_KEY] ||= {}
10
+ end
11
+
12
+ def self.clear!
13
+ Thread.current[STORE_KEY] = {}
14
+ end
15
+
16
+ def self.[](key)
17
+ current[key]
18
+ end
19
+
20
+ def self.[]=(key, value)
21
+ current[key] = value
22
+ end
23
+
24
+ def self.context
25
+ current[CONTEXT_KEY] ||= {}
26
+ end
27
+
28
+ def self.context=(hash)
29
+ current[CONTEXT_KEY] = hash
30
+ end
31
+
32
+ def self.trace_id
33
+ current[TRACE_ID_KEY]
34
+ end
35
+
36
+ def self.trace_id=(id)
37
+ current[TRACE_ID_KEY] = id
38
+ end
39
+ end
40
+ end
41
+ end
@@ -29,8 +29,7 @@ module PlainApm
29
29
  "class" => e.class.name,
30
30
  "message" => e.message,
31
31
  "backtrace" => e.backtrace,
32
- "params" => env["action_dispatch.request.parameters"],
33
- "trace_id" => PlainApm::Extensions::TraceId.current
32
+ "params" => env["action_dispatch.request.parameters"]
34
33
  }
35
34
 
36
35
  PlainApm::Agent.collect(event)
@@ -21,8 +21,7 @@ module PlainApm
21
21
  "backtrace" => filtered_backtrace,
22
22
  "allocations" => event.allocations,
23
23
  "started_at" => event.time,
24
- "finished_at" => event.end,
25
- "trace_id" => trace_id
24
+ "finished_at" => event.end
26
25
  }
27
26
 
28
27
  case name
@@ -21,8 +21,7 @@ module PlainApm
21
21
  "backtrace" => filtered_backtrace,
22
22
  "allocations" => event.allocations,
23
23
  "started_at" => event.time,
24
- "finished_at" => event.end,
25
- "trace_id" => trace_id
24
+ "finished_at" => event.end
26
25
  }
27
26
 
28
27
  case name
@@ -21,8 +21,7 @@ module PlainApm
21
21
  "backtrace" => filtered_backtrace,
22
22
  "started_at" => event.time,
23
23
  "finished_at" => event.end,
24
- "allocations" => event.allocations,
25
- "trace_id" => trace_id
24
+ "allocations" => event.allocations
26
25
  }
27
26
 
28
27
  case name
@@ -22,7 +22,6 @@ module PlainApm
22
22
  "backtrace" => filtered_backtrace,
23
23
  "started_at" => event.time,
24
24
  "finished_at" => event.end,
25
- "trace_id" => trace_id,
26
25
  "allocations" => event.allocations,
27
26
  "queue_name" => job.queue_name,
28
27
  "job_id" => job.job_id,
@@ -23,8 +23,7 @@ module PlainApm
23
23
  "backtrace" => filtered_backtrace,
24
24
  "started_at" => event.time,
25
25
  "finished_at" => event.end,
26
- "allocations" => event.allocations,
27
- "trace_id" => trace_id
26
+ "allocations" => event.allocations
28
27
  }
29
28
 
30
29
  case name
@@ -45,13 +45,6 @@ module PlainApm
45
45
  @cleaner.clean(caller)
46
46
  end
47
47
  end
48
-
49
- ##
50
- # The trace ID (comes from either HTTP_X_REQUEST_ID header, or is
51
- # generated by the trace_id middleware)
52
- def trace_id
53
- PlainApm::Extensions::TraceId.current
54
- end
55
48
  end
56
49
  end
57
50
  end
@@ -32,8 +32,7 @@ module PlainApm
32
32
  "backtrace" => e.backtrace,
33
33
  "handled" => handled,
34
34
  "severity" => severity,
35
- "context" => context,
36
- "trace_id" => PlainApm::Extensions::TraceId.current
35
+ "context" => context
37
36
  }
38
37
 
39
38
  if e.cause
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PlainApm
4
- VERSION = "0.2.6"
4
+ VERSION = "0.2.9"
5
5
  end
data/lib/plain_apm.rb CHANGED
@@ -11,10 +11,11 @@ require_relative "plain_apm/hooks/deploy"
11
11
  begin
12
12
  require "rack/body_proxy"
13
13
 
14
- require_relative "plain_apm/extensions/trace_id"
15
- require_relative "plain_apm/extensions/trace_id/middleware"
16
- require_relative "plain_apm/extensions/trace_id/active_job" if defined?(ActiveSupport)
17
- require_relative "plain_apm/extensions/trace_id/railtie" if defined?(Rails::Railtie)
14
+ require_relative "plain_apm/extensions/context"
15
+ require_relative "plain_apm/extensions/context/helpers"
16
+ require_relative "plain_apm/extensions/context/middleware"
17
+ require_relative "plain_apm/extensions/context/active_job" if defined?(ActiveSupport)
18
+ require_relative "plain_apm/extensions/context/railtie" if defined?(Rails::Railtie)
18
19
  rescue LoadError
19
20
  nil
20
21
  end
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.2.6
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - PlainAPM Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-05 00:00:00.000000000 Z
11
+ date: 2022-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -82,14 +82,15 @@ files:
82
82
  - lib/plain_apm/agent.rb
83
83
  - lib/plain_apm/backoff.rb
84
84
  - lib/plain_apm/config.rb
85
+ - lib/plain_apm/extensions/context.rb
86
+ - lib/plain_apm/extensions/context/LICENSE.txt
87
+ - lib/plain_apm/extensions/context/active_job.rb
88
+ - lib/plain_apm/extensions/context/helpers.rb
89
+ - lib/plain_apm/extensions/context/middleware.rb
90
+ - lib/plain_apm/extensions/context/railtie.rb
85
91
  - lib/plain_apm/extensions/exceptions/active_job.rb
86
92
  - lib/plain_apm/extensions/exceptions/rack.rb
87
93
  - lib/plain_apm/extensions/exceptions/railtie.rb
88
- - lib/plain_apm/extensions/trace_id.rb
89
- - lib/plain_apm/extensions/trace_id/LICENSE.txt
90
- - lib/plain_apm/extensions/trace_id/active_job.rb
91
- - lib/plain_apm/extensions/trace_id/middleware.rb
92
- - lib/plain_apm/extensions/trace_id/railtie.rb
93
94
  - lib/plain_apm/hooks/action_mailer.rb
94
95
  - lib/plain_apm/hooks/action_pack.rb
95
96
  - lib/plain_apm/hooks/action_view.rb
@@ -1,15 +0,0 @@
1
- module PlainApm
2
- module Extensions
3
- module TraceId
4
- TRACE_KEY = :plain_apm_extensions_trace_id
5
-
6
- def self.current
7
- Thread.current[TRACE_KEY]
8
- end
9
-
10
- def self.current=(id)
11
- Thread.current[TRACE_KEY] = id
12
- end
13
- end
14
- end
15
- end