rbbt-util 5.13.0 → 5.13.1

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
  SHA1:
3
- metadata.gz: 50b93d44cf66b527dc5cb3171ea799ad7618024f
4
- data.tar.gz: f8647589d8b4c281074309db7509bd4b26e50aea
3
+ metadata.gz: a03adabca2810fb92c9771c98c6cee6126fec535
4
+ data.tar.gz: 173c80fd823140c2d7cb5443ae034fa61d89b74a
5
5
  SHA512:
6
- metadata.gz: b04572a90e96cc1ac50f476df87025f459a0b36258de071179ae7f702da7799e17680a5ceb9d36ecf6e243a2008cd93f45ba7523756568cd99948580cc254356
7
- data.tar.gz: ab57d3affae47af95efebbe2d2368418f4b9eae2b7dd8ab980d5d3dfaecd414dbdc0b5ce4615a6770b3d665877c4584ae13c73d7f308f878beb0979e0364d40d
6
+ metadata.gz: 43fa5b928dd62ddb3627d44255ec4497eba7ad61f2d16236df36e2cdb1f2243182b92ca4e11c4c279f2db6ea91d68e514530f9ff64abbc27a6ea93b2c145acf6
7
+ data.tar.gz: 4c9c7b955f6157b9ed7c0640454be5e92eef62c2e831bcfe1ea1fc16621d6c80c5bf48f72cf0233e8213582a06fd9ec58ac87005b1f1ef7d7f3fc21572352b84
data/lib/rbbt/util/log.rb CHANGED
@@ -94,6 +94,7 @@ module Log
94
94
  end
95
95
 
96
96
  LOG_MUTEX = Mutex.new
97
+ LAST = "log"
97
98
  def self.log(message = nil, severity = MEDIUM, &block)
98
99
  return if severity < self.severity
99
100
  message ||= block.call if block_given?
@@ -103,13 +104,14 @@ module Log
103
104
 
104
105
  sev_str = severity.to_s
105
106
 
106
- prefix = time << "[" << color(severity) << sev_str << color(0) << "]"
107
+ prefix = time << "[" << color(severity) << sev_str << color(0)<<"]"
107
108
  message = "" << highlight << message << color(0) if severity >= INFO
108
109
  str = prefix << " " << message
109
110
 
110
111
  LOG_MUTEX.synchronize do
111
112
  STDERR.puts str
112
113
  logfile.puts str unless logfile.nil?
114
+ Log::LAST.replace "log"
113
115
  end
114
116
  end
115
117
 
@@ -2,7 +2,7 @@ require 'rbbt/util/log'
2
2
  module Log
3
3
  class ProgressBar
4
4
 
5
- attr_accessor :depth, :num_reports, :desc, :io, :severity
5
+ attr_accessor :depth, :num_reports, :desc, :io, :severity, :history
6
6
 
7
7
  # Creates a new instance. Max is the total number of iterations of the
8
8
  # loop. The depth represents how many other loops are above this one,
@@ -38,8 +38,7 @@ module Log
38
38
  @last_report=percent
39
39
  end
40
40
  else
41
- @last_report = Time.now if @last_report == -1
42
- if Time.now - @last_report >= 1.0
41
+ if @last_report == -1 or Time.now - @last_report >= 1.0
43
42
  throughput
44
43
  end
45
44
  end
@@ -66,11 +65,11 @@ module Log
66
65
 
67
66
 
68
67
  def up_lines(depth)
69
- "\033[#{depth + 2}F\033[2K"
68
+ "\033[#{depth + 1}F\033[2K"
70
69
  end
71
70
 
72
71
  def down_lines(depth)
73
- "\n\033[#{depth + 3}E"
72
+ "\n\033[#{depth + 2}E"
74
73
  end
75
74
 
76
75
  def report_msg
@@ -91,47 +90,85 @@ module Log
91
90
  used = [used/3600, used/60 % 60, used % 60].map{|t| "%02i" % t }.join(':')
92
91
 
93
92
  if progress == 1
94
- indicator << Log.color(:green, " done ")
95
-
96
-
93
+ indicator << Log.color(:green, " done")
97
94
  indicator << Log.color(:blue, " #{used}")
98
95
  else
99
- indicator << " done #{Log.color(:blue, percent.to_s << "%")}"
96
+ indicator << " #{Log.color(:blue, percent.to_s << "%")}"
100
97
 
101
98
  eta = self.eta
102
99
  eta = [eta/3600, eta/60 % 60, eta % 60].map{|t| "%02i" % t }.join(':')
103
100
 
104
- indicator << " (Time left #{eta} seconds) (Started #{used} seconds ago)"
101
+ indicator << " #{Log.color :yellow, used} used #{Log.color :yellow, eta} left"
105
102
  end
106
103
 
107
104
  end
