sys_viewer 0.0.1 → 0.0.2
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.
- data/README.md +4 -1
- data/lib/sys_viewer.rb +4 -1
- data/lib/sys_viewer/linux.rb +101 -0
- data/lib/sys_viewer/osx.rb +2 -2
- data/lib/sys_viewer/version.rb +1 -1
- data/sys_viewer.gemspec +2 -6
- data/test/helper.rb +1 -1
- data/test/test_sys_viewer.rb +8 -6
- metadata +5 -4
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
Small library for viewing some system data. Nothing fancy, just created it to play around with some stuff.
|
4
4
|
|
5
|
+
# Prerequisites
|
6
|
+
|
7
|
+
Only tested on MRI 1.9.3 in combination with OS X 10.6.8 and Ubuntu 12.04
|
8
|
+
|
5
9
|
# Install
|
6
10
|
|
7
11
|
$ gem install sys_viewer
|
@@ -44,7 +48,6 @@ $ irb
|
|
44
48
|
|
45
49
|
# Todo
|
46
50
|
|
47
|
-
- This only works on OS X
|
48
51
|
- Some exception handling would be nice
|
49
52
|
|
50
53
|
# Copyright
|
data/lib/sys_viewer.rb
CHANGED
@@ -2,6 +2,7 @@ require 'socket'
|
|
2
2
|
require 'open3'
|
3
3
|
require 'sys_viewer/version'
|
4
4
|
require 'sys_viewer/osx'
|
5
|
+
require 'sys_viewer/linux'
|
5
6
|
|
6
7
|
module SysViewer
|
7
8
|
class << self
|
@@ -9,6 +10,8 @@ module SysViewer
|
|
9
10
|
case RUBY_PLATFORM
|
10
11
|
when /darwin/
|
11
12
|
include SysViewer::Osx
|
13
|
+
when /linux/
|
14
|
+
include SysViewer::Linux
|
12
15
|
else raise "Platform not yet supported"
|
13
16
|
end
|
14
17
|
|
@@ -20,4 +23,4 @@ module SysViewer
|
|
20
23
|
ENV['USER']
|
21
24
|
end
|
22
25
|
end
|
23
|
-
end
|
26
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module SysViewer
|
2
|
+
module Linux
|
3
|
+
|
4
|
+
def memory_info
|
5
|
+
memory = { memtotal: 0, memused: 0, memfree: 0, swaptotal: 0, swapused: 0, swapfree: 0 }
|
6
|
+
|
7
|
+
mem_hash = {}
|
8
|
+
File.open('/proc/meminfo', 'r') do |file|
|
9
|
+
file.readlines.each do |line|
|
10
|
+
rule = line.split(/:[ ]{2,}/)
|
11
|
+
mem_hash[rule[0]] = rule[1].to_f / 1024
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
memory[:memtotal] = mem_hash['MemTotal']
|
16
|
+
memory[:memused] = mem_hash['MemTotal'] - mem_hash['MemFree']
|
17
|
+
memory[:memfree] = mem_hash['MemFree']
|
18
|
+
memory[:swaptotal] = mem_hash['SwapTotal']
|
19
|
+
memory[:swapused] = mem_hash['SwapTotal'] - mem_hash['SwapFree']
|
20
|
+
memory[:swapfree] = mem_hash['SwapFree']
|
21
|
+
|
22
|
+
memory
|
23
|
+
end
|
24
|
+
|
25
|
+
def disk_usage
|
26
|
+
stdin, stdout, stderr = Open3.popen3('df', '-h')
|
27
|
+
volumes = stdout.readlines
|
28
|
+
volumes.shift # remove header
|
29
|
+
|
30
|
+
data = {}
|
31
|
+
|
32
|
+
volumes.each do |volume|
|
33
|
+
columns = { total: '', used: '', free: '', percent: '', path: '' }
|
34
|
+
line = volume.split(/[ ]{1,}/, 6)
|
35
|
+
|
36
|
+
columns[:total] = line[1]
|
37
|
+
columns[:used] = line[2]
|
38
|
+
columns[:free] = line[3]
|
39
|
+
columns[:percent] = line[4]
|
40
|
+
columns[:path] = line[5].gsub(/[\n]+/,'')
|
41
|
+
|
42
|
+
data[line[0]] = columns
|
43
|
+
end
|
44
|
+
|
45
|
+
data
|
46
|
+
end
|
47
|
+
|
48
|
+
def uptime
|
49
|
+
uptime = File.open('/proc/uptime', &:readline).split[0].to_f
|
50
|
+
|
51
|
+
minute = 60
|
52
|
+
hour = minute * 60
|
53
|
+
day = hour * 24
|
54
|
+
|
55
|
+
days = (uptime / day).to_i
|
56
|
+
hours = ((uptime % day) / hour).to_i
|
57
|
+
minutes = ((uptime % hour) / minute).to_i
|
58
|
+
seconds = (uptime % minute).to_i
|
59
|
+
|
60
|
+
{ days: days, hours: hours, minutes: minutes, seconds: seconds }
|
61
|
+
end
|
62
|
+
|
63
|
+
def load_average
|
64
|
+
loadavg = { minute: 0, five_minutes: 0, fifteen_minutes: 0, cores: 0 }
|
65
|
+
loadavg[:minute], loadavg[:five_minutes], loadavg[:fifteen_minutes] = File.open('/proc/loadavg', &:readline).scan(/\d+.\d+/).map { |value| value.to_f }
|
66
|
+
|
67
|
+
stdin, stdout, stderr = Open3.popen3('cat /proc/cpuinfo | grep cores')
|
68
|
+
cores = stdout.gets
|
69
|
+
loadavg[:cores] = (cores)? cores.scan(/\d+/).first.to_i : 1
|
70
|
+
|
71
|
+
loadavg
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
def cpu_utilization
|
76
|
+
stdin, stdout, stderr = Open3.popen3('sar', '1', '1')
|
77
|
+
average_stats = stdout.readlines.last
|
78
|
+
values = average_stats.scan(/\d+[\.,]\d+/)
|
79
|
+
|
80
|
+
{ user: values[0].to_f , system: values[2].to_f , idle: values[5].to_f }
|
81
|
+
end
|
82
|
+
|
83
|
+
def network_traffic
|
84
|
+
stdin, stdout, stderr = Open3.popen3('sar', '-n', 'DEV', '1', '1')
|
85
|
+
|
86
|
+
data = stdout.readlines
|
87
|
+
7.times { data.shift } # remove first 7 lines
|
88
|
+
|
89
|
+
network_data = {}
|
90
|
+
data.each do |line|
|
91
|
+
values = line.split
|
92
|
+
# rxkB/s - Total number of kilobytes received per second
|
93
|
+
# txkB/s - Total number of kilobytes transmitted per second
|
94
|
+
network_data[values[1]] = { received: values[4].to_f, transmitted: values[5].to_f }
|
95
|
+
end
|
96
|
+
|
97
|
+
network_data
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
data/lib/sys_viewer/osx.rb
CHANGED
@@ -89,7 +89,7 @@ module SysViewer
|
|
89
89
|
lines = stdout.readlines
|
90
90
|
values = lines[2].split
|
91
91
|
|
92
|
-
{ user: values[3].
|
92
|
+
{ user: values[3].to_f, system: values[4].to_f, idle: values[5].to_f }
|
93
93
|
end
|
94
94
|
|
95
95
|
def network_traffic
|
@@ -106,7 +106,7 @@ module SysViewer
|
|
106
106
|
# Ibytes/s - Bytes received per second
|
107
107
|
# Opkts/s - Packets transmitted per second
|
108
108
|
# Obytes/s - Bytes tranmitted per second
|
109
|
-
network_data[values[1]] = { received: values[3].
|
109
|
+
network_data[values[1]] = { received: values[3].to_f, transmitted: values[5].to_f }
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
data/lib/sys_viewer/version.rb
CHANGED
data/sys_viewer.gemspec
CHANGED
@@ -7,18 +7,14 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = SysViewer::VERSION
|
8
8
|
s.authors = ["Michaël Rigart"]
|
9
9
|
s.email = ["michael@netronix.be"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/netronix/sys_viewer"
|
11
11
|
s.summary = %q{View system information}
|
12
12
|
s.description = %q{View system information}
|
13
13
|
|
14
|
-
s.
|
14
|
+
s.required_ruby_version = ">= 1.9"
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
|
-
|
21
|
-
# specify any dependencies here; for example:
|
22
|
-
# s.add_development_dependency "rspec"
|
23
|
-
# s.add_runtime_dependency "rest-client"
|
24
20
|
end
|
data/test/helper.rb
CHANGED
data/test/test_sys_viewer.rb
CHANGED
@@ -6,6 +6,8 @@ class TestSysViewer < Test::Unit::TestCase
|
|
6
6
|
case RUBY_PLATFORM
|
7
7
|
when /darwin/
|
8
8
|
SysViewer.include?(SysViewer::Osx)
|
9
|
+
when /linux/
|
10
|
+
SysViewer.include?(SysViewer::Linux)
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
@@ -108,11 +110,11 @@ class TestSysViewer < Test::Unit::TestCase
|
|
108
110
|
assert response.kind_of?(Hash)
|
109
111
|
|
110
112
|
assert response.has_key?(:user)
|
111
|
-
assert response[:user].kind_of?(
|
113
|
+
assert response[:user].kind_of?(Float)
|
112
114
|
assert response.has_key?(:system)
|
113
|
-
assert response[:system].kind_of?(
|
115
|
+
assert response[:system].kind_of?(Float)
|
114
116
|
assert response.has_key?(:idle)
|
115
|
-
assert response[:idle].kind_of?(
|
117
|
+
assert response[:idle].kind_of?(Float)
|
116
118
|
end
|
117
119
|
|
118
120
|
test "network_traffic exists" do
|
@@ -127,10 +129,10 @@ class TestSysViewer < Test::Unit::TestCase
|
|
127
129
|
response.each do | key, value |
|
128
130
|
assert key.kind_of?(String)
|
129
131
|
assert value.has_key?(:received)
|
130
|
-
assert value[:received].kind_of?(
|
132
|
+
assert value[:received].kind_of?(Float)
|
131
133
|
assert value.has_key?(:transmitted)
|
132
|
-
assert value[:transmitted].kind_of?(
|
134
|
+
assert value[:transmitted].kind_of?(Float)
|
133
135
|
end
|
134
136
|
end
|
135
137
|
|
136
|
-
end
|
138
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys_viewer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -24,12 +24,13 @@ files:
|
|
24
24
|
- README.md
|
25
25
|
- Rakefile
|
26
26
|
- lib/sys_viewer.rb
|
27
|
+
- lib/sys_viewer/linux.rb
|
27
28
|
- lib/sys_viewer/osx.rb
|
28
29
|
- lib/sys_viewer/version.rb
|
29
30
|
- sys_viewer.gemspec
|
30
31
|
- test/helper.rb
|
31
32
|
- test/test_sys_viewer.rb
|
32
|
-
homepage:
|
33
|
+
homepage: https://github.com/netronix/sys_viewer
|
33
34
|
licenses: []
|
34
35
|
post_install_message:
|
35
36
|
rdoc_options: []
|
@@ -40,7 +41,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
40
41
|
requirements:
|
41
42
|
- - ! '>='
|
42
43
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
44
|
+
version: '1.9'
|
44
45
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
46
|
none: false
|
46
47
|
requirements:
|
@@ -48,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
49
|
- !ruby/object:Gem::Version
|
49
50
|
version: '0'
|
50
51
|
requirements: []
|
51
|
-
rubyforge_project:
|
52
|
+
rubyforge_project:
|
52
53
|
rubygems_version: 1.8.23
|
53
54
|
signing_key:
|
54
55
|
specification_version: 3
|