mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-29 02:15:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.7 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;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |