appmap 0.51.2 → 0.54.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/.travis.yml +3 -1
- data/CHANGELOG.md +40 -0
- data/Rakefile +21 -5
- data/appmap.gemspec +8 -7
- data/exe/appmap-agent-init +19 -0
- data/exe/appmap-inspect +7 -0
- data/lib/appmap.rb +29 -119
- data/lib/appmap/agent.rb +115 -0
- data/lib/appmap/class_map.rb +2 -2
- data/lib/appmap/command/agent_setup/init.rb +44 -0
- data/lib/appmap/command/inspect.rb +27 -0
- data/lib/appmap/command_error.rb +13 -0
- data/lib/appmap/config.rb +13 -4
- data/lib/appmap/handler/net_http.rb +2 -1
- data/lib/appmap/handler/rails/request_handler.rb +2 -1
- data/lib/appmap/metadata.rb +4 -2
- data/lib/appmap/minitest.rb +2 -0
- data/lib/appmap/node_cli.rb +59 -0
- data/lib/appmap/railtie.rb +2 -2
- data/lib/appmap/rspec.rb +5 -3
- data/lib/appmap/service/guesser.rb +2 -9
- data/lib/appmap/swagger.rb +2 -0
- data/lib/appmap/swagger/configuration.rb +70 -0
- data/lib/appmap/swagger/markdown_descriptions.rb +43 -0
- data/lib/appmap/swagger/rake_tasks.rb +43 -0
- data/lib/appmap/swagger/stable.rb +37 -0
- data/lib/appmap/util.rb +31 -2
- data/lib/appmap/version.rb +1 -1
- data/package.json +5 -7
- data/spec/config_spec.rb +0 -1
- data/spec/fixtures/hook/.gitignore +2 -0
- data/spec/fixtures/hook/app/controllers/api/api_keys_controller.rb +1 -0
- data/spec/fixtures/hook/app/controllers/organizations_controller.rb +1 -0
- data/spec/fixtures/hook/app/models/api_key.rb +1 -0
- data/spec/fixtures/hook/app/models/configuration.rb +1 -0
- data/spec/fixtures/hook/app/models/show.rb +1 -0
- data/spec/fixtures/hook/app/models/user.rb +1 -0
- data/spec/fixtures/hook/revoke_api_key.appmap.json +847 -0
- data/spec/fixtures/hook/spec/api_spec.rb +1 -0
- data/spec/fixtures/hook/spec/user_spec.rb +1 -0
- data/spec/fixtures/hook/user_page_scenario.appmap.json +1722 -0
- data/spec/fixtures/rails5_users_app/config/environments/test.rb +3 -0
- data/spec/fixtures/rails5_users_app/docker-compose.yml +1 -1
- data/spec/fixtures/rails6_users_app/Dockerfile +9 -1
- data/spec/fixtures/rails6_users_app/appmap.yml +3 -1
- data/spec/fixtures/rails6_users_app/config/environments/test.rb +3 -0
- data/spec/fixtures/rails6_users_app/docker-compose.yml +1 -1
- data/spec/fixtures/rails6_users_app/lib/tasks/appmap.rake +13 -0
- data/spec/{abstract_controller_base_spec.rb → rails_recording_spec.rb} +2 -21
- data/spec/rails_spec_helper.rb +22 -0
- data/spec/swagger/swagger_spec.rb +47 -0
- data/test/{cli_test.rb → agent_setup_init_test.rb} +4 -4
- data/test/fixtures/gem_test/Gemfile +1 -0
- data/test/gem_test.rb +1 -0
- data/test/inspect_cli_test.rb +12 -0
- data/yarn.lock +477 -0
- metadata +39 -63
- data/exe/appmap-agent-setup +0 -47
- data/lib/appmap/algorithm/prune_class_map.rb +0 -67
- data/lib/appmap/algorithm/stats.rb +0 -91
- data/lib/appmap/command/init.rb +0 -42
- data/lib/appmap/command/record.rb +0 -38
- data/lib/appmap/command/stats.rb +0 -14
- data/lore/pages/2019-05-21-install-and-record/index.pug +0 -51
- data/lore/pages/2019-05-21-install-and-record/install_example_appmap.png +0 -0
- data/lore/pages/2019-05-21-install-and-record/metadata.yml +0 -5
- data/lore/pages/layout.pug +0 -66
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.css +0 -1912
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.css.map +0 -1
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.min.css +0 -7
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.min.css.map +0 -1
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.css +0 -331
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.css.map +0 -1
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.min.css +0 -8
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.min.css.map +0 -1
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.css +0 -9030
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.css.map +0 -1
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.min.css +0 -7
- data/lore/public/lib/bootstrap-4.1.3/css/bootstrap.min.css.map +0 -1
- data/lore/public/stylesheets/style.css +0 -8
- data/package-lock.json +0 -1064
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.
|
4
|
+
version: 0.54.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: 2021-06-
|
11
|
+
date: 2021-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,34 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: faraday
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: gli
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: method_source
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +39,7 @@ dependencies:
|
|
67
39
|
- !ruby/object:Gem::Version
|
68
40
|
version: '0'
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
42
|
+
name: rack
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
45
|
- - ">="
|
@@ -81,7 +53,7 @@ dependencies:
|
|
81
53
|
- !ruby/object:Gem::Version
|
82
54
|
version: '0'
|
83
55
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
56
|
+
name: reverse_markdown
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
86
58
|
requirements:
|
87
59
|
- - ">="
|
@@ -112,16 +84,16 @@ dependencies:
|
|
112
84
|
name: minitest
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
|
-
- -
|
87
|
+
- - '='
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
89
|
+
version: 5.14.4
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
|
-
- -
|
94
|
+
- - '='
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: 5.14.4
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: pry-byebug
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -308,7 +280,8 @@ description:
|
|
308
280
|
email:
|
309
281
|
- kgilpin@gmail.com
|
310
282
|
executables:
|
311
|
-
- appmap-agent-
|
283
|
+
- appmap-agent-init
|
284
|
+
- appmap-inspect
|
312
285
|
extensions:
|
313
286
|
- ext/appmap/extconf.rb
|
314
287
|
extra_rdoc_files: []
|
@@ -336,16 +309,16 @@ files:
|
|
336
309
|
- examples/mock_webapp/lib/mock_webapp/controller.rb
|
337
310
|
- examples/mock_webapp/lib/mock_webapp/request.rb
|
338
311
|
- examples/mock_webapp/lib/mock_webapp/user.rb
|
339
|
-
- exe/appmap-agent-
|
312
|
+
- exe/appmap-agent-init
|
313
|
+
- exe/appmap-inspect
|
340
314
|
- ext/appmap/appmap.c
|
341
315
|
- ext/appmap/extconf.rb
|
342
316
|
- lib/appmap.rb
|
343
|
-
- lib/appmap/
|
344
|
-
- lib/appmap/algorithm/stats.rb
|
317
|
+
- lib/appmap/agent.rb
|
345
318
|
- lib/appmap/class_map.rb
|
346
|
-
- lib/appmap/command/init.rb
|
347
|
-
- lib/appmap/command/
|
348
|
-
- lib/appmap/
|
319
|
+
- lib/appmap/command/agent_setup/init.rb
|
320
|
+
- lib/appmap/command/inspect.rb
|
321
|
+
- lib/appmap/command_error.rb
|
349
322
|
- lib/appmap/config.rb
|
350
323
|
- lib/appmap/cucumber.rb
|
351
324
|
- lib/appmap/event.rb
|
@@ -359,37 +332,31 @@ files:
|
|
359
332
|
- lib/appmap/metadata.rb
|
360
333
|
- lib/appmap/middleware/remote_recording.rb
|
361
334
|
- lib/appmap/minitest.rb
|
335
|
+
- lib/appmap/node_cli.rb
|
362
336
|
- lib/appmap/open.rb
|
363
337
|
- lib/appmap/railtie.rb
|
364
338
|
- lib/appmap/record.rb
|
365
339
|
- lib/appmap/rspec.rb
|
366
340
|
- lib/appmap/service/guesser.rb
|
341
|
+
- lib/appmap/swagger.rb
|
342
|
+
- lib/appmap/swagger/configuration.rb
|
343
|
+
- lib/appmap/swagger/markdown_descriptions.rb
|
344
|
+
- lib/appmap/swagger/rake_tasks.rb
|
345
|
+
- lib/appmap/swagger/stable.rb
|
367
346
|
- lib/appmap/trace.rb
|
368
347
|
- lib/appmap/util.rb
|
369
348
|
- lib/appmap/version.rb
|
370
|
-
- lore/pages/2019-05-21-install-and-record/index.pug
|
371
|
-
- lore/pages/2019-05-21-install-and-record/install_example_appmap.png
|
372
|
-
- lore/pages/2019-05-21-install-and-record/metadata.yml
|
373
|
-
- lore/pages/layout.pug
|
374
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.css
|
375
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.css.map
|
376
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.min.css
|
377
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-grid.min.css.map
|
378
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.css
|
379
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.css.map
|
380
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.min.css
|
381
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap-reboot.min.css.map
|
382
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap.css
|
383
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap.css.map
|
384
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap.min.css
|
385
|
-
- lore/public/lib/bootstrap-4.1.3/css/bootstrap.min.css.map
|
386
|
-
- lore/public/stylesheets/style.css
|
387
|
-
- package-lock.json
|
388
349
|
- package.json
|
389
350
|
- release.sh
|
390
|
-
- spec/abstract_controller_base_spec.rb
|
391
351
|
- spec/class_map_spec.rb
|
392
352
|
- spec/config_spec.rb
|
353
|
+
- spec/fixtures/hook/.gitignore
|
354
|
+
- spec/fixtures/hook/app/controllers/api/api_keys_controller.rb
|
355
|
+
- spec/fixtures/hook/app/controllers/organizations_controller.rb
|
356
|
+
- spec/fixtures/hook/app/models/api_key.rb
|
357
|
+
- spec/fixtures/hook/app/models/configuration.rb
|
358
|
+
- spec/fixtures/hook/app/models/show.rb
|
359
|
+
- spec/fixtures/hook/app/models/user.rb
|
393
360
|
- spec/fixtures/hook/attr_accessor.rb
|
394
361
|
- spec/fixtures/hook/compare.rb
|
395
362
|
- spec/fixtures/hook/constructor.rb
|
@@ -399,7 +366,11 @@ files:
|
|
399
366
|
- spec/fixtures/hook/instance_method.rb
|
400
367
|
- spec/fixtures/hook/labels.rb
|
401
368
|
- spec/fixtures/hook/method_named_call.rb
|
369
|
+
- spec/fixtures/hook/revoke_api_key.appmap.json
|
402
370
|
- spec/fixtures/hook/singleton_method.rb
|
371
|
+
- spec/fixtures/hook/spec/api_spec.rb
|
372
|
+
- spec/fixtures/hook/spec/user_spec.rb
|
373
|
+
- spec/fixtures/hook/user_page_scenario.appmap.json
|
403
374
|
- spec/fixtures/rack_users_app/.dockerignore
|
404
375
|
- spec/fixtures/rack_users_app/.gitignore
|
405
376
|
- spec/fixtures/rack_users_app/Dockerfile
|
@@ -542,6 +513,7 @@ files:
|
|
542
513
|
- spec/fixtures/rails6_users_app/features/support/hooks.rb
|
543
514
|
- spec/fixtures/rails6_users_app/features/support/steps.rb
|
544
515
|
- spec/fixtures/rails6_users_app/lib/tasks/.keep
|
516
|
+
- spec/fixtures/rails6_users_app/lib/tasks/appmap.rake
|
545
517
|
- spec/fixtures/rails6_users_app/log/.keep
|
546
518
|
- spec/fixtures/rails6_users_app/public/robots.txt
|
547
519
|
- spec/fixtures/rails6_users_app/spec/controllers/users_controller_api_spec.rb
|
@@ -552,15 +524,17 @@ files:
|
|
552
524
|
- spec/fixtures/rails6_users_app/users_app/.gitignore
|
553
525
|
- spec/hook_spec.rb
|
554
526
|
- spec/open_spec.rb
|
527
|
+
- spec/rails_recording_spec.rb
|
555
528
|
- spec/rails_spec_helper.rb
|
556
529
|
- spec/railtie_spec.rb
|
557
530
|
- spec/record_net_http_spec.rb
|
558
531
|
- spec/record_sql_rails_pg_spec.rb
|
559
532
|
- spec/remote_recording_spec.rb
|
560
533
|
- spec/spec_helper.rb
|
534
|
+
- spec/swagger/swagger_spec.rb
|
561
535
|
- spec/util_spec.rb
|
536
|
+
- test/agent_setup_init_test.rb
|
562
537
|
- test/bundle_vendor_test.rb
|
563
|
-
- test/cli_test.rb
|
564
538
|
- test/cucumber_test.rb
|
565
539
|
- test/expectations/openssl_test_key_sign1.json
|
566
540
|
- test/expectations/openssl_test_key_sign2.json
|
@@ -604,11 +578,13 @@ files:
|
|
604
578
|
- test/fixtures/rspec_recorder/spec/labeled_hello_spec.rb
|
605
579
|
- test/fixtures/rspec_recorder/spec/plain_hello_spec.rb
|
606
580
|
- test/gem_test.rb
|
581
|
+
- test/inspect_cli_test.rb
|
607
582
|
- test/minitest_test.rb
|
608
583
|
- test/openssl_test.rb
|
609
584
|
- test/record_process_test.rb
|
610
585
|
- test/rspec_test.rb
|
611
586
|
- test/test_helper.rb
|
587
|
+
- yarn.lock
|
612
588
|
homepage: https://github.com/applandinc/appmap-ruby
|
613
589
|
licenses:
|
614
590
|
- MIT
|
data/exe/appmap-agent-setup
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'gli'
|
5
|
-
|
6
|
-
require 'appmap'
|
7
|
-
|
8
|
-
class App
|
9
|
-
extend GLI::App
|
10
|
-
|
11
|
-
program_desc 'CLI tool to be used by IDEs for AppMap setup and configuration'
|
12
|
-
|
13
|
-
version AppMap::VERSION
|
14
|
-
|
15
|
-
subcommand_option_handling :normal
|
16
|
-
arguments :strict
|
17
|
-
preserve_argv true
|
18
|
-
|
19
|
-
desc 'AppMap configuration file name'
|
20
|
-
default_value ENV['APPMAP_CONFIG'] || AppMap::DEFAULT_CONFIG_FILE_PATH
|
21
|
-
arg_name 'filename'
|
22
|
-
flag %i[c config]
|
23
|
-
|
24
|
-
desc 'Creates base configuration file for the current project'
|
25
|
-
command :init do |c|
|
26
|
-
c.action do
|
27
|
-
require 'appmap/command/init'
|
28
|
-
AppMap::Command::Init.new(@config_file).perform
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
pre do |global, _, _, _|
|
33
|
-
@config_file = global[:config]
|
34
|
-
@config = interpret_config_option(@config_file) if File.exist?(@config_file)
|
35
|
-
true
|
36
|
-
end
|
37
|
-
|
38
|
-
class << self
|
39
|
-
protected
|
40
|
-
|
41
|
-
def interpret_config_option(fname)
|
42
|
-
AppMap::Config.load_from_file fname
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
exit App.run(ARGV)
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module AppMap
|
4
|
-
module Algorithm
|
5
|
-
# Prune a class map so that only functions, classes and packages which are referenced
|
6
|
-
# by some event are retained.
|
7
|
-
class PruneClassMap
|
8
|
-
attr_reader :class_map
|
9
|
-
# Set this attribute to a function which will log algorithm events.
|
10
|
-
attr_writer :logger
|
11
|
-
attr_accessor :events
|
12
|
-
|
13
|
-
# Construct the algorithm, with a class map that will be pruned in place.
|
14
|
-
def initialize(class_map)
|
15
|
-
@class_map = class_map
|
16
|
-
@logger = ->(msg) {}
|
17
|
-
end
|
18
|
-
|
19
|
-
def perform
|
20
|
-
# This proc counts the number of objects in the class map whose type is 'k'
|
21
|
-
count = proc do |k, e|
|
22
|
-
n = 0
|
23
|
-
n += 1 if e['type'] == k
|
24
|
-
n += (e['children'] || []).map { |child| count.call(k, child) }.reduce(0, :+)
|
25
|
-
n
|
26
|
-
end
|
27
|
-
|
28
|
-
@logger.call "Full classMap contains #{class_map.map { |m| count.call('class', m) }.reduce(0, :+)} classes"
|
29
|
-
|
30
|
-
# Prune all the classes which fail a test.
|
31
|
-
reject = proc do |list, test|
|
32
|
-
list.tap do |_|
|
33
|
-
list.each do |item|
|
34
|
-
children = item['children']
|
35
|
-
next unless children
|
36
|
-
|
37
|
-
reject.call(children, test)
|
38
|
-
end
|
39
|
-
list.reject!(&test)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
if events
|
44
|
-
locations = \
|
45
|
-
Set.new(events.select { |e| e['event'] == 'call' }
|
46
|
-
.map { |e| [ e['path'], e['lineno'] ].join(':') })
|
47
|
-
|
48
|
-
# Prune all functions which aren't called
|
49
|
-
reject.call class_map,
|
50
|
-
->(e) { e['type'] == 'function' && !locations.member?(e['location']) }
|
51
|
-
end
|
52
|
-
|
53
|
-
# Prune all empty classes
|
54
|
-
reject.call class_map,
|
55
|
-
->(e) { e['type'] == 'class' && (e['children'] || []).empty? }
|
56
|
-
|
57
|
-
# Prune all empty packages
|
58
|
-
reject.call class_map,
|
59
|
-
->(e) { e['type'] == 'package' && (e['children'] || []).empty? }
|
60
|
-
|
61
|
-
@logger.call "Pruned classMap contains #{class_map.map { |m| count.call('class', m) }.reduce(0, :+)} classes"
|
62
|
-
|
63
|
-
class_map
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module AppMap
|
4
|
-
module Algorithm
|
5
|
-
StatsStruct = Struct.new(:appmap)
|
6
|
-
|
7
|
-
# Compute AppMap statistics.
|
8
|
-
class Stats < StatsStruct
|
9
|
-
Result = Struct.new(:class_frequency, :method_frequency) do
|
10
|
-
def merge!(other)
|
11
|
-
merge = lambda do |freq, other_freq|
|
12
|
-
freq_by_name = freq.inject({}) do |table, entry|
|
13
|
-
table.tap do
|
14
|
-
table[entry.name] = entry
|
15
|
-
end
|
16
|
-
end
|
17
|
-
other_freq.each do |other_entry|
|
18
|
-
entry = freq_by_name[other_entry.name]
|
19
|
-
if entry
|
20
|
-
entry.count += other_entry.count
|
21
|
-
else
|
22
|
-
freq << other_entry
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
merge.call(class_frequency, other.class_frequency)
|
27
|
-
merge.call(method_frequency, other.method_frequency)
|
28
|
-
|
29
|
-
self
|
30
|
-
end
|
31
|
-
|
32
|
-
def sort!
|
33
|
-
comparator = ->(a,b) { b.count <=> a.count }
|
34
|
-
class_frequency.sort!(&comparator)
|
35
|
-
method_frequency.sort!(&comparator)
|
36
|
-
|
37
|
-
self
|
38
|
-
end
|
39
|
-
|
40
|
-
def limit!(limit)
|
41
|
-
self.class_frequency = class_frequency[0...limit]
|
42
|
-
self.method_frequency = method_frequency[0...limit]
|
43
|
-
|
44
|
-
self
|
45
|
-
end
|
46
|
-
|
47
|
-
def as_text
|
48
|
-
lines = [
|
49
|
-
"Class frequency:",
|
50
|
-
"----------------",
|
51
|
-
] + class_frequency.map(&:to_a).map(&:reverse).map { |line | line.join("\t") } + [
|
52
|
-
"",
|
53
|
-
"Method frequency:",
|
54
|
-
"----------------",
|
55
|
-
] + method_frequency.map(&:to_a).map(&:reverse).map { |line | line.join("\t") }
|
56
|
-
lines.join("\n")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
Frequency = Struct.new(:name, :count)
|
60
|
-
|
61
|
-
def perform(limit: nil)
|
62
|
-
events = appmap['events'] || []
|
63
|
-
frequency_calc = lambda do |key_func|
|
64
|
-
events_by_key = events.inject(Hash.new(0)) do |memo, event|
|
65
|
-
key = key_func.call(event)
|
66
|
-
memo.tap do
|
67
|
-
memo[key] += 1 if key
|
68
|
-
end
|
69
|
-
end
|
70
|
-
events_by_key.map do |key, count|
|
71
|
-
Frequency.new(key, count)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
class_name_func = ->(event) { event['defined_class'] }
|
76
|
-
full_name_func = lambda do |event|
|
77
|
-
call = event['event'] == 'call'
|
78
|
-
class_name = event['defined_class']
|
79
|
-
static = event['static']
|
80
|
-
function_name = event['method_id']
|
81
|
-
[ class_name, static ? '.' : '#', function_name ].join if call && class_name && !static.nil? && function_name
|
82
|
-
end
|
83
|
-
|
84
|
-
class_frequency = frequency_calc.call(class_name_func)
|
85
|
-
method_frequency = frequency_calc.call(full_name_func)
|
86
|
-
|
87
|
-
Result.new(class_frequency, method_frequency)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
data/lib/appmap/command/init.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'fileutils'
|
4
|
-
require 'appmap/service/guesser'
|
5
|
-
require 'appmap/util'
|
6
|
-
|
7
|
-
module AppMap
|
8
|
-
module Command
|
9
|
-
InitStruct = Struct.new(:config_file)
|
10
|
-
|
11
|
-
class Init < InitStruct
|
12
|
-
def perform
|
13
|
-
if File.exist?(config_file)
|
14
|
-
puts AppMap::Util.color(%(The AppMap config file #{config_file} already exists.), :magenta)
|
15
|
-
return
|
16
|
-
end
|
17
|
-
|
18
|
-
ensure_directory_exists
|
19
|
-
|
20
|
-
config = {
|
21
|
-
'name' => Service::Guesser.guess_name,
|
22
|
-
'packages' => Service::Guesser.guess_paths.map { |path| { 'path' => path } }
|
23
|
-
}
|
24
|
-
content = YAML.dump(config).gsub("---\n", '')
|
25
|
-
|
26
|
-
File.write(config_file, content)
|
27
|
-
puts AppMap::Util.color(
|
28
|
-
%(The following AppMap config file #{config_file} has been created:),
|
29
|
-
:green
|
30
|
-
)
|
31
|
-
puts content
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def ensure_directory_exists
|
37
|
-
dirname = File.dirname(config_file)
|
38
|
-
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|