From 84916eb2d98bc22187b8ee8f39fc4c1cd0aee009 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Mon, 30 Jan 2012 07:09:09 +0100 Subject: [PATCH] render resource pools --- PVE/API2/Cluster.pm | 46 +++++++++++++++++++++++++---- www/css/ext-pve.css | 8 +++++ www/images/Makefile | 1 + www/images/connect_established.png | Bin 0 -> 704 bytes www/manager/data/ResourceStore.js | 9 ++++++ www/manager/tree/ResourceTree.js | 4 +++ 6 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 www/images/connect_established.png diff --git a/PVE/API2/Cluster.pm b/PVE/API2/Cluster.pm index 4430968c..e4a8e836 100644 --- a/PVE/API2/Cluster.pm +++ b/PVE/API2/Cluster.pm @@ -143,7 +143,8 @@ __PACKAGE__->register_method({ my ($param) = @_; my $rpcenv = PVE::RPCEnvironment::get(); - my $user = $rpcenv->get_user(); + my $authuser = $rpcenv->get_user(); + my $usercfg = $rpcenv->{user_cfg}; my $res = []; @@ -155,6 +156,24 @@ __PACKAGE__->register_method({ my $vmlist = PVE::Cluster::get_vmlist() || {}; my $idlist = $vmlist->{ids} || {}; + my $pooldata = {}; + if (!$param->{type} || $param->{type} eq 'pool') { + foreach my $pool (keys %{$usercfg->{pools}}) { + my $d = $usercfg->{pools}->{$pool}; + + next if !$rpcenv->check($authuser, "/pool/$pool", [ 'VM.Audit' ], 1); + + my $entry = { + id => "/pool/$pool", + pool => $pool, + type => 'pool', + }; + + $pooldata->{$pool} = $entry; + + push @$res, $entry; + } + } # we try to generate 'numbers' by using "$X + 0" if (!$param->{type} || $param->{type} eq 'vm') { @@ -162,7 +181,7 @@ __PACKAGE__->register_method({ my $data = $idlist->{$vmid}; - next if !$rpcenv->check($user, "/vms/$vmid", [ 'VM.Audit' ], 1); + next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Audit' ], 1); my $entry = { id => "$data->{type}/$vmid", @@ -182,7 +201,22 @@ __PACKAGE__->register_method({ $entry->{mem} = ($d->[6] || 0) + 0; $entry->{maxdisk} = ($d->[7] || 0) + 0; $entry->{disk} = ($d->[8] || 0) + 0; + + if (my $pool = $usercfg->{vms}->{$vmid}) { + if (my $pe = $pooldata->{$pool}) { + $pe->{uptime} = $entry->{uptime} if !$pe->{uptime} || $entry->{uptime} > $pe->{uptime}; + $pe->{mem} = 0 if !$pe->{mem}; + $pe->{mem} += $entry->{mem}; + $pe->{maxmem} = 0 if !$pe->{maxmem}; + $pe->{maxmem} += $entry->{maxmem}; + $pe->{cpu} = 0 if !$pe->{cpu}; + $pe->{cpu} += $entry->{cpu}; + $pe->{maxcpu} = 0 if !$pe->{maxcpu}; + $pe->{maxcpu} += $entry->{maxcpu}; + } + } } + push @$res, $entry; } @@ -221,7 +255,7 @@ __PACKAGE__->register_method({ foreach my $storeid (@sids) { my $scfg = PVE::Storage::storage_config($cfg, $storeid); - next if !$rpcenv->check($user, "/storage/$storeid", [ 'Datastore.Audit' ], 1); + next if !$rpcenv->check($authuser, "/storage/$storeid", [ 'Datastore.Audit' ], 1); # we create a entry for each node foreach my $node (@$nodelist) { next if !PVE::Storage::storage_check_enabled($cfg, $storeid, $node, 1); @@ -268,7 +302,7 @@ __PACKAGE__->register_method({ my ($param) = @_; my $rpcenv = PVE::RPCEnvironment::get(); - my $user = $rpcenv->get_user(); + my $authuser = $rpcenv->get_user(); my $tlist = PVE::Cluster::get_tasklist(); @@ -276,10 +310,10 @@ __PACKAGE__->register_method({ return $res if !$tlist; - my $all = $rpcenv->check($user, "/", [ 'Sys.Audit' ], 1); + my $all = $rpcenv->check($authuser, "/", [ 'Sys.Audit' ], 1); foreach my $task (@$tlist) { - push @$res, $task if $all || ($task->{user} eq $user); + push @$res, $task if $all || ($task->{user} eq $authuser); } return $res; diff --git a/www/css/ext-pve.css b/www/css/ext-pve.css index e94bdf54..a2507b6f 100644 --- a/www/css/ext-pve.css +++ b/www/css/ext-pve.css @@ -27,6 +27,7 @@ .pve-itype-icon-node, .pve-itype-icon-node-running, .pve-itype-icon-storage, +.pve-itype-icon-pool, .pve-itype-icon-itype { background-repeat: no-repeat; @@ -83,6 +84,13 @@ background-image:url(../images/drive-harddisk.png); } +.pve-itype-icon-pool, +.x-tree-node-pool, +.x-grid-tree-pool-expanded .x-tree-node-pool +{ + background-image:url(../images/connect_established.png); +} + .pve-itype-icon-itype { background-image:url(../ext4/resources/themes/images/default/tree/folder.gif); diff --git a/www/images/Makefile b/www/images/Makefile index 0a705b42..4ea4b026 100644 --- a/www/images/Makefile +++ b/www/images/Makefile @@ -13,6 +13,7 @@ GNOME_IMAGES = \ network.png \ drive-harddisk.png \ network-server.png \ + connect_established.png \ computer.png IMAGES = ${GNOME_IMAGES} \ diff --git a/www/images/connect_established.png b/www/images/connect_established.png new file mode 100644 index 0000000000000000000000000000000000000000..cda578586504996becda827a33a194627dc42f5c GIT binary patch literal 704 zcmV;x0zdtUP)L_t(Ijh&M{Yg9oLhM&1R_vY>zG#{d@AXZ5_ z3xhwvN>CK7L@Xrn2dGUVK_qHGE$mHUAyG)yLQxAN3KsbXf`ygDkSHPxG0FX!Gshx( zH(3aT_*O3m&YAa_Ib&3nQg@lqAW-=*Xz;>+7c) zSBc{oYeUjBAx#sKG$qY8eY4rLb90UHjsZnc*f@?EIz5I03RFyhc)J;_*@ zxk2Fy+c7}IAzlcqrRUg5_SGT|_0;(K{SSjjd#NAn#yQXD4{tHXAWpE`x#Mb;>FFno zo;rZ?t<8OWuyqG(0n0@lCqfVeIC0oLax**o5+|~iV6WUxa=cf-AmXt9!@cl)jE#+T zM7*=k2_k~3$9Yd^Ei26p_IJmapu&$|f61Ne;C}evKE@aqMbYEU1maK+{k^@^s$GN% z)h>%Ggv`TQCLP?v!zVB%$W`QBJAqfv;+IcsEvB};DjnQs&z)gqd8PLH)th=j mckM1u4DD~1`Ff+#5P*Ny5qD2V{+*}*0000