108
105
 
109
- def throughput_msg
110
- indicator = Log.color(:magenta, @desc)
106
+ def thr
107
+ @history ||= []
108
+ @last_report = Time.now if @last_report == -1
111
109
  time = Time.now - @last_report
112
110
  thr = (@current / time).to_i
111
+
112
+ @history << thr
113
+ @history.shift if @history.length > 10
114
+
115
+ thr
116
+ end
117
+
118
+ def mean
119
+ @mean_max ||= 0
120
+ if @history.length > 3
121
+ mean = Misc.mean(@history[1..-1])
122
+ @mean_max = mean if mean > @mean_max
123
+ end
124
+ mean
125
+ end
126
+
127
+ def throughput_msg
128
+ thr = self.thr
129
+
130
+ mean = self.mean
131
+
132
+ indicator = Log.color(:magenta, @desc)
113
133
  indicator << " #{ Log.color :blue, thr } per second"
134
+
135
+ indicator << " -- #{ Log.color :yellow, mean.to_i } avg. #{ Log.color :yellow, @mean_max.to_i} max." if mean
136
+
114
137
  indicator
115
138
  end
116
139
 
140
+ def print(io, str)
141
+ LOG_MUTEX.synchronize do
142
+ STDERR.print str
143
+ Log.logfile.puts str unless Log.logfile.nil?
144
+ Log::LAST.replace "progress"
145
+ end
146
+ end
117
147
  # Prints de progress report. It backs up as many lines as the meters
118
148
  # depth. Prints the progress as a line of dots, a percentage, time
119
149
  # spent, and time left. And then goes moves the cursor back to its
120
150
  # original line. Everything is printed to stderr.
121
151
  def report(io = STDERR)
122
- io.print(up_lines(@depth) << report_msg << down_lines(@depth)) if severity >= Log.severity
152
+ if Log::LAST != "progress"
153
+ BARS.length.times{print(io, "\n")}
154
+ end
155
+ print(io, up_lines(@depth) << report_msg << down_lines(@depth)) if severity >= Log.severity
156
+ @last_report = Time.now if @last_report == -1
123
157
  end
124
158
 
125
159
  def throughput(io = STDERR)
126
- io.print(up_lines(@depth) << throughput_msg << down_lines(@depth)) if severity >= Log.severity
160
+ if Log::LAST != "progress"
161
+ BARS.length.times{print(io, "\n")}
162
+ end
163
+ print(io, up_lines(@depth) << throughput_msg << down_lines(@depth)) if severity >= Log.severity
127
164
  @last_report = Time.now
128
165
  @current = 0
129
166
  end
130
167
  BAR_MUTEX = Mutex.new
131
168
  BARS = []
132
169
  def self.new_bar(max, options = {})
133
- options = Misc.add_defaults options, :depth => BARS.length
134
170
  BAR_MUTEX.synchronize do
171
+ options = Misc.add_defaults options, :depth => BARS.length
135
172
  BARS << (bar = ProgressBar.new(max, options))
136
173
  bar
137
174
  end
@@ -148,6 +185,7 @@ module Log
148
185
  end
149
186
  BARS.pop
150
187
  end
188
+ Log::LAST.replace "removeprogress"
151
189
  end
152
190
  end
153
191
 
@@ -104,13 +104,15 @@ module ConcurrentStream
104
104
  @callback = nil
105
105
  end
106
106
 
107
- def read(*args)
107
+ def super(*args)
108
108
  if autojoin
109
109
  begin
110
110
  super(*args)
111
111
  rescue
112
+ Log.exception $!
112
113
  self.abort
113
114
  self.join
115
+ raise $!
114
116
  ensure
115
117
  self.join if self.closed? or self.eof?
116
118
  end
@@ -379,6 +379,7 @@ module Open
379
379
  rescue
380
380
  io.abort if io.respond_to? :abort
381
381
  io.join if io.respond_to? :join
382
+ raise $!
382
383
  ensure
383
384
  io.join if io.respond_to? :join
384
385
  end
@@ -439,8 +440,8 @@ module Open
439
440
  begin
440
441
  File.open(file, mode) do |f|
441
442
  f.flock(File::LOCK_EX)
442
- while not content.eof?
443
- f.write content.gets
443
+ while block = content.read(2014)
444
+ f.write block
444
445
  end
445
446
  f.flock(File::LOCK_UN)
446
447
  end
@@ -46,6 +46,8 @@ class Step
46
46
  begin
47
47
  return @info_cache if @info_cache and File.mtime(info_file) < @info_cache_time
48
48
  rescue Exception
49
+ Log.exception $!
50
+ raise $!
49
51
  end
50
52
 
51
53
  begin
@@ -64,8 +66,8 @@ class Step
64
66
  end
65
67
  rescue Exception
