linux_stat 2.1.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +54 -1052
- data/exe/linuxstat.rb +148 -98
- data/ext/fs_stat/disk_stat.h +25 -0
- data/ext/fs_stat/extconf.rb +2 -1
- data/ext/fs_stat/fs_stat.c +10 -1
- data/ext/fs_stat/sector_size.h +13 -0
- data/ext/nproc/nproc.c +1 -1
- data/ext/procfs/loadavg_pid.h +1 -1
- data/ext/procfs/procfs.c +1 -0
- data/ext/procfs/stat.h +23 -2
- data/ext/procfs/statm.h +5 -5
- data/ext/procfs/uptime.h +1 -1
- data/ext/sysconf/sysconf.c +17 -17
- data/ext/sysinfo/sysinfo.c +11 -11
- data/ext/utsname/utsname.c +5 -5
- data/lib/linux_stat/battery.rb +32 -6
- data/lib/linux_stat/filesystem.rb +45 -0
- data/lib/linux_stat/os.rb +11 -5
- data/lib/linux_stat/prettify_bytes.rb +130 -31
- data/lib/linux_stat/process_info.rb +21 -13
- data/lib/linux_stat/swap.rb +1 -0
- data/lib/linux_stat/version.rb +1 -1
- metadata +5 -3
data/ext/procfs/uptime.h
CHANGED
data/ext/sysconf/sysconf.c
CHANGED
@@ -11,103 +11,103 @@
|
|
11
11
|
#pragma intel optimization_level 3
|
12
12
|
#endif
|
13
13
|
|
14
|
-
static VALUE getTick(VALUE obj) {
|
14
|
+
static VALUE getTick(volatile VALUE obj) {
|
15
15
|
int val = sysconf(_SC_CLK_TCK) ;
|
16
16
|
if (val < 0) return Qnil ;
|
17
17
|
|
18
18
|
return INT2FIX(val) ;
|
19
19
|
}
|
20
20
|
|
21
|
-
static VALUE getChildMax(VALUE obj) {
|
21
|
+
static VALUE getChildMax(volatile VALUE obj) {
|
22
22
|
long long int val = sysconf(_SC_CHILD_MAX) ;
|
23
23
|
if (val < 0) return Qnil ;
|
24
24
|
|
25
25
|
return LL2NUM(val) ;
|
26
26
|
}
|
27
27
|
|
28
|
-
static VALUE getHostnameMax(VALUE obj) {
|
28
|
+
static VALUE getHostnameMax(volatile VALUE obj) {
|
29
29
|
long long val = sysconf(_SC_HOST_NAME_MAX) ;
|
30
30
|
if (val < 0) return Qnil ;
|
31
31
|
|
32
32
|
return LL2NUM(val) ;
|
33
33
|
}
|
34
34
|
|
35
|
-
static VALUE getLoginNameMax(VALUE obj) {
|
35
|
+
static VALUE getLoginNameMax(volatile VALUE obj) {
|
36
36
|
long long val = sysconf(_SC_LOGIN_NAME_MAX) ;
|
37
37
|
if (val < 0) return Qnil ;
|
38
38
|
|
39
39
|
return LL2NUM(val) ;
|
40
40
|
}
|
41
41
|
|
42
|
-
static VALUE getOpenMax(VALUE obj) {
|
42
|
+
static VALUE getOpenMax(volatile VALUE obj) {
|
43
43
|
long long val = sysconf(_SC_OPEN_MAX) ;
|
44
44
|
if (val < 0) return Qnil ;
|
45
45
|
|
46
46
|
return LL2NUM(val) ;
|
47
47
|
}
|
48
48
|
|
49
|
-
static VALUE getPageSize(VALUE obj) {
|
49
|
+
static VALUE getPageSize(volatile VALUE obj) {
|
50
50
|
int val = sysconf(_SC_PAGESIZE) ;
|
51
51
|
if (val < 0) return Qnil ;
|
52
52
|
|
53
53
|
return INT2FIX(val) ;
|
54
54
|
}
|
55
55
|
|
56
|
-
static VALUE getStreamMax(VALUE obj) {
|
56
|
+
static VALUE getStreamMax(volatile VALUE obj) {
|
57
57
|
long long val = sysconf(_SC_STREAM_MAX) ;
|
58
58
|
if (val < 0) return Qnil ;
|
59
59
|
|
60
60
|
return LL2NUM(val) ;
|
61
61
|
}
|
62
62
|
|
63
|
-
static VALUE getTTYNameMax(VALUE obj) {
|
63
|
+
static VALUE getTTYNameMax(volatile VALUE obj) {
|
64
64
|
long long val = sysconf(_SC_TTY_NAME_MAX) ;
|
65
65
|
if (val < 0) return Qnil ;
|
66
66
|
|
67
67
|
return LL2NUM(val) ;
|
68
68
|
}
|
69
69
|
|
70
|
-
static VALUE getPosixVersion(VALUE obj) {
|
70
|
+
static VALUE getPosixVersion(volatile VALUE obj) {
|
71
71
|
long long val = sysconf(_SC_VERSION) ;
|
72
72
|
if (val < 0) return Qnil ;
|
73
73
|
|
74
74
|
return LL2NUM(val) ;
|
75
75
|
}
|
76
76
|
|
77
|
-
static VALUE getLineMax(VALUE obj) {
|
77
|
+
static VALUE getLineMax(volatile VALUE obj) {
|
78
78
|
long long val = sysconf(_SC_LINE_MAX) ;
|
79
79
|
if (val < 0) return Qnil ;
|
80
80
|
|
81
81
|
return LL2NUM(val) ;
|
82
82
|
}
|
83
83
|
|
84
|
-
static VALUE getExprNestMax(VALUE obj) {
|
84
|
+
static VALUE getExprNestMax(volatile VALUE obj) {
|
85
85
|
long long val = sysconf(_SC_EXPR_NEST_MAX) ;
|
86
86
|
if (val < 0) return Qnil ;
|
87
87
|
|
88
88
|
return LL2NUM(val) ;
|
89
89
|
}
|
90
90
|
|
91
|
-
static VALUE getProcessorConfigured(VALUE obj) {
|
91
|
+
static VALUE getProcessorConfigured(volatile VALUE obj) {
|
92
92
|
long val = sysconf(_SC_NPROCESSORS_CONF) ;
|
93
93
|
if (val < 0) return Qnil ;
|
94
94
|
|
95
95
|
return LONG2NUM(val) ;
|
96
96
|
}
|
97
97
|
|
98
|
-
static VALUE getProcessorOnline(VALUE obj) {
|
98
|
+
static VALUE getProcessorOnline(volatile VALUE obj) {
|
99
99
|
long val = sysconf(_SC_NPROCESSORS_ONLN) ;
|
100
100
|
if (val < 0) return Qnil ;
|
101
101
|
|
102
102
|
return LONG2NUM(val) ;
|
103
103
|
}
|
104
104
|
|
105
|
-
static VALUE getUser(VALUE obj) {
|
105
|
+
static VALUE getUser(volatile VALUE obj) {
|
106
106
|
char *name = getlogin() ;
|
107
107
|
return name ? rb_str_new_cstr(name) : rb_str_new_cstr("") ;
|
108
108
|
}
|
109
109
|
|
110
|
-
static VALUE getUID(VALUE obj) {
|
110
|
+
static VALUE getUID(volatile VALUE obj) {
|
111
111
|
return UINT2NUM((unsigned int) getuid()) ;
|
112
112
|
}
|
113
113
|
|
@@ -115,11 +115,11 @@ static VALUE getGID(VALUE obj) {
|
|
115
115
|
return UINT2NUM((unsigned int) getgid()) ;
|
116
116
|
}
|
117
117
|
|
118
|
-
static VALUE getEUID(VALUE obj) {
|
118
|
+
static VALUE getEUID(volatile VALUE obj) {
|
119
119
|
return UINT2NUM((unsigned int) geteuid()) ;
|
120
120
|
}
|
121
121
|
|
122
|
-
static VALUE getHostname(VALUE obj) {
|
122
|
+
static VALUE getHostname(volatile VALUE obj) {
|
123
123
|
int h_max = sysconf(_SC_HOST_NAME_MAX) + 1 ;
|
124
124
|
char hostname[h_max] ;
|
125
125
|
|
data/ext/sysinfo/sysinfo.c
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
static struct sysinfo info ;
|
15
15
|
|
16
|
-
VALUE totalram(VALUE obj) {
|
16
|
+
static VALUE totalram(volatile VALUE obj) {
|
17
17
|
char status = sysinfo(&info) ;
|
18
18
|
if (status < 0) return Qnil ;
|
19
19
|
|
@@ -22,7 +22,7 @@ VALUE totalram(VALUE obj) {
|
|
22
22
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
23
23
|
}
|
24
24
|
|
25
|
-
VALUE freeram(VALUE obj) {
|
25
|
+
static VALUE freeram(volatile VALUE obj) {
|
26
26
|
char status = sysinfo(&info) ;
|
27
27
|
if (status < 0) return Qnil ;
|
28
28
|
|
@@ -31,7 +31,7 @@ VALUE freeram(VALUE obj) {
|
|
31
31
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
32
32
|
}
|
33
33
|
|
34
|
-
VALUE sharedram(VALUE obj) {
|
34
|
+
static VALUE sharedram(volatile VALUE obj) {
|
35
35
|
char status = sysinfo(&info) ;
|
36
36
|
if (status < 0) return Qnil ;
|
37
37
|
|
@@ -40,7 +40,7 @@ VALUE sharedram(VALUE obj) {
|
|
40
40
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
41
41
|
}
|
42
42
|
|
43
|
-
VALUE bufferram(VALUE obj) {
|
43
|
+
static VALUE bufferram(volatile VALUE obj) {
|
44
44
|
char status = sysinfo(&info) ;
|
45
45
|
if (status < 0) return Qnil ;
|
46
46
|
|
@@ -49,7 +49,7 @@ VALUE bufferram(VALUE obj) {
|
|
49
49
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
50
50
|
}
|
51
51
|
|
52
|
-
VALUE totalswap(VALUE obj) {
|
52
|
+
static VALUE totalswap(volatile VALUE obj) {
|
53
53
|
static struct sysinfo info ;
|
54
54
|
char status = sysinfo(&info) ;
|
55
55
|
if (status < 0) return Qnil ;
|
@@ -59,7 +59,7 @@ VALUE totalswap(VALUE obj) {
|
|
59
59
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
60
60
|
}
|
61
61
|
|
62
|
-
VALUE freeswap(VALUE obj) {
|
62
|
+
static VALUE freeswap(volatile VALUE obj) {
|
63
63
|
char status = sysinfo(&info) ;
|
64
64
|
if (status < 0) return Qnil ;
|
65
65
|
|
@@ -68,7 +68,7 @@ VALUE freeswap(VALUE obj) {
|
|
68
68
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
69
69
|
}
|
70
70
|
|
71
|
-
VALUE totalhigh(VALUE obj) {
|
71
|
+
static VALUE totalhigh(volatile VALUE obj) {
|
72
72
|
char status = sysinfo(&info) ;
|
73
73
|
if (status < 0) return Qnil ;
|
74
74
|
|
@@ -77,7 +77,7 @@ VALUE totalhigh(VALUE obj) {
|
|
77
77
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
78
78
|
}
|
79
79
|
|
80
|
-
VALUE freehigh(VALUE obj) {
|
80
|
+
static VALUE freehigh(volatile VALUE obj) {
|
81
81
|
char status = sysinfo(&info) ;
|
82
82
|
if (status < 0) return Qnil ;
|
83
83
|
|
@@ -86,7 +86,7 @@ VALUE freehigh(VALUE obj) {
|
|
86
86
|
return rb_funcallv_public(_rb_v, rb_intern("*"), 1, &_rb_mem_unit) ;
|
87
87
|
}
|
88
88
|
|
89
|
-
VALUE uptime(VALUE obj) {
|
89
|
+
static VALUE uptime(volatile VALUE obj) {
|
90
90
|
char status = sysinfo(&info) ;
|
91
91
|
if (status < 0) return Qnil ;
|
92
92
|
|
@@ -94,7 +94,7 @@ VALUE uptime(VALUE obj) {
|
|
94
94
|
return ULL2NUM((unsigned long long) v) ;
|
95
95
|
}
|
96
96
|
|
97
|
-
VALUE loads(VALUE obj) {
|
97
|
+
static VALUE loads(volatile VALUE obj) {
|
98
98
|
char status = sysinfo(&info) ;
|
99
99
|
if(status < 0) return rb_ary_new() ;
|
100
100
|
|
@@ -112,7 +112,7 @@ VALUE loads(VALUE obj) {
|
|
112
112
|
}
|
113
113
|
|
114
114
|
// Some people may need this function, just keep it to not make unnecessary calls
|
115
|
-
VALUE sysinfoStat(VALUE obj) {
|
115
|
+
static VALUE sysinfoStat(volatile VALUE obj) {
|
116
116
|
char status = sysinfo(&info) ;
|
117
117
|
VALUE hash = rb_hash_new() ;
|
118
118
|
if (status < 0) return hash ;
|
data/ext/utsname/utsname.c
CHANGED
@@ -28,23 +28,23 @@ void init_buf() {
|
|
28
28
|
}
|
29
29
|
}
|
30
30
|
|
31
|
-
static VALUE getSysname(VALUE obj) {
|
31
|
+
static VALUE getSysname(volatile VALUE obj) {
|
32
32
|
return rb_str_new_cstr(sysname) ;
|
33
33
|
}
|
34
34
|
|
35
|
-
static VALUE getNodename(VALUE obj) {
|
35
|
+
static VALUE getNodename(volatile VALUE obj) {
|
36
36
|
return rb_str_new_cstr(nodename) ;
|
37
37
|
}
|
38
38
|
|
39
|
-
static VALUE getRelease(VALUE obj) {
|
39
|
+
static VALUE getRelease(volatile VALUE obj) {
|
40
40
|
return rb_str_new_cstr(release) ;
|
41
41
|
}
|
42
42
|
|
43
|
-
static VALUE getVersion(VALUE obj) {
|
43
|
+
static VALUE getVersion(volatile VALUE obj) {
|
44
44
|
return rb_str_new_cstr(version) ;
|
45
45
|
}
|
46
46
|
|
47
|
-
static VALUE getMachine(VALUE obj) {
|
47
|
+
static VALUE getMachine(volatile VALUE obj) {
|
48
48
|
return rb_str_new_cstr(machine) ;
|
49
49
|
}
|
50
50
|
|
data/lib/linux_stat/battery.rb
CHANGED
@@ -105,11 +105,19 @@ module LinuxStat
|
|
105
105
|
#
|
106
106
|
# If the battery is not present or the information is not available, it will return nil.
|
107
107
|
def charge
|
108
|
-
@@charge_now_file ||= File.join(PATH, 'charge_now')
|
109
|
-
|
108
|
+
@@charge_now_file ||= if File.readable?(File.join(PATH, 'charge_now'))
|
109
|
+
File.join(PATH, 'charge_now').freeze
|
110
|
+
elsif File.readable?(File.join(PATH, 'energy_now'))
|
111
|
+
File.join(PATH, 'energy_now').freeze
|
112
|
+
end
|
113
|
+
|
114
|
+
@@charge_full_file ||= if File.readable?(File.join(PATH, 'charge_full'))
|
115
|
+
File.join(PATH, 'charge_full').freeze
|
116
|
+
elsif File.readable?(File.join(PATH, 'energy_full'))
|
117
|
+
File.join(PATH, 'energy_full').freeze
|
118
|
+
end
|
110
119
|
|
111
|
-
|
112
|
-
return nil unless @@charge_now_readable
|
120
|
+
return nil unless @@charge_now_file && @@charge_full_file
|
113
121
|
|
114
122
|
charge_now = IO.read(@@charge_now_file).to_i
|
115
123
|
charge_full = IO.read(@@charge_full_file).to_i
|
@@ -215,7 +223,16 @@ module LinuxStat
|
|
215
223
|
|
216
224
|
# charge now
|
217
225
|
cn_f = File.join(x, 'charge_now'.freeze).freeze
|
218
|
-
charge_now = File.readable?(cn_f)
|
226
|
+
charge_now = if File.readable?(cn_f)
|
227
|
+
IO.read(cn_f).to_i.fdiv(1_000_000)
|
228
|
+
else
|
229
|
+
en_f = File.join(x, 'energy_now'.freeze)
|
230
|
+
if File.readable?(en_f)
|
231
|
+
IO.read(en_f) .to_i.fdiv(1_000_000)
|
232
|
+
else
|
233
|
+
nil
|
234
|
+
end
|
235
|
+
end
|
219
236
|
|
220
237
|
# voltage min design
|
221
238
|
vmd_f = File.join(x, 'voltage_min_design'.freeze).freeze
|
@@ -227,7 +244,16 @@ module LinuxStat
|
|
227
244
|
|
228
245
|
# charge full
|
229
246
|
cf_f = File.join(x, 'charge_full'.freeze).freeze
|
230
|
-
charge_full = File.readable?(cf_f)
|
247
|
+
charge_full = if File.readable?(cf_f)
|
248
|
+
IO.read(cf_f).to_i.fdiv(1_000_000)
|
249
|
+
else
|
250
|
+
ef_f = File.join(x, 'energy_full'.freeze)
|
251
|
+
if File.readable?(ef_f)
|
252
|
+
IO.read(ef_f).to_i.fdiv(1_000_000)
|
253
|
+
else
|
254
|
+
nil
|
255
|
+
end
|
256
|
+
end
|
231
257
|
|
232
258
|
# status
|
233
259
|
s_f = File.join(x, 'status'.freeze).freeze
|
@@ -110,6 +110,51 @@ module LinuxStat
|
|
110
110
|
def stat_raw(fs = ?..freeze)
|
111
111
|
LinuxStat::FS.stat(fs)
|
112
112
|
end
|
113
|
+
|
114
|
+
def sector_size(path = LinuxStat::Mounts.root)
|
115
|
+
LinuxStat::FS.sectors(path)
|
116
|
+
end
|
117
|
+
|
118
|
+
def io_total(path = LinuxStat::Mounts.root)
|
119
|
+
p = File.split(path)[-1]
|
120
|
+
_io_total = LinuxStat::FS.total_io(p)
|
121
|
+
|
122
|
+
return {} if _io_total.empty?
|
123
|
+
|
124
|
+
sector_size = LinuxStat::FS.sectors(path)
|
125
|
+
return {} unless sector_size
|
126
|
+
|
127
|
+
{
|
128
|
+
read: _io_total[0] &.*(sector_size),
|
129
|
+
write: _io_total[1] &.*(sector_size),
|
130
|
+
}
|
131
|
+
end
|
132
|
+
|
133
|
+
def io_usage(path = LinuxStat::Mounts.root, interval = 0.1)
|
134
|
+
p = File.split(path)[-1]
|
135
|
+
|
136
|
+
measure1 = LinuxStat::FS.total_io(p)
|
137
|
+
sleep(interval)
|
138
|
+
measure2 = LinuxStat::FS.total_io(p)
|
139
|
+
|
140
|
+
return {} if measure1.empty? || measure2.empty?
|
141
|
+
|
142
|
+
sector_size = LinuxStat::FS.sectors(path)
|
143
|
+
return {} unless sector_size
|
144
|
+
|
145
|
+
m1r = measure1[0]
|
146
|
+
m1w = measure1[1]
|
147
|
+
|
148
|
+
m2r = measure2[0]
|
149
|
+
m2w = measure2[1]
|
150
|
+
|
151
|
+
{
|
152
|
+
read: m2r.-(m1r).*(sector_size).fdiv(interval),
|
153
|
+
write: m2w.-(m1w).*(sector_size).fdiv(interval)
|
154
|
+
}
|
155
|
+
end
|
156
|
+
|
157
|
+
alias sectors sector_size
|
113
158
|
end
|
114
159
|
end
|
115
160
|
end
|
data/lib/linux_stat/os.rb
CHANGED
@@ -7,7 +7,11 @@ module LinuxStat
|
|
7
7
|
# Reads /etc/os-release and returns a Hash. For example:
|
8
8
|
# LinuxStat::OS.os_release
|
9
9
|
#
|
10
|
-
# => {:NAME=>"Arch Linux", :PRETTY_NAME=>"Arch Linux", :ID=>"arch", :BUILD_ID=>"rolling",
|
10
|
+
# => {:NAME=>"Arch Linux", :PRETTY_NAME=>"Arch Linux", :ID=>"arch", :BUILD_ID=>"rolling",
|
11
|
+
# :ANSI_COLOR=>"38;2;23;147;209", :HOME_URL=>"https://www.archlinux.org/",
|
12
|
+
# :DOCUMENTATION_URL=>"https://wiki.archlinux.org/",
|
13
|
+
# :SUPPORT_URL=>"https://bbs.archlinux.org/", :BUG_REPORT_URL=>"https://bugs.archlinux.org/",
|
14
|
+
# :LOGO=>"archlinux"}
|
11
15
|
#
|
12
16
|
# If the info isn't available, it will return an empty Hash.
|
13
17
|
#
|
@@ -127,7 +131,7 @@ module LinuxStat
|
|
127
131
|
#
|
128
132
|
# The return type is strictly Integer and doesn't fail.
|
129
133
|
def bits
|
130
|
-
@@bits ||= if
|
134
|
+
@@bits ||= if machine.end_with?('64') || RbConfig::CONFIG['host_cpu'].end_with?('64') || RUBY_PLATFORM.end_with?('64')
|
131
135
|
64
|
132
136
|
else
|
133
137
|
32
|
@@ -138,7 +142,7 @@ module LinuxStat
|
|
138
142
|
# Reads /proc/uptime and returns the system uptime:
|
139
143
|
# LinuxStat::OS.uptime
|
140
144
|
#
|
141
|
-
# => {:hour=>
|
145
|
+
# => {:hour=>16, :minute=>10, :second=>11, :jiffy=>20}
|
142
146
|
#
|
143
147
|
# Using uptime is 10x slower than using uptime_i
|
144
148
|
#
|
@@ -151,12 +155,14 @@ module LinuxStat
|
|
151
155
|
|
152
156
|
h = uptime_i / 3600
|
153
157
|
m = uptime_i % 3600 / 60
|
154
|
-
s =
|
158
|
+
s = uptime_i.%(60)
|
159
|
+
j = _uptime.-(uptime_i) * 100
|
155
160
|
|
156
161
|
{
|
157
162
|
hour: h,
|
158
163
|
minute: m,
|
159
|
-
second: s
|
164
|
+
second: s,
|
165
|
+
jiffy: j.to_i
|
160
166
|
}
|
161
167
|
end
|
162
168
|
|
@@ -7,6 +7,28 @@ module LinuxStat
|
|
7
7
|
# 4. kiB, MiB, GiB, TiB, PiB, EiB, ZiB, YiB
|
8
8
|
|
9
9
|
module PrettifyBytes
|
10
|
+
# Kilo = Kilobyte (1000 - 1), and so on...
|
11
|
+
# 8.times { |x| puts 1000.**(x.next).to_s << '.00' }
|
12
|
+
KILO = 1000.00
|
13
|
+
MEGA = 1000000.00
|
14
|
+
GIGA = 1000000000.00
|
15
|
+
TERA = 1000000000000.00
|
16
|
+
PETA = 1000000000000000.00
|
17
|
+
EXA = 1000000000000000000.00
|
18
|
+
ZETTA = 1000000000000000000000.00
|
19
|
+
YOTTA = 1000000000000000000000000.00
|
20
|
+
|
21
|
+
# Binary suffixes
|
22
|
+
# 8.times { |x| puts 1024.**(x.next).to_s << '.00' }
|
23
|
+
KIBI = 1024.00
|
24
|
+
MEBI = 1048576.00
|
25
|
+
GIBI = 1073741824.00
|
26
|
+
TEBI = 1099511627776.00
|
27
|
+
PEBI = 1125899906842624.00
|
28
|
+
EXBI = 1152921504606846976.00
|
29
|
+
ZEBI = 1180591620717411303424.00
|
30
|
+
YOBI = 1208925819614629174706176.00
|
31
|
+
|
10
32
|
class << self
|
11
33
|
##
|
12
34
|
# Converts a number to decimal byte units and outputs with the metric prefix
|
@@ -24,12 +46,33 @@ module LinuxStat
|
|
24
46
|
#
|
25
47
|
# => "1.07 gigabytes"
|
26
48
|
def convert_decimal(n, precision: 2)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
49
|
+
if n < KILO
|
50
|
+
"#{"%.#{precision}f" % n} byte#{?s.freeze if n != 1}"
|
51
|
+
elsif n < MEGA
|
52
|
+
n /= KILO
|
53
|
+
"#{"%.#{precision}f" % n} kilobyte#{?s.freeze if n != 1}"
|
54
|
+
elsif n < GIGA
|
55
|
+
n /= MEGA
|
56
|
+
"#{"%.#{precision}f" % n} megabyte#{?s.freeze if n != 1}"
|
57
|
+
elsif n < TERA
|
58
|
+
n /= GIGA
|
59
|
+
"#{"%.#{precision}f" % n} gigabyte#{?s.freeze if n != 1}"
|
60
|
+
elsif n < PETA
|
61
|
+
n /= TERA
|
62
|
+
"#{"%.#{precision}f" % n} terabyte#{?s.freeze if n != 1}"
|
63
|
+
elsif n < EXA
|
64
|
+
n /= PETA
|
65
|
+
"#{"%.#{precision}f" % n} petabyte#{?s.freeze if n != 1}"
|
66
|
+
elsif n < ZETTA
|
67
|
+
n /= EXA
|
68
|
+
"#{"%.#{precision}f" % n} exabyte#{?s.freeze if n != 1}"
|
69
|
+
elsif n < YOTTA
|
70
|
+
n /= ZETTA
|
71
|
+
"#{"%.#{precision}f" % n} zettabyte#{?s.freeze if n != 1}"
|
72
|
+
else
|
73
|
+
n /= YOTTA
|
74
|
+
"#{"%.#{precision}f" % n} yottabyte#{?s.freeze if n != 1}"
|
75
|
+
end
|
33
76
|
end
|
34
77
|
|
35
78
|
# Converts a number to binary byte units and outputs with the IEC prefix
|
@@ -47,12 +90,33 @@ module LinuxStat
|
|
47
90
|
#
|
48
91
|
# => "1.0 gibibyte"
|
49
92
|
def convert_binary(n, precision: 2)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
93
|
+
if n < KIBI
|
94
|
+
"#{"%.#{precision}f" % n} byte#{?s.freeze if n != 1}"
|
95
|
+
elsif n < MEBI
|
96
|
+
n /= KIBI
|
97
|
+
"#{"%.#{precision}f" % n} kibibyte#{?s.freeze if n != 1}"
|
98
|
+
elsif n < GIBI
|
99
|
+
n /= MEBI
|
100
|
+
"#{"%.#{precision}f" % n} mebibyte#{?s.freeze if n != 1}"
|
101
|
+
elsif n < TEBI
|
102
|
+
n /= GIBI
|
103
|
+
"#{"%.#{precision}f" % n} gibibyte#{?s.freeze if n != 1}"
|
104
|
+
elsif n < PEBI
|
105
|
+
n /= TEBI
|
106
|
+
"#{"%.#{precision}f" % n} tebibyte#{?s.freeze if n != 1}"
|
107
|
+
elsif n < EXBI
|
108
|
+
n /= PEBI
|
109
|
+
"#{"%.#{precision}f" % n} pebibyte#{?s.freeze if n != 1}"
|
110
|
+
elsif n < ZEBI
|
111
|
+
n /= EXBI
|
112
|
+
"#{"%.#{precision}f" % n} exbiyte#{?s.freeze if n != 1}"
|
113
|
+
elsif n < YOBI
|
114
|
+
n /= ZEBI
|
115
|
+
"#{"%.#{precision}f" % n} zebibyte#{?s.freeze if n != 1}"
|
116
|
+
else
|
117
|
+
n /= YOBI
|
118
|
+
"#{"%.#{precision}f" % n} yobibyte#{?s.freeze if n != 1}"
|
119
|
+
end
|
56
120
|
end
|
57
121
|
|
58
122
|
# Converts a number to decimal byte units
|
@@ -70,12 +134,33 @@ module LinuxStat
|
|
70
134
|
#
|
71
135
|
# => "1.07 GB"
|
72
136
|
def convert_short_decimal(n, precision: 2)
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
137
|
+
if n < KILO
|
138
|
+
"#{"%.#{precision}f" % n} B"
|
139
|
+
elsif n < MEGA
|
140
|
+
n /= KILO
|
141
|
+
"#{"%.#{precision}f" % n} kB"
|
142
|
+
elsif n < GIGA
|
143
|
+
n /= MEGA
|
144
|
+
"#{"%.#{precision}f" % n} MB"
|
145
|
+
elsif n < TERA
|
146
|
+
n /= GIGA
|
147
|
+
"#{"%.#{precision}f" % n} GB"
|
148
|
+
elsif n < PETA
|
149
|
+
n /= TERA
|
150
|
+
"#{"%.#{precision}f" % n} TB"
|
151
|
+
elsif n < EXA
|
152
|
+
n /= PETA
|
153
|
+
"#{"%.#{precision}f" % n} PB"
|
154
|
+
elsif n < ZETTA
|
155
|
+
n /= EXA
|
156
|
+
"#{"%.#{precision}f" % n} EB"
|
157
|
+
elsif n < YOTTA
|
158
|
+
n /= ZETTA
|
159
|
+
"#{"%.#{precision}f" % n} ZB"
|
160
|
+
else
|
161
|
+
n /= YOTTA
|
162
|
+
"#{"%.#{precision}f" % n} YB"
|
163
|
+
end
|
79
164
|
end
|
80
165
|
|
81
166
|
##
|
@@ -95,19 +180,33 @@ module LinuxStat
|
|
95
180
|
#
|
96
181
|
# => "1.0 GiB"
|
97
182
|
def convert_short_binary(n, precision: 2)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
183
|
+
if n < KIBI
|
184
|
+
"#{"%.#{precision}f" % n} B"
|
185
|
+
elsif n < MEBI
|
186
|
+
n /= KIBI
|
187
|
+
"#{"%.#{precision}f" % n} KiB"
|
188
|
+
elsif n < GIBI
|
189
|
+
n /= MEBI
|
190
|
+
"#{"%.#{precision}f" % n} MiB"
|
191
|
+
elsif n < TEBI
|
192
|
+
n /= GIBI
|
193
|
+
"#{"%.#{precision}f" % n} GiB"
|
194
|
+
elsif n < PEBI
|
195
|
+
n /= TEBI
|
196
|
+
"#{"%.#{precision}f" % n} TiB"
|
197
|
+
elsif n < EXBI
|
198
|
+
n /= PEBI
|
199
|
+
"#{"%.#{precision}f" % n} PiB"
|
200
|
+
elsif n < ZEBI
|
201
|
+
n /= EXBI
|
202
|
+
"#{"%.#{precision}f" % n} EiB"
|
203
|
+
elsif n < YOBI
|
204
|
+
n /= ZEBI
|
205
|
+
"#{"%.#{precision}f" % n} ZiB"
|
206
|
+
else
|
207
|
+
n /= YOBI
|
208
|
+
"#{"%.#{precision}f" % n} YiB"
|
209
|
+
end
|
111
210
|
end
|
112
211
|
end
|
113
212
|
end
|