[pve-devel] [PATCH] qemuserver : vm_status : add extended stats (disks, nics, memory) V2

Dietmar Maurer dietmar at proxmox.com
Tue Jun 16 12:11:21 CEST 2015


comments inline

> On June 16, 2015 at 11:18 AM Alexandre Derumier <aderumier at odiso.com> wrote:
> 
> 
> Add extended stats results for each nics,disks and memory on full stats mode
> only.
> 
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
>  PVE/QemuServer.pm | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index e89308c..892b051 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -2347,6 +2347,12 @@ sub vmstatus {
>  
>  	$d->{netout} += $netdev->{$dev}->{receive};
>  	$d->{netin} += $netdev->{$dev}->{transmit};
> +
> +	if ($full) {
> +	    $res->{$vmid}->{nics}->{$dev}->{netout} = $netdev->{$dev}->{receive};
> +	    $res->{$vmid}->{nics}->{$dev}->{netin} = $netdev->{$dev}->{transmit};
> +	}
> +

Can't we use $d, like:

$d->{nics}->{$dev}->{netout} = $netdev->{$dev}->{receive};
$d->{nics}->{$dev}->{netin} = $netdev->{$dev}->{transmit};

>      }
>  
>      my $ctime = gettimeofday;
> @@ -2415,6 +2421,7 @@ sub vmstatus {
>  	    $d->{freemem} = $info->{free_mem};
>  	}
>  
> +	$d->{ballooninfo} = $info;
>      };
>  
>      my $blockstatscb = sub {
> @@ -2422,9 +2429,24 @@ sub vmstatus {
>  	my $data = $resp->{'return'} || [];
>  	my $totalrdbytes = 0;
>  	my $totalwrbytes = 0;
> +
> +	my $cfspath = cfs_config_path($vmid);
> +	my $conf = PVE::Cluster::cfs_read_file($cfspath);
> +	my $storecfg = PVE::Storage::config();
> +

Can we do above outside the callback (only once)? Or can we avoid that?

>  	for my $blockstat (@$data) {
>  	    $totalrdbytes = $totalrdbytes + $blockstat->{stats}->{rd_bytes};
>  	    $totalwrbytes = $totalwrbytes + $blockstat->{stats}->{wr_bytes};
> +
> +	    $blockstat->{device} =~ s/drive-//;
> +	    my $drive = parse_drive($blockstat->{device},
> $conf->{$blockstat->{device}});
> +	    next if PVE::QemuServer::drive_is_cdrom($drive);

why do you want to skip CDROMS?

> +	    my $volid = $drive->{file};
> +	    my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid);
> +	    my ($vtype, $name, $owner) = PVE::Storage::parse_volname($storecfg,
> $volid);
> +
> +	    $res->{$vmid}->{blockstat}->{$storeid}->{$name} = $blockstat->{stats};
> +

I never wanted to have such complex code here. 

$blockstat->{device} =~ s/drive-//;
$res->{$vmid}->{blockstat}->{$blockstat->{device}} = $blockstat->{stats};

would be much simpler?

 




More information about the pve-devel mailing list