test-prof-autopilot 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 254d657c3dc55ab41d3834aa7470be97aa17bf27130e8073849784519ba41dc2
4
- data.tar.gz: 1311b34585cbaa6ca232bb2e718abe4f7e69ab04a563458ca479037d2fb6d48a
3
+ metadata.gz: 9814c6fc84b702a7d7edeebb22fede49954aa7cb928c4ece4e1978e21fce8a75
4
+ data.tar.gz: 981b60fae0e644d9c11e80ac9c1ab937ba9e5ff0d2cd1822548327dca8cacb8f
5
5
  SHA512:
6
- metadata.gz: 467db9623c7dea50c2689849b3afe2e1b994c8e3ed05bcb8a4de7dcbcb7279e6d6c9be0cff0880bc2651006e6ce46d606299f55214931f34944ab1ded3ae5fa1
7
- data.tar.gz: 144c90bcecb8bc2780606d85c3029883667f6fa2c9a27b191f783d823c19e66698c7062cb5f24621a09cb466005c060c19fa375ef59e8be57b0dccbfea73d77c
6
+ metadata.gz: ec256dace9f1c8cd214afa15709664cce8c1e00bbb21daa65d04205f688d9095af30fa52f86aa53eb312f146ae48d47f5d806d7e08932f7f3c9455a4c9cc134d
7
+ data.tar.gz: 707ecd3e12db15064f0b321158823a3f78ac98e6552e87fd98e54c15701a6b5348402169d76a9705a5e9aabafd411511cf41bbef6d20ac1023e356cdaa4f3ecf
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.2.0 (2024-08-14)
6
+
7
+ - Add FactoryDefault profiler support. ([@palkan][])
8
+
5
9
  ## 0.1.0 (2023-11-21)
6
10
 
7
11
  - Initial public release. ([@palkan][])
