sys_viewer 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,56 @@
1
+ # Compiled source #
2
+ ###################
3
+ *.com
4
+ *.class
5
+ *.dll
6
+ *.exe
7
+ *.o
8
+ *.so
9
+
10
+ # Packages #
11
+ ############
12
+ # it's better to unpack these files and commit the raw source
13
+ # git has its own built in compression methods
14
+ *.7z
15
+ *.dmg
16
+ *.gz
17
+ *.iso
18
+ *.jar
19
+ *.rar
20
+ *.tar
21
+ *.zip
22
+
23
+ # Logs and databases #
24
+ ######################
25
+ *.log
26
+ *.sql
27
+ *.sqlite
28
+ *.sqlite3
29
+
30
+ # OS generated files #
31
+ ######################
32
+ .DS_Store*
33
+ ehthumbs.db
34
+ Icon?
35
+ Thumbs.db
36
+
37
+ # IDE & Editors files #
38
+ #######################
39
+ *.swp
40
+ .idea
41
+ *.iml
42
+ .~*
43
+
44
+ # Ruby & Rails files #
45
+ ######################
46
+ Gemfile.lock
47
+ .bundle
48
+ tmp/*
49
+ log/*.log
50
+ pkg
51
+ *.gem
52
+ .sass-cache/
53
+ public/assets/
54
+ test/dummy/db/*.sqlite3
55
+ test/dummy/log/*.log
56
+ test/dummy/tmp/
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in sys_viewer.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'test-unit'
8
+ end
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
5
+
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # SysViewer
2
+
3
+ Small library for viewing some system data. Nothing fancy, just created it to play around with some stuff.
4
+
5
+ # Install
6
+
7
+ $ gem install sys_viewer
8
+
9
+ # Usage
10
+ $ irb
11
+ &gt;&gt; require 'sys_viewer'
12
+
13
+ &gt;&gt; SysViewer.hostname
14
+
15
+ =&gt; "Skynet.local"
16
+
17
+ &gt;&gt; SysViewer.user
18
+
19
+ =&gt; "michael"
20
+
21
+ &gt;&gt; SysViewer.memory_info
22
+
23
+ =&gt; {:memtotal=>8192.0, :memused=>3715.296875, :memfree=>4476.703125, :swaptotal=>64.0, :swapused=>0.0, :swapfree=>64.0}
24
+
25
+ &gt;&gt; SysViewer.disk_usage
26
+
27
+ =&gt; {"/dev/disk0s2"=>{:total=>"596Gi", :used=>"149Gi", :free=>"447Gi", :percent=>"26%", :path=>"/"}, "devfs"=>{:total=>"109Ki", :used=>"109Ki", :free=>"0Bi", :percent=>"100%", :path=>"/dev"}, "map -hosts"=>{:total=>"0Bi", :used=>"0Bi", :free=>"0Bi", :percent=>"100%", :path=>"/net"}, "map auto_home"=>{:total=>"0Bi", :used=>"0Bi", :free=>"0Bi", :percent=>"100%", :path=>"/home"}}
28
+
29
+ &gt;&gt; SysViewer.uptime
30
+
31
+ =&gt; {:days=>0, :hours=>2, :minutes=>36, :seconds=>11}
32
+
33
+ &gt;&gt; SysViewer.load_average
34
+
35
+ =&gt; {:minute=>0.69, :five_minutes=>0.45, :fifteen_minutes=>0.39, :cores=>16}
36
+
37
+ &gt;&gt; SysViewer.cpu_utilization
38
+
39
+ =&gt; {:user=>1, :system=>1, :idle=>98}
40
+
41
+ &gt;&gt; SysViewer.network_traffic
42
+
43
+ =&gt; {"lo0"=>{:received=>0, :transmitted=>0}, "gif0"=>{:received=>0, :transmitted=>0}, "stf0"=>{:received=>0, :transmitted=>0}, "en0"=>{:received=>183, :transmitted=>233}, "en1"=>{:received=>0, :transmitted=>0}, "en2"=>{:received=>0, :transmitted=>0}, "fw0"=>{:received=>0, :transmitted=>0}, "en4"=>{:received=>0, :transmitted=>0}}
44
+
45
+ # Todo
46
+
47
+ - This only works on OS X
48
+ - Some exception handling would be nice
49
+
50
+ # Copyright
51
+
52
+ See LICENSE for details
53
+
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require "rake/testtask"
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ end
9
+ task :default => :test
@@ -0,0 +1,117 @@
1
+ module SysViewer
2
+ module Osx
3
+
4
+ def memory_info
5
+ memory = { memtotal: 0, memused: 0, memfree: 0, swaptotal: 0, swapused: 0, swapfree: 0 }
6
+
7
+ stdin, stdout, stderr = Open3.popen3('sysctl', '-n', 'hw.memsize')
8
+ memory[:memtotal] = stdout.gets.to_f / 1048576
9
+
10
+ stdin, stdout, stderr = Open3.popen3('vm_stat')
11
+ vm_lines = stdout.readlines
12
+ vm_lines.pop # remove footer
13
+ vm_lines.shift # remove header
14
+
15
+ vm_stats = {}
16
+ vm_lines.each do |line|
17
+ element = line.split(/:[\s]+/)
18
+ vm_stats[element[0]] = element[1].gsub!(/.[\n]+/, '').to_f * 4096
19
+ end
20
+ memory[:memfree] = vm_stats['Pages free'] / 1048576 + vm_stats['Pages speculative'] / 1048576
21
+ memory[:memused] = memory[:memtotal] - memory[:memfree]
22
+
23
+ stdin, stdout, stderr = Open3.popen3('sysctl', '-n', 'vm.swapusage')
24
+ swap_info = stdout.gets.split(/[\s]+/)
25
+
26
+ memory[:swaptotal] = swap_info[2].gsub('M', '').to_f
27
+ memory[:swapused] = swap_info[5].gsub('M', '').to_f
28
+ memory[:swapfree] = swap_info[8].gsub('M', '').to_f
29
+
30
+ memory
31
+ end
32
+
33
+ def disk_usage
34
+ stdin, stdout, stderr = Open3.popen3('df', '-h')
35
+ volumes = stdout.readlines
36
+ volumes.shift # remove header
37
+
38
+ data = {}
39
+
40
+ volumes.each do |volume|
41
+ columns = { total: '', used: '', free: '', percent: '', path: '' }
42
+ line = volume.split(/[ ]{2,}/, 6)
43
+
44
+ columns[:total] = line[1]
45
+ columns[:used] = line[2]
46
+ columns[:free] = line[3]
47
+ columns[:percent] = line[4]
48
+ columns[:path] = line[5].gsub(/[\n]+/,'')
49
+
50
+ data[line[0]] = columns
51
+ end
52
+
53
+ data
54
+ end
55
+
56
+ def uptime
57
+ stdin, stdout, stderr = Open3.popen3('sysctl', 'kern.boottime')
58
+
59
+ uptime = stdout.gets.scan(/sec = \d+/)[0].split('=')[1].strip.to_f
60
+ uptime = Time.now.to_i - uptime
61
+
62
+ minute = 60
63
+ hour = minute * 60
64
+ day = hour * 24
65
+
66
+ days = (uptime / day).to_i
67
+ hours = ((uptime % day) / hour).to_i
68
+ minutes = ((uptime % hour) / minute).to_i
69
+ seconds = (uptime % minute).to_i
70
+
71
+ { days: days, hours: hours, minutes: minutes, seconds: seconds }
72
+ end
73
+
74
+ def load_average
75
+ stdin, stdout, stderr = Open3.popen3('sysctl', 'vm.loadavg')
76
+
77
+ loadavg = { minute: 0, five_minutes: 0, fifteen_minutes: 0, cores: 0 }
78
+ loadavg[:minute], loadavg[:five_minutes], loadavg[:fifteen_minutes] = stdout.gets.scan(/\d+.\d+/).map { |value| value.to_f }
79
+
80
+ stdin, stdout, stderr = Open3.popen3('sysctl', '-n', 'hw.logicalcpu')
81
+
82
+ loadavg[:cores] = stdout.gets.to_i
83
+ loadavg
84
+ end
85
+
86
+ def cpu_utilization
87
+ stdin, stdout, stderr = Open3.popen3('iostat')
88
+
89
+ lines = stdout.readlines
90
+ values = lines[2].split
91
+
92
+ { user: values[3].to_i, system: values[4].to_i, idle: values[5].to_i }
93
+ end
94
+
95
+ def network_traffic
96
+ stdin, stdout, stderr = Open3.popen3('sar', '-n', 'DEV', '1', '1')
97
+
98
+ data = stdout.readlines
99
+ 4.times { data.shift } # remove first 4 lines
100
+
101
+ network_data = {}
102
+ data.each do |line|
103
+ if line.start_with?("Average")
104
+ values = line.split
105
+ # Ipkts/s - Packets received per second
106
+ # Ibytes/s - Bytes received per second
107
+ # Opkts/s - Packets transmitted per second
108
+ # Obytes/s - Bytes tranmitted per second
109
+ network_data[values[1]] = { received: values[3].to_i, transmitted: values[5].to_i}
110
+ end
111
+ end
112
+
113
+ network_data
114
+ end
115
+
116
+ end
117
+ end
@@ -0,0 +1,3 @@
1
+ module SysViewer
2
+ VERSION = "0.0.1"
3
+ end
data/lib/sys_viewer.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'socket'
2
+ require 'open3'
3
+ require 'sys_viewer/version'
4
+ require 'sys_viewer/osx'
5
+
6
+ module SysViewer
7
+ class << self
8
+
9
+ case RUBY_PLATFORM
10
+ when /darwin/
11
+ include SysViewer::Osx
12
+ else raise "Platform not yet supported"
13
+ end
14
+
15
+ def hostname
16
+ Socket.gethostname
17
+ end
18
+
19
+ def user
20
+ ENV['USER']
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sys_viewer/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sys_viewer"
7
+ s.version = SysViewer::VERSION
8
+ s.authors = ["Michaël Rigart"]
9
+ s.email = ["michael@netronix.be"]
10
+ s.homepage = ""
11
+ s.summary = %q{View system information}
12
+ s.description = %q{View system information}
13
+
14
+ s.rubyforge_project = "sys_viewer"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
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
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'bundler'
2
+
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ require 'sys_viewer'
15
+
16
+ class Test::Unit::TestCase
17
+ end
@@ -0,0 +1,136 @@
1
+ require 'helper'
2
+
3
+ class TestSysViewer < Test::Unit::TestCase
4
+
5
+ test "OS specific inclusion" do
6
+ case RUBY_PLATFORM
7
+ when /darwin/
8
+ SysViewer.include?(SysViewer::Osx)
9
+ end
10
+ end
11
+
12
+ test "hostname" do
13
+ assert SysViewer.hostname.kind_of?(String)
14
+ end
15
+
16
+ test "user" do
17
+ assert SysViewer.user.kind_of?(String)
18
+ end
19
+
20
+ test "memory_info exists" do
21
+ assert_respond_to SysViewer, :memory_info
22
+ end
23
+
24
+ test "memory info" do
25
+ response = SysViewer.memory_info
26
+
27
+ assert response.kind_of?(Hash)
28
+
29
+ assert response.has_key?(:memtotal)
30
+ assert response.has_key?(:memused)
31
+ assert response.has_key?(:memfree)
32
+ assert response.has_key?(:swaptotal)
33
+ assert response.has_key?(:swapused)
34
+ assert response.has_key?(:swapfree)
35
+
36
+ response.each { |key, value| assert value.kind_of?(Float) }
37
+ end
38
+
39
+ test "disk_usage exists" do
40
+ assert_respond_to SysViewer, :disk_usage
41
+ end
42
+
43
+ test "disk_usage" do
44
+ response = SysViewer.disk_usage
45
+
46
+ assert response.kind_of?(Hash)
47
+
48
+ response.each do | key, value |
49
+ assert key.kind_of?(String)
50
+ assert value.has_key?(:total)
51
+ assert value[:total].kind_of?(String)
52
+ assert value.has_key?(:used)
53
+ assert value[:used].kind_of?(String)
54
+ assert value.has_key?(:free)
55
+ assert value[:free].kind_of?(String)
56
+ assert value.has_key?(:percent)
57
+ assert value[:percent].kind_of?(String)
58
+ assert value.has_key?(:path)
59
+ assert value[:path].kind_of?(String)
60
+ end
61
+ end
62
+
63
+ test "uptime exists" do
64
+ assert_respond_to SysViewer, :uptime
65
+ end
66
+
67
+ test "uptime" do
68
+ response = SysViewer.uptime
69
+
70
+ assert response.kind_of?(Hash)
71
+
72
+ assert response.has_key?(:days)
73
+ assert response[:days].kind_of?(Integer)
74
+ assert response.has_key?(:hours)
75
+ assert response[:hours].kind_of?(Integer)
76
+ assert response.has_key?(:minutes)
77
+ assert response[:minutes].kind_of?(Integer)
78
+ assert response.has_key?(:seconds)
79
+ assert response[:seconds].kind_of?(Integer)
80
+ end
81
+
82
+ test "load_average exists" do
83
+ assert_respond_to SysViewer, :load_average
84
+ end
85
+
86
+ test "load_average" do
87
+ response = SysViewer.load_average
88
+
89
+ assert response.kind_of?(Hash)
90
+
91
+ assert response.has_key?(:minute)
92
+ assert response[:minute].kind_of?(Float)
93
+ assert response.has_key?(:five_minutes)
94
+ assert response[:five_minutes].kind_of?(Float)
95
+ assert response.has_key?(:fifteen_minutes)
96
+ assert response[:fifteen_minutes].kind_of?(Float)
97
+ assert response.has_key?(:cores)
98
+ assert response[:cores].kind_of?(Integer)
99
+ end
100
+
101
+ test "cpu_utilization exists" do
102
+ assert_respond_to SysViewer, :cpu_utilization
103
+ end
104
+
105
+ test "cpu_utilization" do
106
+ response = SysViewer.cpu_utilization
107
+
108
+ assert response.kind_of?(Hash)
109
+
110
+ assert response.has_key?(:user)
111
+ assert response[:user].kind_of?(Integer)
112
+ assert response.has_key?(:system)
113
+ assert response[:system].kind_of?(Integer)
114
+ assert response.has_key?(:idle)
115
+ assert response[:idle].kind_of?(Integer)
116
+ end
117
+
118
+ test "network_traffic exists" do
119
+ assert_respond_to SysViewer, :network_traffic
120
+ end
121
+
122
+ test "network_traffic" do
123
+ response = SysViewer.network_traffic
124
+
125
+ assert response.kind_of?(Hash)
126
+
127
+ response.each do | key, value |
128
+ assert key.kind_of?(String)
129
+ assert value.has_key?(:received)
130
+ assert value[:received].kind_of?(Integer)
131
+ assert value.has_key?(:transmitted)
132
+ assert value[:transmitted].kind_of?(Integer)
133
+ end
134
+ end
135
+
136
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sys_viewer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michaël Rigart
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-06 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: View system information
15
+ email:
16
+ - michael@netronix.be
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - LICENSE
24
+ - README.md
25
+ - Rakefile
26
+ - lib/sys_viewer.rb
27
+ - lib/sys_viewer/osx.rb
28
+ - lib/sys_viewer/version.rb
29
+ - sys_viewer.gemspec
30
+ - test/helper.rb
31
+ - test/test_sys_viewer.rb
32
+ homepage: ''
33
+ licenses: []
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project: sys_viewer
52
+ rubygems_version: 1.8.23
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: View system information
56
+ test_files:
57
+ - test/helper.rb
58
+ - test/test_sys_viewer.rb