xcat-core/xCAT-server/sbin/xcatnodemon
2012-09-12 15:05:57 +00:00

72 lines
2.6 KiB
Perl
Executable File

#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
BEGIN
{
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
}
use lib "$::XCATROOT/lib/perl";
use xCAT::GlobalDef;
use xCAT::Table;
use xCAT::NetworkUtils;
use xCAT_monitoring::xcatmon;
#################################################################
# This script is used as a cron job by the xCAT monitoring plug-in
# to monitor the node status. To activate it, simply do
# chtab pname=xCAT monitoring.nodestatmon=Y
##################################################################
#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
#printf "%2d-%02d-%04d %02d:%02d:%02d: xcatnodemon started.\n", $mon+1,$mday,$year+1900,$hour,$min,$sec;
#get saved node status from the nodelist table
my %nodes_status_old=xCAT_monitoring::xcatmon::getMonNodesStatus();
#get a list of nodes
my $tmp_node_active=$nodes_status_old{$::STATUS_ACTIVE};
my $tmp_node_inactive=$nodes_status_old{$::STATUS_INACTIVE};
my $tmp_node_unknown=$nodes_status_old{unknown};
#print "active nodes: @$tmp_node_active\n";
#print "inactive nodes: @$tmp_node_inactive\n";
#print "unknown nodes: @$tmp_node_unknown\n";
#get current node status
my %nodes_status_new1=();
if ($tmp_node_active) { %nodes_status_new1=xCAT::NetworkUtils->pingNodeStatus(@$tmp_node_active);}
my %nodes_status_new2=();
if ($tmp_node_inactive) {%nodes_status_new2=xCAT::NetworkUtils->pingNodeStatus(@$tmp_node_inactive);}
my %nodes_status_new3=();
if ($tmp_node_unknown) { %nodes_status_new3=xCAT::NetworkUtils->pingNodeStatus(@$tmp_node_unknown);}
my $changed1=$nodes_status_new1{$::STATUS_INACTIVE};
my $changed2=$nodes_status_new2{$::STATUS_ACTIVE};
my $changed3=$nodes_status_new3{$::STATUS_INACTIVE};
my $changed4=$nodes_status_new3{$::STATUS_ACTIVE};
my @changed_active=(@$changed2, @$changed4);
my @changed_inactive=(@$changed1, @$changed3);
#print " switch to active: @changed_active\n";
#print " switch to inactive: @changed_inactive\n";
my %node_status=();
if (@changed_active>0) {
$node_status{$::STATUS_ACTIVE}=\@changed_active;
}
if (@changed_inactive>0) {
$node_status{$::STATUS_INACTIVE}=\@changed_inactive;
}
#only set the node status for the changed ones
if (keys(%node_status) > 0) {
#the second parameter means ignore checking. This is because the check is
#done getMonNodesStatus() call
xCAT_monitoring::xcatmon::setNodeStatusAttributes(\%node_status, 1);
}
#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
#printf "%2d-%02d-%04d %02d:%02d:%02d: xcatnodemon finished.\n\n", $mon+1,$mday,$year+1900,$hour,$min,$sec;