sys_viewer 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|