test-prof 0.7.3 → 0.7.4

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: 6b330384292e5a4bcb8429d4e2d1e215a320692e526b53cdddfb8714b43538b6
4
- data.tar.gz: 0a22281b9a7acc4dde3552be07a143420bd63648a380f6b2e5cd446cdcc36b54
3
+ metadata.gz: 42dd5bfd5d77f676d37c3cf9ff88d366cf19b459da3736d891d974f31dcaef97
4
+ data.tar.gz: 7b99baeb4d93f86b11bb34c3a43fe2bb2f2b75487cd66190fcd2decc3d8ed532
5
5
  SHA512:
6
- metadata.gz: d4d008f6cfe0055fff132d6c31f440bbd9974e0294480498d76a57b1f39a49ea51a1145632d901de54bc3a18f6e4d6c317e565ddfca090ad4d905ec9ec7e7e5a
7
- data.tar.gz: 001a18ff90644936cacff9e5a00858671e070ffe4b11a10921f4401ad29fb12b4de2d190fc92c7fbc3bb137e42a2eaa2a55945bf1b7c1fd88bcb87c2ded00f13
6
+ metadata.gz: 12a11804603dc80ef72ecfae63ec6f33f172c63bd447a9032df131cf33265c02926871d55eaabb08fc74d61de211d6bd78727b44802d6a488b20c9a1fee854cc
7
+ data.tar.gz: a826158093a4f66433c3b521311f2f3028f526d1864f2106c2294eb97e22b996da3328bebaed0d247b51baf9905fa117a8b75472b81119ffda2c6ebb660566a2
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.7.4 (2019-02-16)
6
+
7
+ - Add JSON report support for StackProf. ([@palkan][])
8
+
9
+ - Add ability to specify report/artifact name suffixes. ([@palkan][])
10
+
5
11
  ## 0.7.3 (2018-11-07)
6
12
 
