diff --git a/PVE/API2/Cluster.pm b/PVE/API2/Cluster.pm index c34bb971..2a8b4567 100644 --- a/PVE/API2/Cluster.pm +++ b/PVE/API2/Cluster.pm @@ -206,26 +206,7 @@ __PACKAGE__->register_method({ if (!$param->{type} || $param->{type} eq 'node') { foreach my $node (@$nodelist) { - my $entry = { - id => "node/$node", - node => $node, - type => "node", - }; - if (my $d = $rrd->{"pve2-node/$node"}) { - - if (!$members || # no cluster - ($members->{$node} && $members->{$node}->{online})) { - $entry->{uptime} = ($d->[0] || 0) + 0; - $entry->{cpu} = ($d->[4] || 0) + 0; - $entry->{mem} = ($d->[7] || 0) + 0; - $entry->{disk} = ($d->[11] || 0) + 0; - } - - $entry->{maxcpu} = ($d->[3] || 0) + 0; - $entry->{maxmem} = ($d->[6] || 0) + 0; - $entry->{maxdisk} = ($d->[10] || 0) + 0; - } - + my $entry = PVE::API2Tools::extract_node_stats($node, $members, $rrd); push @$res, $entry; } } @@ -357,7 +338,7 @@ __PACKAGE__->register_method({ }}); my $parse_clustat = sub { - my ($clinfo, $members, $nodename, $raw) = @_; + my ($clinfo, $members, $rrd, $nodename, $raw) = @_; my $createNode = sub { my ($expat, $tag, %attrib) = @_; @@ -390,6 +371,11 @@ my $parse_clustat = sub { $node->{ip} = $ip; } } + + if (my $entry = PVE::API2Tools::extract_node_stats($name, $members, $rrd)) { + $node->{level} = $entry->{level} || ''; + } + } elsif ($tag eq 'group') { my $name = $node->{name}; return if !$name; # just to be sure @@ -467,15 +453,20 @@ __PACKAGE__->register_method({ my $clinfo = PVE::Cluster::get_clinfo(); my $members = PVE::Cluster::get_members(); my $nodename = PVE::INotify::nodename(); + my $rrd = PVE::Cluster::rrd_dump(); if ($members) { my $cmd = ['clustat', '-x']; my $out = ''; PVE::Tools::run_command($cmd, outfunc => sub { $out .= shift; }); - return &$parse_clustat($clinfo, $members, $nodename, $out); + return &$parse_clustat($clinfo, $members, $rrd, $nodename, $out); } else { # fake entry for local node if no cluster defined my $pmxcfs = ($clinfo && $clinfo->{version}) ? 1 : 0; # pmxcfs online ? + + my $subinfo = PVE::INotify::read_file('subscription'); + my $sublevel = $subinfo->{level} || ''; + return [{ type => 'node', id => "node/$nodename", @@ -483,7 +474,8 @@ __PACKAGE__->register_method({ 'local' => 1, nodeid => 0, pmxcfs => $pmxcfs, - state => 1 + state => 1, + level => $sublevel, }]; } }}); diff --git a/PVE/API2/Subscription.pm b/PVE/API2/Subscription.pm index f31c771d..52e66d3b 100644 --- a/PVE/API2/Subscription.pm +++ b/PVE/API2/Subscription.pm @@ -57,7 +57,7 @@ sub parse_key { my ($key) = @_; if ($key =~ m/^pve([124])([cbsp])-[0-9a-f]{10}$/) { - return wantarray ? ($1, $2) : $1; # number of sockets, type + return wantarray ? ($1, $2) : $1; # number of sockets, level } return undef; } @@ -110,7 +110,8 @@ sub read_etc_pve_subscription { my $key = <$fh>; # first line is the key chomp $key; - die "Wrong subscription key format\n" if !parse_key($key); + my ($sockets, $level) = parse_key($key); + die "Wrong subscription key format\n" if !$sockets; my $csum = <$fh>; # second line is a checksum @@ -153,6 +154,10 @@ sub read_etc_pve_subscription { } } + if ($info->{status} eq 'Active') { + $info->{level} = $level; + } + return $info; } diff --git a/PVE/API2Tools.pm b/PVE/API2Tools.pm index a724395a..e7f29e2a 100644 --- a/PVE/API2Tools.pm +++ b/PVE/API2Tools.pm @@ -3,6 +3,32 @@ package PVE::API2Tools; use strict; use warnings; +sub extract_node_stats { + my ($node, $members, $rrd) = @_; + + my $entry = { + id => "node/$node", + node => $node, + type => "node", + }; + + if (my $d = $rrd->{"pve2-node/$node"}) { + + if (!$members || # no cluster + ($members->{$node} && $members->{$node}->{online})) { + $entry->{uptime} = ($d->[0] || 0) + 0; + $entry->{cpu} = ($d->[5] || 0) + 0; + $entry->{mem} = ($d->[8] || 0) + 0; + $entry->{disk} = ($d->[12] || 0) + 0; + } + $entry->{level} = $d->[1]; + $entry->{maxcpu} = ($d->[4] || 0) + 0; + $entry->{maxmem} = ($d->[7] || 0) + 0; + $entry->{maxdisk} = ($d->[11] || 0) + 0; + } + + return $entry; +} sub extract_vm_stats { my ($vmid, $data, $rrd) = @_; diff --git a/bin/pvestatd b/bin/pvestatd index 0dbade45..7898b44c 100755 --- a/bin/pvestatd +++ b/bin/pvestatd @@ -15,6 +15,7 @@ use PVE::Storage; use PVE::QemuServer; use PVE::OpenVZ; use PVE::RPCEnvironment; +use PVE::API2::Subscription; $SIG{'__WARN__'} = sub { my $err = $@; @@ -144,6 +145,9 @@ sub update_node_status { my $maxcpu = $cpuinfo->{cpus}; + my $subinfo = PVE::INotify::read_file('subscription'); + my $sublevel = $subinfo->{level} || ''; + # traffic from/to physical interface cards my $netin = 0; my $netout = 0; @@ -162,7 +166,7 @@ sub update_node_status { # everything not free is considered to be used my $dused = $dinfo->{blocks} - $dinfo->{bfree}; - my $data = "$uptime:$ctime:$avg1:$maxcpu:$stat->{cpu}:$stat->{wait}:" . + my $data = "$uptime:$sublevel:$ctime:$avg1:$maxcpu:$stat->{cpu}:$stat->{wait}:" . "$meminfo->{memtotal}:$meminfo->{memused}:" . "$meminfo->{swaptotal}:$meminfo->{swapused}:" . "$dinfo->{blocks}:$dused:$netin:$netout"; diff --git a/debian/changelog.Debian b/debian/changelog.Debian index f1d73fc4..4c3d7666 100644 --- a/debian/changelog.Debian +++ b/debian/changelog.Debian @@ -1,3 +1,9 @@ +pve-manager (2.0-46) unstable; urgency=low + + * code cleanups + + -- Proxmox Support Team Mon, 26 Mar 2012 10:38:33 +0200 + pve-manager (2.0-45) unstable; urgency=low * fix bug 124: correctly return maxfiles flag diff --git a/defines.mk b/defines.mk index f2d76aef..8ab5bb84 100644 --- a/defines.mk +++ b/defines.mk @@ -2,7 +2,7 @@ RELEASE=2.0 VERSION=2.0 PACKAGE=pve-manager -PACKAGERELEASE=45 +PACKAGERELEASE=46 BINDIR=${DESTDIR}/usr/bin PERLLIBDIR=${DESTDIR}/usr/share/perl5 diff --git a/www/manager/Utils.js b/www/manager/Utils.js index a729b156..542f1ab4 100644 --- a/www/manager/Utils.js +++ b/www/manager/Utils.js @@ -100,6 +100,13 @@ Ext.define('PVE.Utils', { statics: { 7: "debug" }, + support_level_hash: { + 'c': gettext('Community'), + 'b': gettext('Basic'), + 's': gettext('Standard'), + 'p': gettext('Premium') + }, + kvm_ostypes: { other: gettext('Other OS types'), wxp: 'Microsoft Windows XP/2003', @@ -723,6 +730,10 @@ Ext.define('PVE.Utils', { statics: { return PVE.Utils.format_duration_long(uptime); }, + render_support_level: function(value, metaData, record) { + return PVE.Utils.support_level_hash[value] || '-'; + }, + render_upid: function(value, metaData, record) { var type = record.data.type; var id = record.data.id; diff --git a/www/manager/dc/Summary.js b/www/manager/dc/Summary.js index 64773250..192a05c2 100644 --- a/www/manager/dc/Summary.js +++ b/www/manager/dc/Summary.js @@ -45,6 +45,13 @@ Ext.define('PVE.dc.NodeView', { dataIndex: 'state', renderer: PVE.Utils.format_boolean }, + { + header: gettext('Support'), + width: 100, + sortable: true, + dataIndex: 'level', + renderer: PVE.Utils.render_support_level + }, { header: gettext('Estranged'), width: 100, @@ -94,7 +101,7 @@ Ext.define('PVE.dc.NodeView', { Ext.define('pve-dc-nodes', { extend: 'Ext.data.Model', fields: [ 'id', 'type', 'name', 'state', 'nodeid', 'ip', - 'pmxcfs', 'rgmanager', 'estranged' ], + 'pmxcfs', 'rgmanager', 'estranged', 'level' ], idProperty: 'id' });