fasten 0.12.6 → 0.12.8

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: ccba14b261264ae79b9144b3de97610d2499763baab8e03eb5b0cf049c179925
4
- data.tar.gz: 2b611452336f62c2de1f48625870ab5dd53589867e609300eedcc4638114ea15
3
+ metadata.gz: 9dd4cb73dcf32492c0e11fac100e3726acdff174e0233e41728459f226a7cec1
4
+ data.tar.gz: 7d4981e1ee8793750cedf2bb153fc60b4a27c5f0802db03a9c02f4202205bc07
5
5
  SHA512:
6
- metadata.gz: c139aad75f9abb28ea50a34fe78b166819cf4ae7c125fe9ee6b9f1beec410a2ebbbbad6fdc1a1ff3a52f1cc6f3c85aa239e0274ee4caef66db58741fb846f0ad
7
- data.tar.gz: 216a6776f631a1d8d1d9526ae6408978c722fc36a13982151ba6ac7c3050344a892a6f5844b784402add158b33592c0b6fba555cfabd60273a03d8dd7aa9e37f
6
+ metadata.gz: b856359819576b19d03223a8d7c927b4f6698aa51e4fb7c4baf97b83566db6762c9f42f7242a055c5830af23a1af1e612db1a6b6cc227264b20c571718020980
7
+ data.tar.gz: 7311a2544fe423929c45c3ce82dd61ebdfdd2e1c310d1cee3096b154571f67858d71f4b450c74dec94ff292ce77d4cd5e5b4469a4f32590a381e0cedd71cb1e0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fasten (0.12.6)
4
+ fasten (0.12.8)
5
5
  binding_of_caller
6
6
  hirb
7
7
  os
data/README.md CHANGED
@@ -40,7 +40,7 @@ It has been released so people can try it and make feature requests, comments an
40
40
  - [x] Press ⬅️ or ➡️ keys to dynamically increase/decrease number of jobs
41
41
  - [ ] Use ⬆️ and ⬇️ to select tasks
42
42
  - [ ] Calculate ETA, assuming all tasks take same time
43
- - [ ] Calculate ETA, based on saved tasks statistics
43
+ - [x] Calculate ETA, based on saved tasks statistics
44
44
  - [ ] Live tail -f of selected tasks
45
45
 
46
46
  ### UI/Console
@@ -75,10 +75,6 @@ module Fasten
75
75
  end
76
76
 
77
77
  def redirect_std(path)
78
- logger.reopen($stdout)
79
-
80
- @saved_stdout_instance = $stdout.clone
81
- @saved_stderr_instance = $stderr.clone
82
78
  @saved_stdout_constant = STDOUT.clone
83
79
  @saved_stderr_constant = STDERR.clone
84
80
 
@@ -86,24 +82,20 @@ module Fasten
86
82
  @redirect_log = File.new path, 'a'
87
83
  @redirect_log.sync = true
88
84
 
89
- $stdout.reopen @redirect_log
90
- $stderr.reopen @redirect_log
91
85
  STDOUT.reopen @redirect_log
92
86
  STDERR.reopen @redirect_log
87
+
88
+ logger.reopen($stdout)
93
89
  end
94
90
 
95
91
  def restore_std
96
- oldverbose = $VERBOSE
97
- $VERBOSE = nil
92
+ @redirect_log.close
98
93
 
99
- $stdout = @saved_stdout_instance
100
- $stderr = @saved_stderr_instance
101
- Object.const_set :STDOUT, @saved_stdout_constant
102
- Object.const_set :STDERR, @saved_stderr_constant
94
+ STDOUT.reopen @saved_stdout_constant
95
+ STDERR.reopen @saved_stderr_constant
103
96
 
104
- @redirect_log.close
105
- ensure
106
- $VERBOSE = oldverbose
97
+ @saved_stdout_constant = nil
98
+ @saved_stderr_constant = nil
107
99
  end
108
100
  end
109
101
  end
@@ -1,3 +1,5 @@
1
+ require 'digest'
2
+
1
3
  module Fasten
2
4
  module Support
3
5
  module State
@@ -28,20 +30,44 @@ module Fasten
28
30
  state == :QUITTING
29
31
  end
30
32
 
31
- def last
32
- return @last if defined? @last
33
+ def last_stat
34
+ return @last_stat if defined? @last_stat
33
35
 
34
36
  return {} unless @runner
35
37
 
36
- @last = runner.stats_last(self)
38
+ @last_stat = runner.stats_last(self)
37
39
  end
38
40
 
