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.
- checksums.yaml +4 -4
- data/lib/speedometer.rb +64 -27
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4146ad9c933e1bdb3a8e83255c41448af41387e
|
4
|
+
data.tar.gz: 75930156a91df6b4f9df2f8b158602a215e5f59a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
# *
|
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(
|
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 "#{' ' *
|
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
|
-
|
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
|
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-
|
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
|