7
13
  - Add a header with the general information on factories usage [#99](https://github.com/palkan/test-prof/issues/99) ([@szemek][])
data/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ [![Cult Of Martians](http://cultofmartians.com/assets/badges/badge.svg)](http://cultofmartians.com)
1
2
  [![Gem Version](https://badge.fury.io/rb/test-prof.svg)](https://rubygems.org/gems/test-prof) [![Build Status](https://travis-ci.org/palkan/test-prof.svg?branch=master)](https://travis-ci.org/palkan/test-prof) [![Code Triagers Badge](https://www.codetriage.com/palkan/test-prof/badges/users.svg)](https://www.codetriage.com/palkan/test-prof)
2
3
  [![Documentation](https://img.shields.io/badge/docs-link-brightgreen.svg)](https://test-prof.evilmartians.io)
3
4
 
@@ -47,6 +48,8 @@ Supported Ruby versions:
47
48
 
48
49
  - Paris.rb, 2018, "99 Problems of Slow Tests" talk [[video](https://www.youtube.com/watch?v=eDMZS_fkRtk), [slides](https://speakerdeck.com/palkan/paris-dot-rb-2018-99-problems-of-slow-tests)]
49
50
 
51
+ - BalkanRuby, 2018, "Take your slow tests to the doctor" talk [[video](https://www.youtube.com/watch?v=rOcrme82vC8)], [slides](https://speakerdeck.com/palkan/balkanruby-2018-take-your-slow-tests-to-the-doctor)]
52
+
50
53
  - RailsClub, Moscow, 2017, "Faster Tests" talk [[video](https://www.youtube.com/watch?v=8S7oHjEiVzs) (RU), [slides](https://speakerdeck.com/palkan/railsclub-moscow-2017-faster-tests)]
51
54
 
52
55
  - RubyConfBy, 2017, "Run Test Run" talk [[video](https://www.youtube.com/watch?v=q52n4p0wkIs), [slides](https://speakerdeck.com/palkan/rubyconfby-minsk-2017-run-test-run)]
data/lib/test_prof.rb CHANGED
@@ -84,7 +84,9 @@ module TestProf
84
84
  with_timestamps(
85
85
  ::File.join(
86
86
  config.output_dir,
87
- filename
87
+ with_report_suffix(
88
+ filename
89
+ )
88
90
  )
89
91
  )
90
92
  end
@@ -105,6 +107,12 @@ module TestProf
105
107
  "#{path.sub(/\.\w+$/, '')}#{timestamps}#{::File.extname(path)}"
106
108
  end
107
109
 
110
+ def with_report_suffix(path)
111
+ return path if config.report_suffix.nil?
112
+
113
+ "#{path.sub(/\.\w+$/, '')}-#{config.report_suffix}#{::File.extname(path)}"
114
+ end
115
+
108
116
  def notify_spring_detected
109
117
  return if instance_variable_defined?(:@spring_notified)
110
118
  log :info, "Spring detected"
@@ -118,16 +126,18 @@ module TestProf
118
126
 
119
127
  # TestProf configuration
120
128
  class Configuration
121
- attr_accessor :output, # IO to write output messages.
122
- :color, # Whether to colorize output or not
123
- :output_dir, # Directory to store artifacts
124
- :timestamps # Whethere to use timestamped names for artifacts
129
+ attr_accessor :output, # IO to write output messages.
130
+ :color, # Whether to colorize output or not
131
+ :output_dir, # Directory to store artifacts
132
+ :timestamps, # Whethere to use timestamped names for artifacts,
133
+ :report_suffix # Custom suffix for reports/artifacts
125
134
 
126
135
  def initialize
127
136
  @output = $stdout
128
137
  @color = true
129
138
  @output_dir = "tmp/test_prof"
130
139
  @timestamps = false
140
+ @report_suffix = ENV['TEST_PROF_REPORT']
131
141
  end
132
142
 
133
143
  def color?
@@ -16,6 +16,11 @@ module TestProf
16
16
  end
17
17
 
18
18
  def rollback_transaction
19
+ if ::ActiveRecord::Base.connection.open_transactions.zero?
20
+ warn "!!! before_all transaction has been already rollbacked and " \
21
+ "could work incorrectly"
22
+ return
23
+ end
19
24
  ::ActiveRecord::Base.connection.rollback_transaction
20
25
  end
21
26
  end
@@ -22,12 +22,20 @@ module TestProf
22
22
  module StackProf
23
23
  # StackProf configuration
24
24
  class Configuration
25
- attr_accessor :mode, :interval, :raw, :target
25
+ FORMATS = %w[html json].freeze
26
+
27
+ attr_accessor :mode, :interval, :raw, :target, :format
26
28
 
27
29
  def initialize
28
30
  @mode = ENV.fetch('TEST_STACK_PROF_MODE', :wall).to_sym
29
31
  @target = ENV['TEST_STACK_PROF'] == 'boot' ? :boot : :suite
30
32
  @raw = ENV['TEST_STACK_PROF_RAW'] != '0'
33
+ @format =
34
+ if FORMATS.include?(ENV['TEST_STACK_PROF_FORMAT'])
35
+ ENV['TEST_STACK_PROF_FORMAT']
36
+ else
37
+ 'html'
38
+ end
31
39
  end
32
40
 
33
41
  def raw?
@@ -98,13 +106,7 @@ module TestProf
98
106
 
99
107
  return unless config.raw
100
108
 
101
- html_path = path.gsub(/\.dump$/, '.html')
102
-
103
- log :info, <<~MSG
104
- Run the following command to generate a flame graph report:
105
-
106
- stackprof --flamegraph #{path} > #{html_path} && stackprof --flamegraph-viewer=#{html_path}
107
- MSG
109
+ send("dump_#{config.format}_report", path)
108
110
  end
109
111
 
110
112
  private
@@ -141,6 +143,28 @@ module TestProf
141
143
  false
142
144
  end
143
145
  end
146
+
147
+ def dump_html_report(path)
148
+ html_path = path.gsub(/\.dump$/, '.html')
149
+
150
+ log :info, <<~MSG
151
+ Run the following command to generate a flame graph report:
152
+
153
+ stackprof --flamegraph #{path} > #{html_path} && stackprof --flamegraph-viewer=#{html_path}
154
+ MSG
155
+ end
156
+
157
+ def dump_json_report(path)
158
+ report = ::StackProf::Report.new(
159
+ Marshal.load(IO.binread(path)) # rubocop:disable Security/MarshalLoad
160
+ )
161
+ json_path = path.gsub(/\.dump$/, '.json')
162
+ File.write(json_path, JSON.generate(report.data))
163
+
164
+ log :info, <<~MSG
165
+ StackProf JSON report generated: #{json_path}
166
+ MSG
167
+ end
144
168
  end
145
169
  end
146
170
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestProf
4
- VERSION = "0.7.3"
4
+ VERSION = "0.7.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-prof
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-07 00:00:00.000000000 Z
11
+ date: 2019-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -214,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
214
  version: '0'
215
215
  requirements: []
216
216
  rubyforge_project:
217
- rubygems_version: 2.7.7
217
+ rubygems_version: 2.7.6
218
218
  signing_key:
219
219
  specification_version: 4
220
220
  summary: Ruby applications tests profiling tools