rspeed 0.2.0 → 0.5.2
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/CHANGELOG.md +31 -0
- data/README.md +10 -7
- data/lib/generators/rspeed/install_generator.rb +1 -1
- data/lib/rspeed.rb +8 -7
- data/lib/rspeed/env.rb +39 -0
- data/lib/rspeed/extension.rb +3 -2
- data/lib/rspeed/logger.rb +11 -0
- data/lib/rspeed/observer.rb +21 -6
- data/lib/rspeed/redis.rb +64 -0
- data/lib/rspeed/runner.rb +5 -16
- data/lib/rspeed/splitter.rb +66 -71
- data/lib/rspeed/variable.rb +31 -0
- data/lib/rspeed/version.rb +1 -1
- data/spec/common_helper.rb +10 -0
- data/spec/fixtures/1_spec.rb +9 -0
- data/spec/fixtures/2_spec.rb +5 -0
- data/spec/fixtures/empty.rb +4 -0
- data/spec/fixtures/new_spec.rb.csv +1 -0
- data/spec/models/rspeed/env/db_spec.rb +17 -0
- data/spec/models/rspeed/env/host_spec.rb +17 -0
- data/spec/models/rspeed/env/name_spec.rb +17 -0
- data/spec/models/rspeed/env/pipe_spec.rb +19 -0
- data/spec/models/rspeed/env/pipes_spec.rb +19 -0
- data/spec/models/rspeed/env/port_spec.rb +17 -0
- data/spec/models/rspeed/env/result_key_spec.rb +19 -0
- data/spec/models/rspeed/env/rspeed_spec.rb +43 -0
- data/spec/models/rspeed/observer/after_spec.rb +5 -5
- data/spec/models/rspeed/observer/after_suite_spec.rb +57 -0
- data/spec/models/rspeed/observer/before_spec.rb +0 -2
- data/spec/models/rspeed/observer/before_suite_spec.rb +17 -6
- data/spec/models/rspeed/redis/clean_spec.rb +20 -0
- data/spec/models/rspeed/redis/client_spec.rb +7 -0
- data/spec/models/rspeed/redis/destroy_spec.rb +29 -0
- data/spec/models/rspeed/redis/get_spec.rb +9 -0
- data/spec/models/rspeed/redis/keys_spec.rb +29 -0
- data/spec/models/rspeed/redis/result_spec.rb +13 -0
- data/spec/models/rspeed/redis/set_spec.rb +9 -0
- data/spec/models/rspeed/redis/specs_finished_spec.rb +19 -0
- data/spec/models/rspeed/redis/specs_initiated_spec.rb +13 -0
- data/spec/models/rspeed/runner/run_spec.rb +77 -0
- data/spec/models/rspeed/splitter/actual_examples_spec.rb +26 -0
- data/spec/models/rspeed/splitter/append_question_spec.rb +37 -0
- data/spec/models/rspeed/splitter/append_spec.rb +9 -27
- data/spec/models/rspeed/splitter/diff_spec.rb +15 -14
- data/spec/models/rspeed/splitter/first_pipe_spec.rb +2 -4
- data/spec/models/rspeed/splitter/get_spec.rb +6 -22
- data/spec/models/rspeed/splitter/need_warm_question_spec.rb +37 -0
- data/spec/models/rspeed/splitter/pipe_files_spec.rb +26 -0
- data/spec/models/rspeed/splitter/rename_spec.rb +13 -6
- data/spec/models/rspeed/splitter/split_spec.rb +70 -34
- data/spec/models/rspeed/variable/append_name_spec.rb +19 -0
- data/spec/models/rspeed/variable/default_partner_spec.rb +5 -0
- data/spec/models/rspeed/variable/key_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipe_name_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipe_profile_spec.rb +15 -0
- data/spec/models/rspeed/variable/pipes_pattern_spec.rb +5 -0
- data/spec/models/rspeed/variable/profile_pattern_spec.rb +5 -0
- data/spec/models/rspeed/variable/result_spec.rb +19 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/common.rb +13 -0
- data/spec/support/coverage.rb +14 -0
- data/spec/support/env_mock.rb +3 -0
- data/spec/support/fakeredis.rb +3 -0
- metadata +146 -20
- data/spec/models/rspeed/splitter/destroy_spec.rb +0 -33
- data/spec/models/rspeed/splitter/keys_spec.rb +0 -33
- data/spec/models/rspeed/splitter/last_pipe_spec.rb +0 -21
- data/spec/models/rspeed/splitter/pipe_spec.rb +0 -21
- data/spec/models/rspeed/splitter/pipes_spec.rb +0 -27
- data/spec/models/rspeed/splitter/result_spec.rb +0 -19
- data/spec/models/rspeed/splitter/save_spec.rb +0 -55
- data/spec/rails_helper.rb +0 -43
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4a58e610b2982e8a8f81783f5704f0a136c971aa6df1a446cf32ce7a53485120
|
|
4
|
+
data.tar.gz: 41c88139eff91637c52cda59b1239ca1833aa0db886677d0a33c51564d500a19
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 67b9c9d9334b315b9392bf7a52965bc1884ab67c96345abf3f037b185010b4de24f9b895cc306567f9cf07737786d7f58edc4ab14f0e45a26acef8acd525ed2f
|
|
7
|
+
data.tar.gz: e2771f90d265bbfc5ea3273c82aa467dee40b3f5cbfc40ac0c7501da4577664c28bd11b491a1568907775584490a36e3c4d5c1935cc375aca27ff8713e9b0b00
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,34 @@
|
|
|
1
|
+
## master
|
|
2
|
+
|
|
3
|
+
- CSV dependency dropped;
|
|
4
|
+
- Drops tmp key in favor of profile keys fetch;
|
|
5
|
+
|
|
6
|
+
## v0.5.1
|
|
7
|
+
|
|
8
|
+
#### Fix
|
|
9
|
+
|
|
10
|
+
- Only pipe number 1 will warm up avoiding duplicated spec entries;
|
|
11
|
+
|
|
12
|
+
## v0.5.0
|
|
13
|
+
|
|
14
|
+
#### Fix
|
|
15
|
+
|
|
16
|
+
- Add env `RSPEED_NAME` to specify the application name and avoid result conflicts between multiple runs;
|
|
17
|
+
- No more depends on pipe sequence to generate ou aggregate the resul;
|
|
18
|
+
- rake `rspeed:install`;
|
|
19
|
+
|
|
20
|
+
#### Update
|
|
21
|
+
|
|
22
|
+
- The result of the pipes are no more saved on Redis. It's now calculated based on result key `rspeed`;
|
|
23
|
+
|
|
24
|
+
## v0.4.0
|
|
25
|
+
|
|
26
|
+
- Now we make diff to discover removed and added examples;
|
|
27
|
+
|
|
28
|
+
## v0.3.0
|
|
29
|
+
|
|
30
|
+
- Removed and added files now is considered on run;
|
|
31
|
+
|
|
1
32
|
## v0.2.0
|
|
2
33
|
|
|
3
34
|
- Splits specs by examples over files;
|
data/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# RSpeed
|
|
2
2
|
|
|
3
|
-
[](https://github.com/wbotelhos/rspeed/actions)
|
|
4
4
|
[](https://badge.fury.io/rb/rspeed)
|
|
5
|
-
[](https://codeclimate.com/github/wbotelhos/rspeed/maintainability)
|
|
6
|
+
[](https://codecov.io/gh/wbotelhos/rspeed)
|
|
7
|
+
[](https://www.patreon.com/wbotelhos)
|
|
7
8
|
|
|
8
9
|
RSpeed splits your specs to you run parallels tests.
|
|
9
10
|
|
|
@@ -25,19 +26,21 @@ rake rspeed:install
|
|
|
25
26
|
|
|
26
27
|
## Usage
|
|
27
28
|
|
|
28
|
-
- `
|
|
29
|
-
- `RSPEED_PIPES`: Quantity of pipes
|
|
29
|
+
- `RSPEED_NAME`: You app name to avoid data override
|
|
30
30
|
- `RSPEED_PIPE`: Current pipe
|
|
31
|
+
- `RSPEED_PIPES`: Quantity of pipes
|
|
32
|
+
- `RSPEED_RESULT_KEY`: The key that keeps the final result of all pipes
|
|
33
|
+
- `RSPEED`: Enables RSpeed
|
|
31
34
|
|
|
32
35
|
```sh
|
|
33
|
-
RSPEED=true
|
|
36
|
+
RSPEED=true RSPEED_NAME=authorizy RSPEED_PIPE=1 RSPEED_PIPES=3 bundle exec rake rspeed:run
|
|
34
37
|
```
|
|
35
38
|
|
|
36
39
|
## How it Works
|
|
37
40
|
|
|
38
41
|
### First run
|
|
39
42
|
|
|
40
|
-
1. Since we
|
|
43
|
+
1. Since we have no statistics on the first time, we run all specs and collect it;
|
|
41
44
|
|
|
42
45
|
```json
|
|
43
46
|
{ "file": "./spec/models/1_spec.rb", "time": 0.01 }
|
data/lib/rspeed.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module RSpeed
|
|
4
|
-
require '
|
|
5
|
-
require '
|
|
4
|
+
require 'rspeed/env'
|
|
5
|
+
require 'rspeed/extension'
|
|
6
|
+
require 'rspeed/logger'
|
|
7
|
+
require 'rspeed/observer'
|
|
8
|
+
require 'rspeed/redis'
|
|
9
|
+
require 'rspeed/runner'
|
|
10
|
+
require 'rspeed/splitter'
|
|
11
|
+
require 'rspeed/variable'
|
|
6
12
|
end
|
|
7
|
-
|
|
8
|
-
require 'rspeed/extension'
|
|
9
|
-
require 'rspeed/observer'
|
|
10
|
-
require 'rspeed/runner'
|
|
11
|
-
require 'rspeed/splitter'
|
data/lib/rspeed/env.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RSpeed
|
|
4
|
+
module Env
|
|
5
|
+
module_function
|
|
6
|
+
|
|
7
|
+
def db
|
|
8
|
+
ENV['RSPEED_DB']&.to_i
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def host
|
|
12
|
+
ENV['RSPEED_HOST']
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def name
|
|
16
|
+
ENV['RSPEED_NAME']
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def pipe
|
|
20
|
+
ENV.fetch('RSPEED_PIPE', 1).to_i
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def pipes
|
|
24
|
+
ENV.fetch('RSPEED_PIPES', 1).to_i
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def port
|
|
28
|
+
ENV['RSPEED_PORT']&.to_i
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def result_key
|
|
32
|
+
ENV.fetch('RESPEED_RESULT_KEY', RSpeed::Variable.result)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def rspeed
|
|
36
|
+
ENV['RSPEED'] == 'true'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/rspeed/extension.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
if
|
|
4
|
-
require 'rspec
|
|
3
|
+
if RSpeed::Env.rspeed
|
|
4
|
+
require 'rspec'
|
|
5
5
|
|
|
6
6
|
RSpec.configure do |config|
|
|
7
7
|
config.before(:suite) { RSpeed::Observer.before_suite }
|
|
8
8
|
config.before { |example| RSpeed::Observer.before(example) }
|
|
9
9
|
config.after { |example| RSpeed::Observer.after(example) }
|
|
10
|
+
config.after(:suite) { RSpeed::Observer.after_suite }
|
|
10
11
|
end
|
|
11
12
|
end
|
data/lib/rspeed/observer.rb
CHANGED
|
@@ -9,9 +9,21 @@ module RSpeed
|
|
|
9
9
|
line_number = example.metadata[:line_number]
|
|
10
10
|
spent_time = example.clock.now - example.metadata[:start_at]
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
json = { file: "#{file_path}:#{line_number}", time: spent_time }.to_json
|
|
13
|
+
|
|
14
|
+
RSpeed::Redis.client.lpush(RSpeed::Variable.profile, json)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def after_suite(splitter = ::RSpeed::Splitter.new)
|
|
18
|
+
RSpeed::Redis.set(RSpeed::Variable.pipe_name, true)
|
|
19
|
+
|
|
20
|
+
return unless RSpeed::Redis.specs_finished?
|
|
21
|
+
|
|
22
|
+
splitter.rename
|
|
23
|
+
|
|
24
|
+
RSpeed::Redis.clean
|
|
25
|
+
|
|
26
|
+
RSpeed::Logger.log('RSpeed finished.')
|
|
15
27
|
end
|
|
16
28
|
|
|
17
29
|
def before(example)
|
|
@@ -19,11 +31,14 @@ module RSpeed
|
|
|
19
31
|
end
|
|
20
32
|
|
|
21
33
|
def before_suite
|
|
22
|
-
|
|
34
|
+
clean_profile
|
|
23
35
|
end
|
|
24
36
|
|
|
25
|
-
def
|
|
26
|
-
|
|
37
|
+
def clean_profile
|
|
38
|
+
RSpeed::Logger.log('[RSpeed::Observer#clean_profile] Cleanning current flag and profile.')
|
|
39
|
+
|
|
40
|
+
RSpeed::Redis.destroy(RSpeed::Variable.pipe_name)
|
|
41
|
+
RSpeed::Redis.destroy(RSpeed::Variable.profile)
|
|
27
42
|
end
|
|
28
43
|
end
|
|
29
44
|
end
|
data/lib/rspeed/redis.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RSpeed
|
|
4
|
+
module Redis
|
|
5
|
+
require 'redis'
|
|
6
|
+
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
def clean
|
|
10
|
+
RSpeed::Logger.log('[RSpeed::Redis#clean] Cleaning pipes and profiles.')
|
|
11
|
+
|
|
12
|
+
destroy(RSpeed::Variable::PIPES_PATTERN)
|
|
13
|
+
destroy(RSpeed::Variable::PROFILE_PATTERN)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def client
|
|
17
|
+
@client ||= ::Redis.new(db: RSpeed::Env.db, host: RSpeed::Env.host, port: RSpeed::Env.port)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def destroy(pattern = RSpeed::Variable::DEFAULT_PATTERN)
|
|
21
|
+
RSpeed::Logger.log(%([RSpeed::Redis#destroy] Destroying pattern "#{pattern}".))
|
|
22
|
+
|
|
23
|
+
keys(pattern).each { |key| client.del(key) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get(key)
|
|
27
|
+
client.get(key)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def keys(pattern = RSpeed::Variable::DEFAULT_PATTERN)
|
|
31
|
+
cursor = 0
|
|
32
|
+
result = []
|
|
33
|
+
|
|
34
|
+
loop do
|
|
35
|
+
cursor, results = client.scan(cursor, match: pattern)
|
|
36
|
+
result += results
|
|
37
|
+
|
|
38
|
+
break if cursor.to_i.zero?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
result
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def result?
|
|
45
|
+
keys(RSpeed::Env.result_key).any?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def set(key, value)
|
|
49
|
+
client.set(key, value)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def specs_finished?
|
|
53
|
+
(RSpeed::Redis.keys(RSpeed::Variable::PIPES_PATTERN).size == RSpeed::Env.pipes).tap do |boo|
|
|
54
|
+
RSpeed::Logger.log("[RSpeed::Redis#specs_finished?] Specs #{boo ? 'finished.' : 'not fineshed yet.'}")
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def specs_initiated?
|
|
59
|
+
RSpeed::Redis.keys(RSpeed::Variable::PIPES_PATTERN).any?.tap do |boo|
|
|
60
|
+
RSpeed::Logger.log("[RSpeed::Redis#specs_initiated?] Specs #{boo ? 'initialized.' : 'not initialized yet.'}")
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/lib/rspeed/runner.rb
CHANGED
|
@@ -4,25 +4,14 @@ module RSpeed
|
|
|
4
4
|
module Runner
|
|
5
5
|
module_function
|
|
6
6
|
|
|
7
|
-
def run(shell)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if splitter.first_pipe?
|
|
11
|
-
# splitter.destroy "rspeed_*"
|
|
12
|
-
splitter.destroy 'rspeed_tmp'
|
|
7
|
+
def run(shell, splitter: ::RSpeed::Splitter.new)
|
|
8
|
+
if RSpeed::Redis.result? || splitter.first_pipe?
|
|
9
|
+
return shell.call(['bundle exec rspec', splitter.pipe_files].compact.join(' '))
|
|
13
10
|
end
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
splitter.save if splitter.first_pipe?
|
|
17
|
-
|
|
18
|
-
files = splitter.get("rspeed_#{splitter.pipe}")[0]['files'].map { |item| item['file'] }.join(' ')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
shell.call ['bundle exec rspec', files].compact.join(' ')
|
|
22
|
-
|
|
23
|
-
splitter.append
|
|
12
|
+
RSpeed::Logger.log("Pipe #{RSpeed::Env.pipe} skipped. Only Pipe 1 can warm.")
|
|
24
13
|
|
|
25
|
-
|
|
14
|
+
RSpeed::Observer.after_suite
|
|
26
15
|
end
|
|
27
16
|
end
|
|
28
17
|
end
|
data/lib/rspeed/splitter.rb
CHANGED
|
@@ -2,89 +2,92 @@
|
|
|
2
2
|
|
|
3
3
|
module RSpeed
|
|
4
4
|
class Splitter
|
|
5
|
-
|
|
5
|
+
require 'json'
|
|
6
6
|
|
|
7
|
-
def
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
def initialize(specs_path: './spec/**/*_spec.rb')
|
|
8
|
+
@specs_path = specs_path
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def actual_examples
|
|
12
|
+
@actual_examples ||= begin
|
|
13
|
+
[].tap do |examples|
|
|
14
|
+
Dir[@specs_path].sort.each do |file|
|
|
15
|
+
data = File.open(file).read
|
|
16
|
+
lines = data.split("\n")
|
|
17
|
+
|
|
18
|
+
lines&.each&.with_index do |item, index|
|
|
19
|
+
examples << "#{file}:#{index + 1}" if /^it/.match?(item.gsub(/\s+/, ''))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
stream(:actual_examples, examples)
|
|
24
|
+
end
|
|
10
25
|
end
|
|
11
26
|
end
|
|
12
27
|
|
|
13
|
-
def
|
|
14
|
-
|
|
28
|
+
def append?
|
|
29
|
+
RSpeed::Redis.result? || first_pipe?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def append(items:, key:)
|
|
33
|
+
items.each { |item| redis.rpush(key, item) }
|
|
15
34
|
end
|
|
16
35
|
|
|
17
36
|
def diff
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
37
|
+
actual_data = rspeed_data.select { |item| actual_examples.include?(item[:file]) }
|
|
38
|
+
added_data = added_examples.map { |item| { file: item, time: 0 } }
|
|
39
|
+
|
|
40
|
+
removed_examples # called just for stream for now
|
|
41
|
+
|
|
42
|
+
actual_data + added_data
|
|
21
43
|
end
|
|
22
44
|
|
|
23
45
|
def first_pipe?
|
|
24
|
-
pipe == 1
|
|
46
|
+
RSpeed::Env.pipe == 1
|
|
25
47
|
end
|
|
26
48
|
|
|
27
49
|
def get(pattern)
|
|
28
50
|
@get ||= begin
|
|
29
|
-
return redis.lrange(pattern, 0, -1) if
|
|
30
|
-
|
|
31
|
-
keys(pattern).map { |key| JSON.parse redis.get(key) }
|
|
32
|
-
end
|
|
33
|
-
end
|
|
51
|
+
return redis.lrange(pattern, 0, -1) if [RSpeed::Variable.result].include?(pattern)
|
|
34
52
|
|
|
35
|
-
|
|
36
|
-
cursor = 0
|
|
37
|
-
result = []
|
|
38
|
-
|
|
39
|
-
loop do
|
|
40
|
-
cursor, results = redis.scan(cursor, match: pattern)
|
|
41
|
-
result += results
|
|
42
|
-
|
|
43
|
-
break if cursor.to_i.zero?
|
|
53
|
+
RSpeed::Redis.keys(pattern).map { |key| ::JSON.parse(redis.get(key)) }
|
|
44
54
|
end
|
|
45
|
-
|
|
46
|
-
result
|
|
47
55
|
end
|
|
48
56
|
|
|
49
|
-
def
|
|
50
|
-
|
|
57
|
+
def need_warm?
|
|
58
|
+
first_pipe? && !RSpeed::Redis.result?
|
|
51
59
|
end
|
|
52
60
|
|
|
53
|
-
def
|
|
54
|
-
|
|
55
|
-
end
|
|
61
|
+
def pipe_files
|
|
62
|
+
return unless RSpeed::Redis.result?
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
result? ? ENV.fetch('RSPEED_PIPES') { 1 }.to_i : 1
|
|
64
|
+
split[RSpeed::Variable.key(RSpeed::Env.pipe)][:files].map { |item| item[:file] }.join(' ')
|
|
59
65
|
end
|
|
60
66
|
|
|
61
67
|
def rename
|
|
62
|
-
|
|
63
|
-
end
|
|
68
|
+
RSpeed::Logger.log('[RSpeed::Splitter#consolidate] Consolidating profiles.')
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
!keys('rspeed').empty?
|
|
67
|
-
end
|
|
70
|
+
RSpeed::Redis.destroy(RSpeed::Env.result_key)
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
append(
|
|
73
|
+
items: RSpeed::Redis.client.keys('rspeed_profile_*').map { |key| redis.lrange(key, 0, -1) },
|
|
74
|
+
key: RSpeed::Env.result_key
|
|
75
|
+
)
|
|
73
76
|
end
|
|
74
77
|
|
|
75
|
-
def split(data)
|
|
78
|
+
def split(data = diff)
|
|
76
79
|
json = {}
|
|
77
80
|
|
|
78
|
-
pipes.times do |index|
|
|
79
|
-
json[
|
|
80
|
-
json[
|
|
81
|
+
RSpeed::Env.pipes.times do |index|
|
|
82
|
+
json[RSpeed::Variable.key(index + 1)] ||= []
|
|
83
|
+
json[RSpeed::Variable.key(index + 1)] = { total: 0, files: [], number: index + 1 }
|
|
81
84
|
end
|
|
82
85
|
|
|
83
86
|
sorted_data = data.sort_by { |item| item[:time] }.reverse
|
|
84
87
|
|
|
85
88
|
sorted_data.each do |record|
|
|
86
89
|
selected_pipe_data = json.min_by { |pipe| pipe[1][:total] }
|
|
87
|
-
selected_pipe = json[
|
|
90
|
+
selected_pipe = json[RSpeed::Variable.key(selected_pipe_data[1][:number])]
|
|
88
91
|
time = record[:time].to_f
|
|
89
92
|
|
|
90
93
|
selected_pipe[:total] += time
|
|
@@ -96,44 +99,36 @@ module RSpeed
|
|
|
96
99
|
|
|
97
100
|
private
|
|
98
101
|
|
|
99
|
-
def
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def actual_specs
|
|
104
|
-
Dir['./spec/**/*_spec.rb']
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def added_files
|
|
108
|
-
added_specs.map { |item| { file: item, time: 0 } }
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def added_specs
|
|
112
|
-
actual_specs - saved_specs
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def file_data
|
|
116
|
-
CSV.read('rspeed.csv')
|
|
102
|
+
def added_examples
|
|
103
|
+
@added_examples ||= begin
|
|
104
|
+
(actual_examples - rspeed_examples).tap { |examples| stream(:added_examples, examples) }
|
|
105
|
+
end
|
|
117
106
|
end
|
|
118
107
|
|
|
119
108
|
def redis
|
|
120
|
-
@redis ||= ::Redis.
|
|
109
|
+
@redis ||= ::RSpeed::Redis.client
|
|
121
110
|
end
|
|
122
111
|
|
|
123
|
-
def
|
|
124
|
-
|
|
112
|
+
def removed_examples
|
|
113
|
+
@removed_examples ||= begin
|
|
114
|
+
(rspeed_examples - actual_examples).tap { |examples| stream(:removed_examples, examples) }
|
|
115
|
+
end
|
|
125
116
|
end
|
|
126
117
|
|
|
127
118
|
def removed_time
|
|
128
|
-
|
|
119
|
+
removed_examples.sum { |item| item[0].to_f }
|
|
129
120
|
end
|
|
130
121
|
|
|
131
122
|
def rspeed_data
|
|
132
|
-
get(
|
|
123
|
+
@rspeed_data ||= get(RSpeed::Env.result_key).map { |item| JSON.parse(item, symbolize_names: true) }
|
|
133
124
|
end
|
|
134
125
|
|
|
135
|
-
def
|
|
126
|
+
def rspeed_examples
|
|
136
127
|
rspeed_data.map { |item| item[:file] }
|
|
137
128
|
end
|
|
129
|
+
|
|
130
|
+
def stream(type, data)
|
|
131
|
+
RSpeed::Logger.log("PIPE: #{RSpeed::Env.pipe} with #{type}: #{data}")
|
|
132
|
+
end
|
|
138
133
|
end
|
|
139
134
|
end
|