virtop 0.0.7 → 0.0.8
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.rdoc +22 -0
- data/bin/virtop +61 -15
- data/lib/virtop/table.rb +24 -10
- data/lib/virtop.rb +1 -1
- metadata +8 -8
- data/README +0 -15
data/README.rdoc
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
== Installation ==
|
2
|
+
|
3
|
+
Add gems.github.com as a source for gems and install elliottcable-ncurses from
|
4
|
+
this mirror, because there is no version on rubygems.org which works with ruby
|
5
|
+
1.9.
|
6
|
+
|
7
|
+
* gem sources -a http://gems.github.com
|
8
|
+
* gem install elliottcable-ncurses
|
9
|
+
|
10
|
+
Build the virtop gem and install it.
|
11
|
+
|
12
|
+
* gem build virtop.gemspec
|
13
|
+
* gem install virtop-*.gem
|
14
|
+
|
15
|
+
This should install ruby-libvirt as a dependency. Seems to me, that ruby-libvirt
|
16
|
+
from rubygems.org does not build with ruby 1.9. On Arch Linux you can install
|
17
|
+
ruby-libvirt from AUR:
|
18
|
+
|
19
|
+
http://aur.archlinux.org/packages.php?ID=31952
|
20
|
+
|
21
|
+
On other platforms you have to hallucinate another solution. At the link above
|
22
|
+
you find a patch to the ruby-libvirt sources, which makes it build in ruby 1.9.
|
data/bin/virtop
CHANGED
@@ -25,6 +25,22 @@ EOF
|
|
25
25
|
exit( 1 )
|
26
26
|
end
|
27
27
|
|
28
|
+
# Show some lines of help.
|
29
|
+
if( ARGV.first == "-h" or ARGV.first == "--help" )
|
30
|
+
$stderr.puts <<EOF
|
31
|
+
#{$0} [libvirt-uri]
|
32
|
+
|
33
|
+
libvirt-uri is optional. Default is qemu:///system (for the local libvirt
|
34
|
+
daemon). See http://libvirt.org/uri.html for URI format.
|
35
|
+
|
36
|
+
Key bindings:
|
37
|
+
q Quit.
|
38
|
+
1..6 Sort by column number.
|
39
|
+
|
40
|
+
EOF
|
41
|
+
exit( 1 )
|
42
|
+
end
|
43
|
+
|
28
44
|
# Require and include virtop module. It will require libvirt.
|
29
45
|
$:.unshift( File.join( File.dirname( __FILE__ ), '../lib' ) )
|
30
46
|
require( 'virtop' )
|
@@ -37,6 +53,7 @@ if( ARGV.size < 1 )
|
|
37
53
|
else
|
38
54
|
uri = URI.parse( ARGV.first )
|
39
55
|
|
56
|
+
# Works around a deadlock if path is empty.
|
40
57
|
if( uri.scheme == 'qemu+ssh' and uri.path == '' )
|
41
58
|
raise( Exception.new( 'invalid url specified' ) )
|
42
59
|
else
|
@@ -61,39 +78,68 @@ begin
|
|
61
78
|
Ncurses.noecho
|
62
79
|
Ncurses.halfdelay( 10 )
|
63
80
|
|
81
|
+
sortBy = 0
|
82
|
+
|
64
83
|
while( true )
|
65
84
|
Ncurses.clear
|
66
85
|
|
67
86
|
n.intrflush( false )
|
68
87
|
n.keypad( true )
|
69
88
|
|
89
|
+
info = c.node_get_info
|
90
|
+
|
91
|
+
n.addstr(
|
92
|
+
c.hostname.upcase +
|
93
|
+
"\n" +
|
94
|
+
' cores ' + info.cores.to_s +
|
95
|
+
' cpus ' + info.cpus.to_s +
|
96
|
+
' mhz ' + info.mhz.to_s +
|
97
|
+
' arch ' + info.model.to_s +
|
98
|
+
"\n" +
|
99
|
+
' mem ' + info.memory.to_s +
|
100
|
+
' nodes ' + info.nodes.to_s +
|
101
|
+
' sockets ' + info.sockets.to_s +
|
102
|
+
' threads ' + info.threads.to_s +
|
103
|
+
"\n" +
|
104
|
+
' version ' + c.libversion.to_s +
|
105
|
+
"\n\n"
|
106
|
+
)
|
107
|
+
|
70
108
|
t = Table.new(
|
71
|
-
'
|
72
|
-
'
|
73
|
-
'
|
74
|
-
'
|
75
|
-
'
|
76
|
-
'
|
109
|
+
'NAME',
|
110
|
+
'STATE',
|
111
|
+
'MEM',
|
112
|
+
'MEM_MAX',
|
113
|
+
'CPU_NUM',
|
114
|
+
'CPU_TIME'
|
77
115
|
)
|
78
116
|
|
79
|
-
c.domains.each do |
|
117
|
+
c.domains.each do |d|
|
80
118
|
t.add_row(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
119
|
+
d.name,
|
120
|
+
d.state,
|
121
|
+
d.mem,
|
122
|
+
d.mem_max,
|
123
|
+
d.cpu_num,
|
124
|
+
d.cpu_time
|
87
125
|
)
|
88
126
|
end
|
89
127
|
|
128
|
+
t.sort_by( sortBy )
|
129
|
+
|
90
130
|
t.format.each do |line|
|
91
131
|
n.addstr( line )
|
92
132
|
end
|
93
133
|
|
94
|
-
n.
|
134
|
+
char = n.getch
|
135
|
+
case( char )
|
136
|
+
when 49..54
|
137
|
+
sortBy = char - 49
|
138
|
+
when 113
|
139
|
+
raise( LetsExit )
|
140
|
+
end
|
95
141
|
|
96
|
-
|
142
|
+
n.refresh
|
97
143
|
end
|
98
144
|
rescue LetsExit
|
99
145
|
ensure
|
data/lib/virtop/table.rb
CHANGED
@@ -1,25 +1,38 @@
|
|
1
|
+
# Represents a table. Important for column width correction and sorting of rows.
|
1
2
|
class Virtop::Table
|
3
|
+
# Contructor gets table header strings as arguments.
|
2
4
|
def initialize( *args )
|
3
5
|
@header = args
|
4
6
|
@rows = []
|
5
7
|
@widths = [0] * args.size
|
6
8
|
end
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
10
|
+
# Adds a row to the table. Number of arguments must equal the number of
|
11
|
+
# columns given by header strings on contruction.
|
12
12
|
def add_row( *args )
|
13
|
-
|
13
|
+
if( args.size != @header.size )
|
14
|
+
raise( Exception.new( 'Wrong column number.' ) )
|
15
|
+
end
|
16
|
+
|
14
17
|
@rows.push( args )
|
15
18
|
end
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
# Sorts the table by a certain column given by it's header string or the
|
21
|
+
# index of the column starting at zero.
|
22
|
+
def sort_by( col )
|
23
|
+
if( col.class == String )
|
24
|
+
index = @header.index( col )
|
25
|
+
else
|
26
|
+
index = col.to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
@rows = @rows.sort_by do |row|
|
30
|
+
row[index]
|
20
31
|
end
|
21
32
|
end
|
22
33
|
|
34
|
+
# Converts the whole table as array of strings, which are fancy formatted
|
35
|
+
# (mainly for good column widths).
|
23
36
|
def format
|
24
37
|
update_widths!
|
25
38
|
|
@@ -28,16 +41,17 @@ class Virtop::Table
|
|
28
41
|
( [ @header ] + @rows ).each do |row|
|
29
42
|
line = ''
|
30
43
|
@header.size.times do |i|
|
31
|
-
line += row[i].ljust( @widths[i] + 2 )
|
44
|
+
line += row[i].to_s.ljust( @widths[i] + 2 )
|
32
45
|
end
|
33
46
|
a.push( line + "\n" )
|
34
47
|
end
|
35
48
|
|
36
|
-
a
|
49
|
+
a
|
37
50
|
end
|
38
51
|
|
39
52
|
private
|
40
53
|
|
54
|
+
# Saves maximum width per column into the +@header+ array.
|
41
55
|
def update_widths!
|
42
56
|
@header.size.times do |i|
|
43
57
|
( [ @header ] + @rows ).each do |row|
|
data/lib/virtop.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: virtop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- henning mueller
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-07-16 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -44,12 +44,12 @@ extra_rdoc_files: []
|
|
44
44
|
|
45
45
|
files:
|
46
46
|
- bin/virtop
|
47
|
-
- lib/virtop.rb
|
48
|
-
- lib/virtop/letsexit.rb
|
49
|
-
- lib/virtop/table.rb
|
50
47
|
- lib/libvirt/connect.rb
|
51
48
|
- lib/libvirt/domain.rb
|
52
|
-
-
|
49
|
+
- lib/virtop.rb
|
50
|
+
- lib/virtop/table.rb
|
51
|
+
- lib/virtop/letsexit.rb
|
52
|
+
- README.rdoc
|
53
53
|
has_rdoc: true
|
54
54
|
homepage:
|
55
55
|
licenses: []
|
data/README
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
== Installation ==
|
2
|
-
|
3
|
-
Add gems.github.com as a source for gems and install elliottcable-ncurses from
|
4
|
-
this mirror, because there is no version on rubygems.org which works with ruby
|
5
|
-
1.9.
|
6
|
-
|
7
|
-
* gem sources -a http://gems.github.com
|
8
|
-
* gem install elliottcable-ncurses
|
9
|
-
|
10
|
-
Build the virtop gem and install it. Do not build ri and rdoc documentation for
|
11
|
-
this would throw nasty errors.
|
12
|
-
|
13
|
-
* gem build virtop.gemspec
|
14
|
-
* gem install --no-ri --no-rdoc virtop-*.gem
|
15
|
-
|