mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-07-27 11:46:44 +00:00
pvestatd: update status of LXC containers
This commit is contained in:
parent
989b774393
commit
57bbb7ef19
62
bin/pvestatd
62
bin/pvestatd
@ -13,6 +13,7 @@ use PVE::INotify;
|
|||||||
use PVE::Cluster qw(cfs_read_file);
|
use PVE::Cluster qw(cfs_read_file);
|
||||||
use PVE::Storage;
|
use PVE::Storage;
|
||||||
use PVE::QemuServer;
|
use PVE::QemuServer;
|
||||||
|
use PVE::LXC;
|
||||||
use PVE::RPCEnvironment;
|
use PVE::RPCEnvironment;
|
||||||
use PVE::API2::Subscription;
|
use PVE::API2::Subscription;
|
||||||
use PVE::AutoBalloon;
|
use PVE::AutoBalloon;
|
||||||
@ -175,30 +176,43 @@ sub update_qemu_status {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub find_vzctl_console_pids {
|
sub remove_stale_lxc_consoles {
|
||||||
|
|
||||||
my $res = {};
|
my $vmstatus = PVE::LXC::vmstatus();
|
||||||
|
my $pidhash = PVE::LXC::find_lxc_console_pids();
|
||||||
|
|
||||||
dir_glob_foreach('/proc', '\d+', sub {
|
foreach my $vmid (keys %$pidhash) {
|
||||||
my ($pid) = @_;
|
next if defined($vmstatus->{$vmid});
|
||||||
|
syslog('info', "remove stale lxc-console for CT $vmid");
|
||||||
|
foreach my $pid (@{$pidhash->{$vmid}}) {
|
||||||
|
kill(9, $pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
my $cmdline = file_read_firstline("/proc/$pid/cmdline");
|
sub update_lxc_status {
|
||||||
return if !$cmdline;
|
|
||||||
|
|
||||||
my @args = split(/\0/, $cmdline);
|
my $ctime = time();
|
||||||
|
|
||||||
# serach for vzctl console <vmid>
|
my $vmstatus = PVE::LXC::vmstatus();
|
||||||
return if scalar(@args) != 3;
|
|
||||||
return if $args[1] ne 'console';
|
|
||||||
return if $args[2] !~ m/^\d+$/;
|
|
||||||
return if $args[0] !~ m|^(/usr/sbin/)?vzctl$|;
|
|
||||||
|
|
||||||
my $vmid = $args[2];
|
|
||||||
|
|
||||||
push @{$res->{$vmid}}, $pid;
|
|
||||||
});
|
|
||||||
|
|
||||||
return $res;
|
foreach my $vmid (keys %$vmstatus) {
|
||||||
|
my $d = $vmstatus->{$vmid};
|
||||||
|
my $data;
|
||||||
|
if ($d->{status} eq 'running') { # running
|
||||||
|
$data = "$d->{uptime}:$d->{name}:$d->{status}:0:$ctime:$d->{cpus}:$d->{cpu}:" .
|
||||||
|
"$d->{maxmem}:$d->{mem}:" .
|
||||||
|
"$d->{maxdisk}:$d->{disk}:" .
|
||||||
|
"$d->{netin}:$d->{netout}:" .
|
||||||
|
"$d->{diskread}:$d->{diskwrite}";
|
||||||
|
} else {
|
||||||
|
$data = "0:$d->{name}:$d->{status}:0:$ctime:$d->{cpus}::" .
|
||||||
|
"$d->{maxmem}::" .
|
||||||
|
"$d->{maxdisk}:$d->{disk}:" .
|
||||||
|
":::";
|
||||||
|
}
|
||||||
|
PVE::Cluster::broadcast_rrd("pve2.3-vm/$vmid", $data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub update_storage_status {
|
sub update_storage_status {
|
||||||
@ -247,11 +261,23 @@ sub update_status {
|
|||||||
$err = $@;
|
$err = $@;
|
||||||
syslog('err', "qemu status update error: $err") if $err;
|
syslog('err', "qemu status update error: $err") if $err;
|
||||||
|
|
||||||
|
eval {
|
||||||
|
update_lxc_status();
|
||||||
|
};
|
||||||
|
$err = $@;
|
||||||
|
syslog('err', "lxc status update error: $err") if $err;
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
update_storage_status();
|
update_storage_status();
|
||||||
};
|
};
|
||||||
$err = $@;
|
$err = $@;
|
||||||
syslog('err', "storage status update error: $err") if $err;
|
syslog('err', "storage status update error: $err") if $err;
|
||||||
|
|
||||||
|
eval {
|
||||||
|
remove_stale_lxc_consoles();
|
||||||
|
};
|
||||||
|
$err = $@;
|
||||||
|
syslog('err', "lxc console cleanup error: $err") if $err;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $next_update = 0;
|
my $next_update = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user