linux_stat 2.1.2 → 2.3.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/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
|