[pve-devel] r5683 - in pve-manager/pve2: bin lib/PVE/API2
svn-commits at proxmox.com
svn-commits at proxmox.com
Fri Mar 11 08:04:24 CET 2011
Author: dietmar
Date: 2011-03-11 08:04:24 +0100 (Fri, 11 Mar 2011)
New Revision: 5683
Modified:
pve-manager/pve2/bin/pvestatd
pve-manager/pve2/lib/PVE/API2/Cluster.pm
pve-manager/pve2/lib/PVE/API2/Nodes.pm
Log:
use RRD data
Modified: pve-manager/pve2/bin/pvestatd
===================================================================
--- pve-manager/pve2/bin/pvestatd 2011-03-11 06:49:59 UTC (rev 5682)
+++ pve-manager/pve2/bin/pvestatd 2011-03-11 07:04:24 UTC (rev 5683)
@@ -128,13 +128,21 @@
$reload_config = 1;
};
-sub update_host_status {
+sub update_node_status {
my ($avg1, $avg5, $avg15) = PVE::ProcFSTools::read_loadavg();
my $stat = PVE::ProcFSTools::read_proc_stat();
my $netdev = PVE::ProcFSTools::read_proc_net_dev();
+
+ my ($uptime) = PVE::ProcFSTools::read_proc_uptime();
+
+ my $cpuinfo = PVE::ProcFSTools::read_cpuinfo();
+
+ my $maxcpu = $cpuinfo->{cpus};
+
+ # traffic from/to physical interface cards
my $netin = 0;
my $netout = 0;
foreach my $dev (keys %$netdev) {
@@ -152,12 +160,12 @@
# everything not free is considered to be used
my $dused = $dinfo->{blocks} - $dinfo->{bfree};
- my $data = "$ctime:$avg1:$stat->{cpu}:$stat->{wait}:" .
+ my $data = "$uptime:$ctime:$avg1:$maxcpu:$stat->{cpu}:$stat->{wait}:" .
"$meminfo->{memtotal}:$meminfo->{memused}:" .
"$meminfo->{swaptotal}:$meminfo->{swapused}:" .
"$dinfo->{blocks}:$dused:$netin:$netout";
- PVE::Cluster::broadcast_rrd("pve-node/$nodename", $data);
+ PVE::Cluster::broadcast_rrd("pve2-node/$nodename", $data);
}
sub update_qemu_status {
@@ -170,12 +178,12 @@
my $d = $vmstatus->{$vmid};
next if !$d->{pid}; # not running
- my $data = "$ctime:$d->{cpus}:$d->{cpu}:" .
+ my $data = "$d->{uptime}:$d->{name}:$ctime:$d->{cpus}:$d->{cpu}:" .
"$d->{maxmem}:$d->{mem}:" .
"$d->{maxdisk}:$d->{disk}:" .
"$d->{netin}:$d->{netout}";
- PVE::Cluster::broadcast_rrd("pve-vm/$vmid", $data);
+ PVE::Cluster::broadcast_rrd("pve2-vm/$vmid", $data);
}
}
@@ -196,7 +204,7 @@
my $data = "$ctime:$d->{total}:$realused";
- my $key = "pve-storage/${nodename}/$storeid";
+ my $key = "pve2-storage/${nodename}/$storeid";
PVE::Cluster::broadcast_rrd($key, $data);
}
}
@@ -204,10 +212,10 @@
sub update_status {
eval {
- update_host_status();
+ update_node_status();
};
my $err = $@;
- syslog('err', "host status update error: $err") if $err;
+ syslog('err', "node status update error: $err") if $err;
eval {
update_qemu_status();
Modified: pve-manager/pve2/lib/PVE/API2/Cluster.pm
===================================================================
--- pve-manager/pve2/lib/PVE/API2/Cluster.pm 2011-03-11 06:49:59 UTC (rev 5682)
+++ pve-manager/pve2/lib/PVE/API2/Cluster.pm 2011-03-11 07:04:24 UTC (rev 5683)
@@ -116,33 +116,33 @@
my @sids = PVE::Storage::storage_ids ($cfg);
- # fixme: add storage status ('disk', 'maxdisk')
-
+ my $rrd = PVE::Cluster::rrd_dump();
+
my $res = [];
foreach my $storeid (@sids) {
my $scfg = PVE::Storage::storage_config ($cfg, $storeid);
next if !$rpcenv->check($user, "/storage/$storeid", [ 'Datastore.Audit' ]);
- if ($scfg->{shared}) {
- push @$res,{
- name => $storeid,
+ # we create a entry for each node
+ foreach my $nd (@$nodes) {
+ my $node = $nd->{node};
+ # fixme: check if storage is available on this node
+ my $entry = {
+ name => "$storeid ($node)",
storage => $storeid,
+ node => $node,
type => $scfg->{type},
- shared => 1
+ shared => $scfg->{shared},
};
- } else {
- # we create a entry for each node
- foreach my $nd (@$nodes) {
- my $node = $nd->{node};
- push @$res, {
- name => "$storeid ($node)",
- storage => $storeid,
- node => $node,
- type => $scfg->{type},
- shared => 0
- };
+
+ if (my $d = $rrd->{"pve-storage/$node/$storeid"}) {
+ $entry->{maxdisk} = $d->[1];
+ $entry->{disk} = $d->[2];
}
+
+ push @$res, $entry;
+
}
}
@@ -175,34 +175,52 @@
my $user = $rpcenv->get_user();
my $vmlist = PVE::Cluster::get_vmlist();
- my $result = [];
+ my $res = [];
- return $result if !$vmlist;
+ return $res if !$vmlist;
+ my $rrd = PVE::Cluster::rrd_dump();
+
my $idlist = $vmlist->{ids};
- return $result if !$idlist;
+ return $res if !$idlist;
foreach my $vmid (keys %$idlist) {
my $data = $idlist->{$vmid};
next if !$rpcenv->check($user, "/vms/$vmid", [ 'VM.Audit' ]);
- push @$result, {
+ my $entry = {
id => $vmid,
name => "VM $vmid",
node => $data->{node},
type => $data->{type},
- cpu => 0,
- maxcpu => 1,
- mem => 1024*1024*1024*6,
- maxmem => 1024*1024*1024*24,
- disk => 1024*1024*1024*1024*6,
- maxdisk => 1024*1024*1024*1024*32,
- uptime => 2*3600
+# cpu => 0,
+# maxcpu => 1,
+# mem => 1024*1024*1024*6,
+# maxmem => 1024*1024*1024*24,
+# disk => 1024*1024*1024*1024*6,
+# maxdisk => 1024*1024*1024*1024*32,
+# uptime => 2*3600
};
+
+ if (my $d = $rrd->{"pve-vm/$vmid"}) {
+
+ $entry->{uptime} = $d->[0];
+ $entry->{name} = $d->[1];
+
+ $entry->{maxcpu} = $d->[3];
+ $entry->{cpu} = $d->[4];
+ $entry->{maxmem} = $d->[5];
+ $entry->{mem} = $d->[6];
+ $entry->{maxdisk} = $d->[7];
+ $entry->{disk} = $d->[8];
+ }
+
+ push @$res, $entry;
+
}
- return $result;
+ return $res;
}});
1;
Modified: pve-manager/pve2/lib/PVE/API2/Nodes.pm
===================================================================
--- pve-manager/pve2/lib/PVE/API2/Nodes.pm 2011-03-11 06:49:59 UTC (rev 5682)
+++ pve-manager/pve2/lib/PVE/API2/Nodes.pm 2011-03-11 07:04:24 UTC (rev 5683)
@@ -163,6 +163,7 @@
name => 'rrd',
path => 'rrd',
method => 'GET',
+ protected => 1, # fixme: can we avoid that?
permissions => {
path => '/nodes/{node}',
privs => [ 'Sys.Audit' ],
@@ -192,12 +193,13 @@
my $rrddir = "/var/lib/rrdcached/db";
- my $rrd = "$rrddir/pve-nodes/$param->{node}";
+ my $rrd = "$rrddir/pve2-node/$param->{node}";
# fixme: use cache daemon ?
RRDs::graph(
$filename,
+ "--daemon" => "unix:/var/run/rrdcached.sock",
"--imgformat" => "PNG",
"--border" => 0,
"--height" => 200,
@@ -213,6 +215,9 @@
"LINE2:iowaitper#ff0000:io delay",
);
+ my $err = RRDs::error;
+ die "RRD error: $err\n" if $err;
+
return { filename => $filename };
}});
@@ -249,7 +254,7 @@
my ($param) = @_;
my $rrddir = "/var/lib/rrdcached/db";
- my $filename = "$rrddir/pve-nodes/$param->{node}";
+ my $filename = "$rrddir/pve2-node/$param->{node}";
my $setup = {
hour => [ 60, 70 ],
@@ -263,6 +268,8 @@
my $ctime = $reso*int(time()/$reso);
my $req_start = $ctime - $reso*$count;
+ print "TEST $filename\n";
+
my ($start, $step, $names, $data) =
RRDs::fetch($filename, 'AVERAGE',
"-s" => $req_start,
@@ -270,11 +277,12 @@
"-r" => $reso,
"--daemon" => "unix:/var/run/rrdcached.sock");
+ my $err = RRDs::error;
+ die "RRD error: $err\n" if $err;
+
die "got wrong time resolution ($step != $reso)\n"
if $step != $reso;
- my $err = RRDs::error;
- die "RRD error: $err\n" if $err;
my $res = [];
my $fields = scalar(@$names);
@@ -717,35 +725,32 @@
my ($param) = @_;
my $clinfo = PVE::Cluster::get_clinfo();
- my $result = [];
+ my $res = [];
my $nodename = PVE::INotify::nodename();
my $nodelist = $clinfo->{nodelist};
- if (!$nodelist) {
- push @$result, {
- name => $nodename,
- cpu => 0.5,
- maxcpu => 16,
- uptime => 20*3600*24,
- mem => 0,
- maxmem => 10
- };
- return $result;
- }
+ my $rrd = PVE::Cluster::rrd_dump();
- foreach my $node (keys %$nodelist) {
- push @$result, {
- name => $node,
- cpu => 0.1,
- maxcpu => 8,
- uptime => 10*3600*24,
- mem => 0,
- maxmem => 10
- };
+ my @nodes = $nodelist ? (keys %$nodelist) : $nodename;
+
+ foreach my $node (@nodes) {
+ my $entry = { name => $node };
+ if (my $d = $rrd->{"pve2-node/$node"}) {
+
+ $entry->{uptime} = $d->[0];
+ $entry->{maxcpu} = $d->[3];
+ $entry->{cpu} = $d->[4];
+ $entry->{maxmem} = $d->[6];
+ $entry->{mem} = $d->[7];
+ $entry->{maxdisk} = $d->[10];
+ $entry->{disk} = $d->[11];
+ }
+
+ push @$res, $entry;
}
- return $result;
+ return $res;
}});
1;
More information about the pve-devel
mailing list