From 72eb5b9fcb40df9b5e192f73bb4c070a268f90b3 Mon Sep 17 00:00:00 2001 From: Stefan Priebe Date: Fri, 19 Apr 2013 08:38:02 +0200 Subject: [PATCH] implement node netstat call to get current tap network counters Changes since V2: - swap in / out / transmit / receive again Changes since V1: - new return format (use an arrayref instead of a hash to be JS compatible) - swap in / out / transmit / receive Signed-off-by: Stefan Priebe --- PVE/API2/Nodes.pm | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm index e1db6ee76..44c39134b 100644 --- a/PVE/API2/Nodes.pm +++ b/PVE/API2/Nodes.pm @@ -124,6 +124,7 @@ __PACKAGE__->register_method ({ { name => 'aplinfo' }, { name => 'startall' }, { name => 'stopall' }, + { name => 'netstat' }, ]; return $result; @@ -273,6 +274,53 @@ __PACKAGE__->register_method({ return $res; }}); +__PACKAGE__->register_method({ + name => 'netstat', + path => 'netstat', + method => 'GET', + permissions => { + check => ['perm', '/nodes/{node}', [ 'Sys.Audit' ]], + }, + description => "Read tap/vm network device interface counters", + proxyto => 'node', + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + }, + }, + returns => { + type => "array", + items => { + type => "object", + properties => {}, + }, + }, + code => sub { + my ($param) = @_; + + my $res = [ ]; + + my $netdev = PVE::ProcFSTools::read_proc_net_dev(); + foreach my $dev (keys %$netdev) { + next if $dev !~ m/^tap([1-9]\d*)i(\d+)$/; + my $vmid = $1; + my $netid = $2; + + push( + @$res, + { + vmid => $vmid, + dev => "net$netid", + in => $netdev->{$dev}->{transmit}, + out => $netdev->{$dev}->{receive}, + } + ); + } + + return $res; + }}); + __PACKAGE__->register_method({ name => 'node_cmd', path => 'status',