66
68
  Log.debug{"Error loading info file: " + info_file}
69
+ #self.abort_pid
67
70
  Open.write(info_file, INFO_SERIALIAZER.dump({:status => :error, :messages => ["Info file lost"]}))
68
- self.abort
69
71
  raise $!
70
72
  end
71
73
  end
@@ -344,7 +344,11 @@ class Step
344
344
 
345
345
  def join
346
346
 
347
- join_stream
347
+ until done? or result or error? or aborted? or streaming?
348
+ sleep 1
349
+ end
350
+
351
+ join_stream if status == :streaming
348
352
 
349
353
  return self if not Open.exists? info_file
350
354
 
@@ -356,9 +360,8 @@ class Step
356
360
  end
357
361
 
358
362
  begin
359
- if pid.nil?
363
+ if pid.nil? or Process.pid == pid
360
364
  dependencies.each{|dep| dep.join }
361
- self
362
365
  else
363
366
  begin
364
367
  Log.debug{"Waiting for pid: #{pid}"}
@@ -368,11 +371,10 @@ class Step
368
371
  end if Misc.pid_exists? pid
369
372
  pid = nil
370
373
  dependencies.each{|dep| dep.join }
371
- self
372
374
  end
375
+ self
373
376
  ensure
374
377
  set_info :joined, true
375
378
  end
376
- self
377
379
  end
378
380
  end
@@ -23,20 +23,8 @@ max = 0
23
23
  avg = 0
24
24
  all = []
25
25
  scale = 5
26
+ bar = Log::ProgressBar.new_bar nil
27
+
26
28
  while line = STDIN.gets
27
- count += 1
28
- last ||= Time.now
29
- if Time.now - last >= 1.0 / scale
30
- Log.clear_line
31
- puts "Reading #{ Log.color :blue, count*scale } per second. Max #{ Log.color :blue, max*scale }. Average #{Log.color :blue, avg*scale}"
32
- max = count > max ? count : max
33
- last = Time.now
34
- all << count
35
- avg = Misc.mean(all).to_i if all.length > 3
36
- count = 0
37
- end
29
+ bar.tick
38
30
  end
39
-
40
- all << count
41
-
42
- puts "Total #{Log.color :blue, Misc.sum(all).to_i} in #{Log.color :blue, (Time.now - start).to_i} seconds -- #{Log.color :green, (Misc.sum(all).to_f / (Time.now - start)).to_i } per second. Max #{Log.color :blue, max*scale}. Average #{Log.color :green, avg*scale}"
@@ -2,22 +2,26 @@ require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_he
2
2
  require 'rbbt/util/log/progress'
3
3
 
4
4
  class TestProgress < Test::Unit::TestCase
5
- def _test_bar
5
+ def test_bar
6
6
  t1 = Thread.new do
7
- Log::ProgressBar.with_bar(20) do |bar|
7
+ Log::ProgressBar.with_bar(20, :desc => "Bar 1") do |bar|
8
8
  20.times do
9
9
  bar.tick
10
10
  sleep 0.3
11
11
  end
12
+ Log.debug "Done progress"
13
+ assert_equal 100, bar.percent
12
14
  end
13
15
  end
14
16
 
15
17
  t2 = Thread.new do
16
- Log::ProgressBar.with_bar(20) do |bar|
18
+ Log::ProgressBar.with_bar(20, :desc => "Bar 2") do |bar|
17
19
  20.times do
18
20
  bar.tick
19
21
  sleep 0.2
20
22
  end
23
+ Log.debug "Done progress"
24
+ assert_equal 100, bar.percent
21
25
  end
22
26
  end
23
27
  t1.join
@@ -26,20 +30,24 @@ class TestProgress < Test::Unit::TestCase
26
30
 
27
31
  def test_bar_no_size
28
32
  t1 = Thread.new do
29
- Log::ProgressBar.with_bar(nil) do |bar|
33
+ Log::ProgressBar.with_bar(nil, :desc => "Bar 1") do |bar|
30
34
  20.times do
31
35
  bar.tick
32
36
  sleep 0.3
33
37
  end
38
+ Log.debug "Done progress"
39
+ assert bar.history.length > 0
34
40
  end
35
41
  end
36
42
 
37
43
  t2 = Thread.new do
38
- Log::ProgressBar.with_bar(nil) do |bar|
44
+ Log::ProgressBar.with_bar(nil, :desc => "Bar 2") do |bar|
39
45
  20.times do
40
46
  bar.tick
41
47
  sleep 0.2
42
48
  end
49
+ Log.debug "Done progress"
50
+ assert bar.history.length > 0
43
51
  end
44
52
  end
45
53
  t1.join
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.13.0
4
+ version: 5.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-25 00:00:00.000000000 Z
11
+ date: 2014-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake