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 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
@@ -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
@@ -89,7 +89,7 @@ module SysViewer
89
89
  lines = stdout.readlines
90
90
  values = lines[2].split
91
91
 
92
- { user: values[3].to_i, system: values[4].to_i, idle: values[5].to_i }
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].to_i, transmitted: values[5].to_i}
109
+ network_data[values[1]] = { received: values[3].to_f, transmitted: values[5].to_f }
110
110
  end
111
111
  end
112
112
 
@@ -1,3 +1,3 @@
1
1
  module SysViewer
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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.rubyforge_project = "sys_viewer"
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
@@ -1,7 +1,7 @@
1
1
  require 'bundler'
2
2
 
3
3
  begin
4
- Bundler.setup(:default, :development)
4
+ Bundler.setup(:default, :test)
5
5
  rescue Bundler::BundlerError => e
6
6
  $stderr.puts e.message
7
7
  $stderr.puts "Run `bundle install` to install missing gems"
@@ -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?(Integer)
113
+ assert response[:user].kind_of?(Float)
112
114
  assert response.has_key?(:system)
113
- assert response[:system].kind_of?(Integer)
115
+ assert response[:system].kind_of?(Float)
114
116
  assert response.has_key?(:idle)
115
- assert response[:idle].kind_of?(Integer)
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?(Integer)
132
+ assert value[:received].kind_of?(Float)
131
133
  assert value.has_key?(:transmitted)
132
- assert value[:transmitted].kind_of?(Integer)
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.1
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: '0'
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: sys_viewer
52
+ rubyforge_project:
52
53
  rubygems_version: 1.8.23
53
54
  signing_key:
54
55
  specification_version: 3