plain_apm 0.8.8 → 0.9.0

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: 0ee5efa350c8782a6fc88fe147db4b6ac09779e441fc2fc28da05e6214f904a5
4
- data.tar.gz: cdcaacfaca4c36433bc9c52286657b1defaeacde3dcfa1e95a588da09edaffa3
3
+ metadata.gz: 86351e7cfbfef5b9e4916152f8f7638f3d25ec63eea2228552a7ed18a30af210
4
+ data.tar.gz: 3e2054248c4affa80a1a563fb340310fbeeac0d75caf9fc77dadcf1c14a9f975
5
5
  SHA512:
6
- metadata.gz: 9d2c951ee9987ab9c73ef70e5a4e5fe1332b5ee569f91759d9a052ed5dcc1006463ec4c7e0e67baf29230aba9aa95c47698fde3f988e27b43e8e7958dc8be560
7
- data.tar.gz: 43b8f5e9b5563b49566bd04052bb3a9fc04bdc6182c2315b3694a0783f17762c187ffdf8b39ef2f0ca322cb1ca824b0192be491bc59a5bb1776b709d4b1f5854
6
+ metadata.gz: 594f73225b32f2b172251c848b176c1c8fc1370a45d0804bd3741be82eff94cb26fc5526d290127591c274ee886723782890bc1be095b00b158f85331c366f2c
7
+ data.tar.gz: 6435cb48e14b99c36b1457e28eb343a65618cbda9a0a014e15031b3e08b17aa6da0e15dd3cffa5808df4b44d5db19b180c102103320c231b95d1da1a39bf14c2
@@ -71,7 +71,6 @@ module PlainApm
71
71
 
72
72
  def hooks
73
73
  @hooks ||= [
74
- Hooks::Deploy,
75
74
  Hooks::ActionMailer,
76
75
  Hooks::ActionPack,
77
76
  Hooks::ActionView,
@@ -0,0 +1,32 @@
1
+ module PlainApm
2
+ class DeployTracking
3
+ class << self
4
+ def revision
5
+ git_revision || hg_revision || heroku_revision
6
+ end
7
+
8
+ private
9
+
10
+ def git_revision
11
+ return unless File.exist?(".git")
12
+ rev = `git rev-parse --short=8 HEAD`.strip
13
+ rev if !rev.empty?
14
+ rescue Error::ENOENT # No git installed
15
+ nil
16
+ end
17
+
18
+ def heroku_revision
19
+ rev = ENV["HEROKU_SLUG_COMMIT"].to_s[0..8]
20
+ rev if !rev.empty?
21
+ end
22
+
23
+ def hg_revision
24
+ return unless File.exist?(".hg")
25
+ rev = `hg log -l 1 -r . -T '{node}'`.strip
26
+ rev if !rev.empty?
27
+ rescue Error::ENOENT # No mercurial installed
28
+ nil
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,7 +7,6 @@ module PlainApm
7
7
  action_controller
8
8
  action_mailer
9
9
  active_job
10
- deploy
11
10
  exception
12
11
  ].freeze
13
12
 
@@ -17,20 +16,6 @@ module PlainApm
17
16
  "ActionController::RoutingError" # Rails unmapped route, raised before the request hits the app.
18
17
  ].freeze
19
18
 
20
- def attributes_from_deploy(tool, revision)
21
- source = "deploy"
22
-
23
- attrs = {
24
- "source" => source,
25
- "revision" => revision,
26
- "name" => tool
27
- }
28
-
29
- attrs.merge!(trace_attributes(source))
30
-
31
- [tool, attrs]
32
- end
33
-
34
19
  def attributes_from_exception(e, context, error_source)
35
20
  source = "exception"
36
21
 
@@ -98,16 +83,20 @@ module PlainApm
98
83
  {
99
84
  "thread_id" => Thread.current.object_id,
100
85
  "collected_at" => Time.now.iso8601(9),
86
+ # TODO: There is a perf cost in Rubies until 3.3, so it might be a good
87
+ # idea to cache this. See https://bugs.ruby-lang.org/issues/19443 for
88
+ # the feature.
89
+ "pid" => Process.pid,
101
90
  "version" => PlainApm::VERSION
102
91
  }.merge(
103
- host_attributes
92
+ cached_attributes
104
93
  )
