speedometer 0.0.5 → 0.1.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/speedometer.rb +64 -27
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 365dcb09e53a5d5e670bf77b662e1d135dbc6900
4
- data.tar.gz: 507223abcb13dd50efea0e7287556c7886e489a5
3
+ metadata.gz: d4146ad9c933e1bdb3a8e83255c41448af41387e
4
+ data.tar.gz: 75930156a91df6b4f9df2f8b158602a215e5f59a
5
5
  SHA512:
6
- metadata.gz: 71d8617b08907ad55aa9a9f8ead30301027fafdf2febbaa4c5cfb31f010dc5f4bec77b29026dbe4c777df54b202b38cdce02f041e8c2c315f7944d11d3c6fc65
7
- data.tar.gz: 6f18b14fe6b8669ff6fb3973937d2e50a83dac1eafc0dc1d289a1f87f37af222db5653b6abe70a78646611b21d2e9f3f0a9a682e518042e2061f3b2c32b1328c
6
+ metadata.gz: fe4ba0898dd1a193e5e95c6b26481537f0038cf8bb5b1d2d4224d324c0112a82aecd20caa1d22a499dbe89b9323c81b3af34d874659cbb429f23f6b283c83742
7
+ data.tar.gz: e2c425c989d215ed9d6040fe049a364426aecb10910072f59636b4bc02148eaa49360764efa5c04da798900bd595ad65a9b904abe5d067cd60241bd62c31da3a
data/lib/speedometer.rb CHANGED
@@ -16,18 +16,29 @@
16
16
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
17
  ########################################################################
18
18
  # = Methods
19
- # * new - accepts units in KB/MB/GB
19
+ # * new - accepts hash with: units in KB/MB(default)/GB; progressbar - bool
20
20
  # * start - start displaying upload speed
21
21
  # * stop - stops displaying upload rate
22
- # * display - displays upload speed
22
+ # * done(bytesize) - increments uploaded byte counter for progressbar
23
23
  # * log(message) - you need to use this instead of puts
24
24
  ########################################################################
25
25
  class Speedometer
26
26
 
27
- attr_accessor :uploaded, :refresh_time, :active
27
+ attr_accessor :uploaded, :refresh_time, :active, :to_upload
28
28
 
29
- def initialize(units="MB")
29
+ def initialize(**options)
30
+ units = options[:units]
31
+ units = 'MB' if units.nil?
32
+ if options[:progressbar]
33
+ @progressbar = true
34
+ else
35
+ @progressbar = false
36
+ end
37
+ @to_upload = 0
38
+ @done = 0
39
+ @cols = `tput cols`.split.last.to_i
30
40
  @active = true
41
+ @work_to_do = false
31
42
  @refresh_time = 1000
32
43
  @msg_lock = Mutex.new
33
44
  if ["KB","MB","GB"].include?(units)
@@ -39,34 +50,15 @@ class Speedometer
39
50
 
40
51
  def clear
41
52
  @msg_lock.synchronize do
42
- length = `tput cols`
43
- length = length.split.last.to_i
44
53
  print "\r"
45
54
  STDOUT.flush
46
- print "#{' ' * length}"
55
+ print "#{' ' * @cols}"
47
56
  STDOUT.flush
48
57
  print "\r"
49
58
  STDOUT.flush
50
59
  end
51
60
  end
52
61
 
53
- def display
54
- clear
55
- time = Time.now
56
- speed = (uploaded.to_f / (time - @start_time)) / 1024
57
- if @units == "MB" or @units == "GB"
58
- speed = speed / 1024
59
- end
60
- if @units == "GB"
61
- speed = speed / 1024
62
- end
63
- @msg_lock.synchronize do
64
- print "#{speed.round(2)}#{@units}/s"
65
- STDOUT.flush
66
- end
67
- sleep @refresh_time.to_f / 1000
68
- end
69
-
70
62
  def log(msg)
71
63
  clear
72
64
  @msg_lock.synchronize do
@@ -80,9 +72,9 @@ class Speedometer
80
72
  def start
81
73
  @start_time = Time.now if @start_time.nil?
82
74
  if !@started
83
- Thread.new {
84
- while @active
85
- self.display
75
+ @t = Thread.new {
76
+ while @active || @work_to_do
77
+ display
86
78
  end
87
79
  }
88
80
  @started = true
@@ -92,5 +84,50 @@ class Speedometer
92
84
  def stop
93
85
  @active = false
94
86
  @started = false
87
+ @t.join
88
+ end
89
+
90
+ def done(size)
91
+ abort "Upload size needs to be positive!" if size < 0
92
+ @done += size
93
+ end
94
+
95
+ private
96
+
97
+ def progress(taken)
98
+ abort "Upload size needs to be positive!" if @to_upload < 0
99
+ available = (@cols / 2).ceil - 2
100
+ bar = ' ' * (@cols - available - taken - 2)
101
+ done_pr = (@done.to_f / @to_upload.to_f).round(3)
102
+ done_sc = (available * done_pr).ceil
103
+ bar += '|'
104
+ if done_sc < available - 1
105
+ @work_to_do = true
106
+ bar += '=' * done_sc + '>'
107
+ bar += '.' * (@cols - bar.length - taken - 1)
108
+ else
109
+ bar += '=' * available
110
+ @work_to_do = false
111
+ end
112
+ bar += '|'
113
+ end
114
+
115
+ def display
116
+ clear
117
+ time = Time.now
118
+ speed = (uploaded.to_f / (time - @start_time)) / 1024
119
+ if @units == "MB" or @units == "GB"
120
+ speed = speed / 1024
121
+ end
122
+ if @units == "GB"
123
+ speed = speed / 1024
124
+ end
125
+ @msg_lock.synchronize do
126
+ print "#{speed.round(2)}#{@units}/s"
127
+ print progress(speed.round(2).to_s.length + 4) if (@to_upload > 0) && @progressbar && (@done > 0)
128
+ STDOUT.flush
129
+ end
130
+ sleep @refresh_time.to_f / 1000
95
131
  end
132
+
96
133
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speedometer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tadeus Dobrovolskij
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-17 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Library to track and display bandwith usage inside the application
14
14
  email: root@tad-do.net