appmap 0.74.0 → 0.77.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: eb314cb1f41f3735c773670cd8082bbc8cedb98d9b01c6c71a0c6a2d2b094da5
4
- data.tar.gz: fb4f94b03bb6c50465d22db22f5cc1d25bfb95e3638543986306ca63ce5603e7
3
+ metadata.gz: 72b52604fce9e01c3e4bc760d12f877a47b846a2f42a3e880dc3fbe3a3caf07b
4
+ data.tar.gz: 50428860dafdf6f79add97f9f51787014358b6178f5206ebc915c85dced62eb7
5
5
  SHA512:
6
- metadata.gz: 2da7b411bf29e42b6c81dad1c897021e67e85b4770037543508ea2562a6132d3e8c7d2fe8574971231c06f3ebaaa328264d9db461363f3f59166922d8327060f
7
- data.tar.gz: 248770c6d301895621c72d6f46c6e6e1c18abaa368356c7c9deebd480e91ce8bb456374c04bd4547ae7423976d8911f1e627c137d2cffdb6801db50bef55a229
6
+ metadata.gz: ae7670741f126ccf52fc7916229f29831a4320a673db755ab9c38fa9286e970baa447134c96acab4f443a4115bd8bca8f49552a983212e328bacabd88abd8352
7
+ data.tar.gz: 5e7b760bc10d31a40ae44996a9200e1ef6c3976364b4a43e5dd6b7b9b81005f57e1efac758f54b4d8274dc420cc74baebf91629ab12bc2a26b8959642feba56d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ # [0.77.0](https://github.com/applandinc/appmap-ruby/compare/v0.76.0...v0.77.0) (2022-03-22)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add label job.perform ([fb5e220](https://github.com/applandinc/appmap-ruby/commit/fb5e220a1f4fd724d8d0178fd4282fed73ff9371))
7
+ * Add labels for devise ([734ec61](https://github.com/applandinc/appmap-ruby/commit/734ec617aa81d756acf3cb392b5eaabcf9521934))
8
+
9
+ # [0.76.0](https://github.com/applandinc/appmap-ruby/compare/v0.75.0...v0.76.0) (2022-03-19)
10
+
11
+
12
+ ### Features
13
+
14
+ * Autoload hook handlers ([4cc0e70](https://github.com/applandinc/appmap-ruby/commit/4cc0e7003a8c37d3b6c8c8bbc68cffac0335b878))
15
+
16
+ # [0.75.0](https://github.com/applandinc/appmap-ruby/compare/v0.74.0...v0.75.0) (2022-03-17)
17
+
18
+
19
+ ### Features
20
+
21
+ * Apply label deserialize.safe to ActiveSupport.run_load_hooks ([1f67f9b](https://github.com/applandinc/appmap-ruby/commit/1f67f9b260503772cba6824ef746f903def14323))
22
+ * Print stacks if requested by env var ([72ef911](https://github.com/applandinc/appmap-ruby/commit/72ef9116d3248467632762ce63303a54bed998e9))
23
+
1
24
  # [0.74.0](https://github.com/applandinc/appmap-ruby/compare/v0.73.0...v0.74.0) (2022-03-14)
2
25
 
3
26
 
data/lib/appmap/config.rb CHANGED
@@ -4,8 +4,7 @@ require 'pathname'
4
4
  require 'set'
5
5
  require 'yaml'
6
6
  require 'appmap/util'
7
- require 'appmap/handler/net_http'
8
- require 'appmap/handler/rails/template'
7
+ require 'appmap/handler'
9
8
  require 'appmap/service/guesser'
10
9
  require 'appmap/swagger/configuration'
11
10
  require 'appmap/depends/configuration'
@@ -206,8 +205,8 @@ module AppMap
206
205
  }.compact
207
206
 
208
207
  handler_class = hook_decl['handler_class']
209
- options[:handler_class] = Util.class_from_string(handler_class) if handler_class
210
-
208
+ options[:handler_class] = Handler.find(handler_class) if handler_class
209
+
211
210
  package_hooks(methods, **options)
212
211
  end
213
212
 
@@ -1,2 +1,6 @@
1
1
  - method: ActiveJob::Enqueuing#enqueue
2
2
  label: job.create
3
+ - methods:
4
+ - ActiveJob::Execution#perform
5
+ - ActiveJob::Execution#perform_now
6
+ label: job.perform
@@ -10,3 +10,7 @@
10
10
  label: crypto.secure_compare
11
11
  require_name: active_support/security_utils
12
12
  force: true
13
+ - method: ActiveSupport.run_load_hooks
14
+ label: deserialize.safe
15
+ require_name: active_support/lazy_load_hooks
16
+ force: true
@@ -0,0 +1,8 @@
1
+ - method: Devise::TokenGenerator#generate
2
+ label: secret
3
+ - method: Devise.friendly_token
4
+ label: secret
5
+ - method: Devise.secure_compare
6
+ label: security.secure_compare
7
+ - method: Devise::Strategies::DatabaseAuthenticatable#authenticate!
8
+ label: security.authentication
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/inflector/methods'
4
+
5
+ module AppMap
6
+ # Specific hook handler classes and general related utilities.
7
+ module Handler
8
+ # Try to find handler module with a given name.
9
+ #
10
+ # If the module is not loaded, tries to require the appropriate file
11
+ # using the usual conventions, eg. `Acme::Handler::AppMap` will try
12
+ # to require `acme/handler/app_map`, then `acme/handler` and
13
+ # finally `acme`. Raises NameError if the module could not be loaded
14
+ # this way.
15
+ def self.find(name)
16
+ begin
17
+ return Object.const_get name
18
+ rescue NameError
19
+ try_load ActiveSupport::Inflector.underscore name
20
+ end
21
+ Object.const_get name
22
+ end
23
+
24
+ def self.try_load(fname)
25
+ fname = fname.sub %r{^app_map/}, 'appmap/'
26
+ fname = fname.split '/'
27
+ until fname.empty?
28
+ begin
29
+ require fname.join '/'
30
+ return
31
+ rescue LoadError
32
+ # pass
33
+ end
34
+ fname.pop
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/appmap/hook.rb CHANGED
@@ -108,8 +108,11 @@ module AppMap
108
108
 
109
109
  warn "AppMap: Initiating hook for builtin #{class_name} #{method_name}" if LOG
110
110
 
111
- base_cls = Util.class_from_string(class_name, must: false)
112
- next unless base_cls
111
+ begin
112
+ base_cls = Object.const_get class_name
113
+ rescue NameError
114
+ next
115
+ end
113
116
 
114
117
  hook_method = lambda do |entry|
115
118
  cls, method = entry
data/lib/appmap/trace.rb CHANGED
@@ -84,12 +84,43 @@ module AppMap
84
84
  end
85
85
  end
86
86
 
87
+ class StackPrinter
88
+ class << self
89
+ def enabled?
90
+ ENV['APPMAP_PRINT_STACKS'] == 'true'
91
+ end
92
+
93
+ def depth
94
+ (ENV['APPMAP_STACK_DEPTH'] || 20).to_i
95
+ end
96
+ end
97
+
98
+ def initialize
99
+ @@stacks ||= Hash.new
100
+ end
101
+
102
+ def record(event)
103
+ stack = caller.select { |line| !line.index('/lib/appmap/') }[0...StackPrinter.depth].join("\n ")
104
+ stack_hash = Digest::SHA256.hexdigest(stack)
105
+ unless @@stacks[stack_hash]
106
+ @@stacks[stack_hash] = stack
107
+ puts
108
+ puts 'Event: ' + event.to_h.map { |k, v| [ "#{k}: #{v}" ] }.join(", ")
109
+ puts ' ' + stack
110
+ puts
111
+ end
112
+ end
113
+ end
114
+
87
115
  class Tracer
116
+ attr_accessor :stacks
117
+
88
118
  # Records the events which happen in a program.
89
119
  def initialize
90
120
  @events = []
91
121
  @last_package_for_thread = {}
92
122
  @methods = Set.new
123
+ @stack_printer = StackPrinter.new if StackPrinter.enabled?
93
124
  @enabled = false
94
125
  end
95
126
 
@@ -112,6 +143,7 @@ module AppMap
112
143
  def record_event(event, package: nil, defined_class: nil, method: nil)
113
144
  return unless @enabled
114
145
 
146
+ @stack_printer.record(event) if @stack_printer
115
147
  @last_package_for_thread[Thread.current.object_id] = package if package
116
148
  @events << event
117
149
  static = event.static if event.respond_to?(:static)
data/lib/appmap/util.rb CHANGED
@@ -21,14 +21,6 @@ module AppMap
21
21
  WHITE = "\e[37m"
22
22
 
23
23
  class << self
24
- def class_from_string(fq_class, must: true)
25
- fq_class.split('::').inject(Object) do |mod, class_name|
26
- mod.const_get(class_name)
27
- end
28
- rescue NameError
29
- raise if must
30
- end
31
-
32
24
  def parse_function_name(name)
33
25
  package_tokens = name.split('/')
34
26
 
@@ -3,7 +3,7 @@
3
3
  module AppMap
4
4
  URL = 'https://github.com/applandinc/appmap-ruby'
5
5
 
6
- VERSION = '0.74.0'
6
+ VERSION = '0.77.0'
7
7
 
8
8
  APPMAP_FORMAT_VERSION = '1.5.1'
9
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.74.0
4
+ version: 0.77.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Gilpin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-14 00:00:00.000000000 Z
11
+ date: 2022-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -369,11 +369,13 @@ files:
369
369
  - lib/appmap/gem_hooks/activerecord.yml
370
370
  - lib/appmap/gem_hooks/activesupport.yml
371
371
  - lib/appmap/gem_hooks/cancancan.yml
372
+ - lib/appmap/gem_hooks/devise.yml
372
373
  - lib/appmap/gem_hooks/rails.yml
373
374
  - lib/appmap/gem_hooks/railties.yml
374
375
  - lib/appmap/gem_hooks/resque.yml
375
376
  - lib/appmap/gem_hooks/sidekiq.yml
376
377
  - lib/appmap/gem_hooks/sprockets.yml
378
+ - lib/appmap/handler.rb
377
379
  - lib/appmap/handler/function.rb
378
380
  - lib/appmap/handler/net_http.rb
379
381
  - lib/appmap/handler/rails/request_handler.rb