105
94
  end
106
95
 
107
- def host_attributes
108
- @host_attributes ||= {
96
+ def cached_attributes
97
+ @cached_attributes ||= {
109
98
  "hostname" => Socket.gethostname,
110
- "pid" => Process.pid
99
+ "revision" => PlainApm::DeployTracking.revision
111
100
  }
112
101
  end
113
102
 
@@ -22,7 +22,7 @@ module PlainApm
22
22
 
23
23
  case name
24
24
  when "sql"
25
- base.merge({"sql" => payload[:sql]})
25
+ base.merge({"sql" => payload[:sql], "sql_name" => payload[:name]})
26
26
  when "instantiation"
27
27
  base.merge({"class_name" => payload[:class_name], "record_count" => payload[:record_count]})
28
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PlainApm
4
- VERSION = "0.8.8"
4
+ VERSION = "0.9.0"
5
5
  end
data/lib/plain_apm.rb CHANGED
@@ -4,13 +4,11 @@ require_relative "plain_apm/version"
4
4
  require_relative "plain_apm/transport"
5
5
  require_relative "plain_apm/config"
6
6
  require_relative "plain_apm/agent"
7
+ require_relative "plain_apm/deploy_tracking"
7
8
  require_relative "plain_apm/event_attributes"
8
9
 
9
10
  require "object_tracing"
10
11
 
11
- # Deployment reporting.
12
- require_relative "plain_apm/hooks/deploy"
13
-
14
12
  # Rails instrumentation. The hooks won't install unless
15
13
  # ActiveSupport::Notifications is loaded.
16
14
  require_relative "plain_apm/hooks/active_support_subscriber"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plain_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.8
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PlainAPM Team
@@ -99,6 +99,7 @@ files:
99
99
  - lib/plain_apm.rb
100
100
  - lib/plain_apm/agent.rb
101
101
  - lib/plain_apm/config.rb
102
+ - lib/plain_apm/deploy_tracking.rb
102
103
  - lib/plain_apm/event_attributes.rb
103
104
  - lib/plain_apm/extensions/context.rb
104
105
  - lib/plain_apm/extensions/context/LICENSE.txt
@@ -119,7 +120,6 @@ files:
119
120
  - lib/plain_apm/hooks/active_record.rb
120
121
  - lib/plain_apm/hooks/active_support.rb
121
122
  - lib/plain_apm/hooks/active_support_subscriber.rb
122
- - lib/plain_apm/hooks/deploy.rb
123
123
  - lib/plain_apm/hooks/error_reporter.rb
124
124
  - lib/plain_apm/hooks/manual.rb
125
125
  - lib/plain_apm/transport.rb
@@ -1,59 +0,0 @@
1
- module PlainApm
2
- ##
3
- # Tracks current revision of the app.
4
- #
5
- # This enables per-deploy metrics segmentation and checking
6
- # for performance regressions.
7
- module Hooks
8
- class Deploy
9
- include EventAttributes
10
-
11
- ##
12
- # Collect once, immediately on install.
13
- def install
14
- collect
15
- end
16
-
17
- def uninstall
18
- # NOOP
19
- end
20
-
21
- def collect
22
- result = git_revision || hg_revision || return
23
-
24
- _, attrs = attributes_from_deploy(*result)
25
-
26
- ::PlainApm.agent.collect(attrs)
27
- end
28
-
29
- private
30
-
31
- # TODO: other deploy mechanisms
32
- #
33
- # Also, we might not be in the app root.
34
- def git_revision
35
- return unless File.exist?(".git")
36
-
37
- rev = `git rev-parse --short=8 HEAD`.strip
38
-
39
- return if rev.empty?
40
-
41
- ["git", rev]
42
- rescue Error::ENOENT # No git installed
43
- nil
44
- end
45
-
46
- def hg_revision
47
- return unless File.exist?(".hg")
48
-
49
- rev = `hg log -l 1 -r . -T '{node}'`.strip
50
-
51
- return if rev.empty?
52
-
53
- ["hg", rev]
54
- rescue Error::ENOENT # No mercurial installed
55
- nil
56
- end
57
- end
58
- end
59
- end