data/README.md CHANGED
@@ -85,6 +85,7 @@ Currently, Autopilot supports the following Test Prof profilers:
85
85
  - [TagProf](https://test-prof.evilmartians.io/profilers/tag_prof) (as `:tag_prof`)
86
86
  - [StackProf](https://test-prof.evilmartians.io/profilers/stack_prof) (as `:stack_prof`)
87
87
  - [FactoryProf](https://test-prof.evilmartians.io/profilers/factory_prof) (as `:factory_prof`)
88
+ - [FactoryDefault profiler](https://test-prof.evilmartians.io/recipes/factory_default) (as `:factory_default_prof`)
88
89
 
89
90
  ## Installation
90
91
 
@@ -16,6 +16,10 @@ require "test_prof/autopilot/stack_prof/printer"
16
16
  require "test_prof/autopilot/stack_prof/writer"
17
17
  require "test_prof/autopilot/stack_prof/profiling_executor"
18
18
 
19
+ require "test_prof/autopilot/factory_default/printer"
20
+ require "test_prof/autopilot/factory_default/writer"
21
+ require "test_prof/autopilot/factory_default/profiling_executor"
22
+
19
23
  module TestProf
20
24
  module Autopilot
21
25
  # Module contains all available DSL instructions
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TestProf
4
+ module Autopilot
5
+ module FactoryDefault
6
+ # Module is used for printing :factory_prof report
7
+ module Printer
8
+ Registry.register(:factory_default_prof_printer, self)
9
+
10
+ class PrinterError < StandardError; end
11
+
12
+ def print_report(report)
13
+ result = report.result
14
+
15
+ require "test_prof/factory_default"
16
+ profiler = TestProf::FactoryDefault::Profiler.new
17
+ profiler.data.merge!(result)
18
+ profiler.print_report
19
+ end
20
+
21
+ module_function :print_report
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_prof/autopilot/profiling_executor/base"
4
+
5
+ module TestProf
6
+ module Autopilot
7
+ module FactoryDefault
8
+ # Provides :factory_default_prof specific validations, env and command building.
9
+ class ProfilingExecutor < ProfilingExecutor::Base
10
+ Registry.register(:factory_default_prof_executor, self)
11
+
12
+ def initialize(options)
13
+ super
14
+ @profiler = :factory_default_prof
15
+ end
16
+
17
+ private
18
+
19
+ def build_env
20
+ super.tap do |env|
21
+ env["FACTORY_DEFAULT_ENABLED"] = "true"
22
+ env["FACTORY_DEFAULT_PROF"] = "1"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "test_prof/autopilot/report_builder"
5
+
6
+ module TestProf
7
+ module Autopilot
8
+ module FactoryDefault
9
+ class Report
10
+ Registry.register(:factory_default_prof_report, self)
11
+
12
+ extend ReportBuilder
13
+
14
+ ARTIFACT_FILE = "factory_default_prof_report.json"
15
+
16
+ attr_reader :type, :raw_report
17
+
18
+ def initialize(raw_report)
19
+ @type = :factory_default_prof
20
+ @raw_report = raw_report
21
+ end
22
+
23
+ def result
24
+ @result ||= raw_report.tap { |r| r.transform_values! { |v| v.transform_keys!(&:to_sym) } }
25
+ end
26
+
27
+ def factories
28
+ result.dup
29
+ end
30
+
31
+ def merge(other)
32
+ report = result.dup
33
+
34
+ other.result.each do |name, stats|
35
+ if result.key?(name)
36
+ report[name][:count] += stats[:count]
37
+ report[name][:time] += stats[:time]
38
+ else
39
+ report[name] = stats
40
+ end
41
+ end
42
+
43
+ Report.new(report)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TestProf
4
+ module Autopilot
5
+ module FactoryDefault
6
+ # Class is used for writing :factory_prof report in different formats
7
+ class Writer < ReportWriter
8
+ Registry.register(:factory_default_prof_writer, self)
9
+
10
+ ARTIFACT_FILE = "factory_default_prof_report"
11
+
12
+ def generate_json
13
+ report.result.to_json
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -13,7 +13,7 @@ module TestProf
13
13
  result = report.result
14
14
 
15
15
  # TODO: Move total_time to the report
16
- TestProf::FactoryProf::Printers::Simple.dump(result, start_time: TestProf.now)
16
+ TestProf::FactoryProf::Printers::Simple.dump(result, start_time: TestProf.now, threshold: 0)
17
17
  end
18
18
 
19
19
  module_function :print_report
@@ -13,7 +13,7 @@ module TestProf
13
13
 
14
14
  class << self
15
15
  def invoke(type, paths)
16
- paths = paths.flat_map(&Dir.method(:glob))
16
+ paths = paths.flat_map(&Dir.method(:glob)).sort!
17
17
 
18
18
  Logging.log "Merging #{type} reports at #{paths.join(", ")}..."
19
19
 
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TestProf
4
+ module Autopilot
5
+ module Patches
6
+ module FactoryDefaultPatch
7
+ ARTIFACT_FILE = "factory_default_prof_report.json"
8
+
9
+ module ProfilerExt
10
+ def print_report
11
+ # TODO: extract it into a method in TestProf
12
+ data = self.data.each_with_object({}) do |(name, stats), acc|
13
+ name = name.gsub(/\$id\$.+\$di\$/, "<id>")
14
+ if acc.key?(name)
15
+ acc[name][:count] += stats[:count]
16
+ acc[name][:time] += stats[:time]
17
+ else
18
+ acc[name] = stats
19
+ end
20
+ end
21
+
22
+ dir_path = FileUtils.mkdir_p(Autopilot.config.tmp_dir)[0]
23
+ file_path = File.join(dir_path, ARTIFACT_FILE)
24
+
25
+ File.write(file_path, data.to_json)
26
+ end
27
+ end
28
+
29
+ def patch
30
+ ::TestProf::FactoryDefault::Profiler.prepend(ProfilerExt)
31
+ end
32
+
33
+ module_function :patch
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ if ENV["FACTORY_DEFAULT_ENABLED"] == "true"
40
+ require "test_prof/factory_default"
41
+ require "test_prof/recipes/rspec/factory_default"
42
+ TestProf::Autopilot::Patches::FactoryDefaultPatch.patch
43
+ end
@@ -4,6 +4,7 @@ require "test_prof/autopilot/command_executor"
4
4
  require "test_prof/autopilot/event_prof/report"
5
5
  require "test_prof/autopilot/tag_prof/report"
6
6
  require "test_prof/autopilot/factory_prof/report"
7
+ require "test_prof/autopilot/factory_default/report"
7
8
  require "test_prof/autopilot/stack_prof/report"
8
9
 
9
10
  module TestProf
@@ -16,7 +16,7 @@ module TestProf
16
16
 
17
17
  def initialize(data)
18
18
  @type = :stack_prof
19
- super(data)
19
+ super
20
20
  end
21
21
 
22
22
  def self.build
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TestProf
4
4
  module Autopilot # :nodoc:
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
@@ -9,5 +9,6 @@ if ENV["TEST_PROF_AUTOPILOT_ENABLED"] == "true"
9
9
  require "test_prof/autopilot/patches/event_prof_patch"
10
10
  require "test_prof/autopilot/patches/tag_prof_patch"
11
11
  require "test_prof/autopilot/patches/factory_prof_patch"
12
+ require "test_prof/autopilot/patches/factory_default_patch"
12
13
  require "test_prof/autopilot/patches/stack_prof_patch"
13
14
  end
metadata CHANGED
@@ -1,30 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-prof-autopilot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Shakirov
8
8
  - Vladimir Dementyev
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-21 00:00:00.000000000 Z
12
+ date: 2025-01-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-prof
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.0'
20
+ version: 1.3.100
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: 1.5.0
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
- - - "~>"
28
+ - - ">"
29
+ - !ruby/object:Gem::Version
30
+ version: 1.3.100
31
+ - - "<"
26
32
  - !ruby/object:Gem::Version
27
- version: '1.0'
33
+ version: 1.5.0
28
34
  - !ruby/object:Gem::Dependency
29
35
  name: bundler
30
36
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +110,10 @@ files:
104
110
  - lib/test_prof/autopilot/event_prof/profiling_executor.rb
105
111
  - lib/test_prof/autopilot/event_prof/report.rb
106
112
  - lib/test_prof/autopilot/event_prof/writer.rb
113
+ - lib/test_prof/autopilot/factory_default/printer.rb
114
+ - lib/test_prof/autopilot/factory_default/profiling_executor.rb
115
+ - lib/test_prof/autopilot/factory_default/report.rb
116
+ - lib/test_prof/autopilot/factory_default/writer.rb
107
117
  - lib/test_prof/autopilot/factory_prof/printer.rb
108
118
  - lib/test_prof/autopilot/factory_prof/profiling_executor.rb
109
119
  - lib/test_prof/autopilot/factory_prof/report.rb
@@ -111,6 +121,7 @@ files:
111
121
  - lib/test_prof/autopilot/logging.rb
112
122
  - lib/test_prof/autopilot/merger.rb
113
123
  - lib/test_prof/autopilot/patches/event_prof_patch.rb
124
+ - lib/test_prof/autopilot/patches/factory_default_patch.rb
114
125
  - lib/test_prof/autopilot/patches/factory_prof_patch.rb
115
126
  - lib/test_prof/autopilot/patches/stack_prof_patch.rb
116
127
  - lib/test_prof/autopilot/patches/tag_prof_patch.rb
@@ -138,7 +149,7 @@ metadata:
138
149
  homepage_uri: https://test-prof.evilmartians.io/
139
150
  source_code_uri: https://github.com/test-prof/test-prof-autopilot
140
151
  funding_uri: https://github.com/sponsors/test-prof
141
- post_install_message:
152
+ post_install_message:
142
153
  rdoc_options: []
143
154
  require_paths:
144
155
  - lib
@@ -153,8 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
164
  - !ruby/object:Gem::Version
154
165
  version: '0'
155
166
  requirements: []
156
- rubygems_version: 3.4.20
157
- signing_key:
167
+ rubygems_version: 3.4.19
168
+ signing_key:
158
169
  specification_version: 4
159
170
  summary: Automatic TestProf runner
160
171
  test_files: []