From f3464b7167eb20a8dfcfcfb931c0d8d3c2d07373 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 12 Apr 2017 07:42:25 +0200 Subject: [PATCH] PMG::DBTools::cluster_sync_status - new helper --- PMG/DBTools.pm | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/PMG/DBTools.pm b/PMG/DBTools.pm index f6a2a2f..5a06ada 100644 --- a/PMG/DBTools.pm +++ b/PMG/DBTools.pm @@ -7,8 +7,10 @@ use POSIX ":sys_wait_h"; use POSIX ':signal_h'; use DBI; +use PVE::SafeSyslog; use PVE::Tools; +use PMG::Utils; use PMG::RuleDB; our $default_db_name = "Proxmox_ruledb"; @@ -1194,5 +1196,49 @@ sub init_nodedb { die $err if $err; } +sub cluster_sync_status { + my ($cinfo) = @_; + + my $dbh; + + my $minmtime; + + foreach my $ni (values %{$cinfo->{ids}}) { + next if $cinfo->{local}->{cid} == $ni->{cid}; # skip local CID + $minmtime->{$ni->{cid}} = 0; + } + + eval { + $dbh = open_ruledb(); + + my $sth = $dbh->prepare( + "SELECT cid, MIN (ivalue) as minmtime FROM ClusterInfo " . + "WHERE name = 'lastsync' AND ivalue > 0 " . + "GROUP BY cid"); + + $sth->execute(); + + while (my $info = $sth->fetchrow_hashref()) { + foreach my $ni (values %{$cinfo->{ids}}) { + next if $cinfo->{local}->{cid} == $ni->{cid}; # skip local CID + if ($ni->{cid} == $info->{cid}) { # node exists + $minmtime->{$ni->{cid}} = $info->{minmtime}; + } + } + } + + $sth->finish (); + }; + my $err = $@; + + $dbh->disconnect() if $dbh; + + if ($err) { + syslog('err', PMG::Utils::msgquote($err)); + } + + return $minmtime; +} + 1; -- 2.39.2