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 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