39
41
  def last_avg
40
- @last_avg ||= last['avg']&.to_f
42
+ @last_avg ||= last_stat['avg']
41
43
  end
42
44
 
43
45
  def last_err
44
- @last_err ||= last['err']&.to_f
46
+ @last_err ||= last_stat['err']
47
+ end
48
+
49
+ def deps
50
+ return @deps if defined? @deps
51
+
52
+ str = deps_str
53
+
54
+ @deps = str && Digest::SHA1.hexdigest(str)
55
+ end
56
+
57
+ def deps_str
58
+ if is_a? Fasten::Task
59
+ if after.is_a? Array
60
+ after.sort_by do |task|
61
+ task.is_a?(Fasten::Task) ? task.name : task
62
+ end&.join(', ')
63
+ else
64
+ after
65
+ end
66
+ elsif is_a? Fasten::Runner
67
+ tasks.sort_by(&:name).map do |task|
68
+ [task.name, task.deps_str].compact.join(': ')
69
+ end.join("\n")
70
+ end
45
71
  end
46
72
  end
47
73
  end
@@ -21,16 +21,16 @@ module Fasten
21
21
  return unless @stats_path && File.exist?(@stats_path)
22
22
 
23
23
  self.stats_data = []
24
- CSV.foreach(@stats_path, headers: true) do |row|
24
+ CSV.foreach(@stats_path, headers: true, converters: [:all]) do |row|
25
25
  stats_data << row.to_h
26
26
  end
27
27
 
28
28
  @tasks.each do |task|
29
29
  task.runner = self
30
- task.last
30
+ task.last_stat
31
31
  end
32
32
  self.runner = self
33
- last
33
+ last_stat
34
34
 
35
35
  @tasks.waiting = nil
36
36
  rescue StandardError
@@ -40,7 +40,7 @@ module Fasten
40
40
  def save_stats
41
41
  return unless @stats_path && stats_data
42
42
 
43
- keys = %w[state kind name run cnt avg std err ini fin]
43
+ keys = %w[state kind name run cnt avg std err ini fin deps]
44
44
 
45
45
  CSV.open(@stats_path, 'wb') do |csv|
46
46
  csv << keys
@@ -58,6 +58,7 @@ module Fasten
58
58
  'ini' => target.ini.to_f,
59
59
  'fin' => target.fin.to_f,
60
60
  'run' => target.fin - target.ini,
61
+ 'deps' => target.deps,
61
62
  'worker' => target.respond_to?(:worker) ? target.worker.name : nil }
62
63
  end
63
64
 
@@ -76,7 +77,7 @@ module Fasten
76
77
  stats_data << entry
77
78
  stats_entries << entry
78
79
 
79
- history = stats_history(entry)
80
+ history = stats_run_history(entry)
80
81
 
81
82
  update_stats(history, entry)
82
83
  end
@@ -123,12 +124,12 @@ module Fasten
123
124
  task: hformat(sub), runner: hformat(tot, sub), saved: hformat(sub - tot, sub), jobs: jobs.to_s)
124
125
  end
125
126
 
126
- def stats_history(entry)
127
- stats_data.select { |e| e['state'] == entry['state'] && e['kind'] == entry['kind'] && e['name'] == entry['name'] }.map { |x| x['run'].to_f }
127
+ def stats_run_history(entry)
128
+ stats_data.select { |item| %w[state kind name deps].all? { |key| item[key] == entry[key] } }.map { |item| item['run'] }
128
129
  end
129
130
 
130
- def stats_last(item)
131
- stats_data.select { |e| e['kind'] == item.kind && e['name'] == item.name }.last || {}
131
+ def stats_last(target)
132
+ stats_data.select { |item| %w[kind name deps].all? { |key| item[key] == target.send(key) } }.last || {}
132
133
  end
133
134
 
134
135
  def update_stats(history, entry)
@@ -160,7 +160,7 @@ module Fasten
160
160
  @waiting.sort_by!.with_index do |task, index|
161
161
  task.state = :WAIT
162
162
  last_avg = task.last_avg || 0
163
- [-task.run_score, -last_avg.to_f, index]
163
+ [-task.run_score, -last_avg, index]
164
164
  end
165
165
  else
166
166
  raise "Unknown priority #{@runner.priority}"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fasten
4
- VERSION = '0.12.6'
4
+ VERSION = '0.12.8'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fasten
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.6
4
+ version: 0.12.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aldrin Martoq
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-15 00:00:00.000000000 Z
11
+ date: 2019-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler