mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@13581 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env perl
 | 
						|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
 | 
						|
# This script is used by LogEventToxCATDatabase event response to put RMC events into 
 | 
						|
# the xCAT evnetlog table.  It handles both batch and non-batching events.
 | 
						|
 | 
						|
BEGIN
 | 
						|
{
 | 
						|
  $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | 
						|
}
 | 
						|
use lib "$::XCATROOT/lib/perl";
 | 
						|
use strict;
 | 
						|
use Getopt::Std;
 | 
						|
use POSIX qw(strftime);
 | 
						|
use xCAT::Utils;
 | 
						|
use xCAT::TableUtils;
 | 
						|
use xCAT::MsgUtils;
 | 
						|
use IO::File;
 | 
						|
 | 
						|
my $batch=0;
 | 
						|
if (exists($ENV{ERRM_COND_BATCH})) { $batch=$ENV{ERRM_COND_BATCH}; }
 | 
						|
my @a=();
 | 
						|
my $condname=$ENV{ERRM_COND_NAME};
 | 
						|
my $respname=$ENV{ERRM_ER_NAME};
 | 
						|
 | 
						|
if (!$batch) { #handle single event
 | 
						|
    my $time=$ENV{ERRM_TIME};
 | 
						|
    my $nodenamelist=$ENV{ERRM_NODE_NAMELIST};
 | 
						|
    $nodenamelist =~ s/\{(.*)\}/$1/;
 | 
						|
    
 | 
						|
    my $event={
 | 
						|
	eventtype => $ENV{ERRM_TYPE}, 
 | 
						|
	monitor => $ENV{ERRM_COND_NAME}, 
 | 
						|
	monnode => $ENV{ERRM_NODE_NAME},
 | 
						|
	node => $nodenamelist,
 | 
						|
	application => 'RMC',
 | 
						|
	component => $ENV{ERRM_RSRC_CLASS_PNAME},
 | 
						|
	id => $ENV{ERRM_RSRC_NAME} . "," . $ENV{ERRM_ATTR_PNAME},
 | 
						|
	severity => $ENV{ERRM_COND_SEVERITY},
 | 
						|
	message => '',
 | 
						|
	rawdata => $ENV{ERRM_ATTR_PNAME} . "=" . $ENV{ERRM_VALUE},
 | 
						|
    }; 
 | 
						|
    
 | 
						|
    push(@a, $event);
 | 
						|
} else { #handle event batching
 | 
						|
    if ($ENV{ERRM_COND_BATCH_NUM} > 0) {
 | 
						|
        #check if event detail file exist
 | 
						|
        if (!exists($ENV{ERRM_EVENT_DETAIL_FILE})){
 | 
						|
	     xCAT::MsgUtils->message('S', "logeventtoxcat: no event detail file specified in the response $respname for condition $condname.\n");
 | 
						|
             exit (1);
 | 
						|
	}
 | 
						|
	
 | 
						|
	my $filename=$ENV{ERRM_EVENT_DETAIL_FILE};
 | 
						|
	if (! -f $filename) {
 | 
						|
	    xCAT::MsgUtils->message('S', "logeventtoxcat: cannot find event detail file $filename in response $respname for condition $condname.\n");
 | 
						|
            exit (1);
 | 
						|
	}
 | 
						|
 | 
						|
	open(FILE1, "<$filename");
 | 
						|
        readline(FILE1);#skip first 2 lines
 | 
						|
        readline(FILE1);
 | 
						|
	my $line1=readline(FILE1);
 | 
						|
	my @aTemp=split(/=/, $line1);
 | 
						|
	my $num_events=$aTemp[1];
 | 
						|
	close(FILE1);
 | 
						|
 | 
						|
	my $count;
 | 
						|
	for ($count = 1; $count <= $num_events; $count++) {
 | 
						|
	    my $content=`sed -n "/Event $count:/,/ERRM_COND_BATCH/ p" $filename`;
 | 
						|
	    
 | 
						|
	    my @content_array=split(/\n/, $content);
 | 
						|
	    pop(@content_array);  #get rid of last line
 | 
						|
	    shift(@content_array); #get rid of firt line
 | 
						|
    
 | 
						|
	    my %content_hash=();
 | 
						|
	    foreach(@content_array) {
 | 
						|
                /([^\=]+)\=(.*)/;
 | 
						|
		$content_hash{$1}=$2;
 | 
						|
	    }    
 | 
						|
 | 
						|
	    my $time=$content_hash{ERRM_TIME};
 | 
						|
	    my $nodenamelist=$content_hash{ERRM_NODE_NAMELIST};
 | 
						|
	    $nodenamelist =~ s/\{(.*)\}/$1/;
 | 
						|
	    my $event={
 | 
						|
		eventtype => $content_hash{ERRM_TYPE}, 
 | 
						|
		monitor => $content_hash{ERRM_COND_NAME}, 
 | 
						|
		monnode => $content_hash{ERRM_NODE_NAME},
 | 
						|
		node => $nodenamelist,
 | 
						|
		application => 'RMC',
 | 
						|
		component => $content_hash{ERRM_RSRC_CLASS_PNAME},
 | 
						|
		id => $content_hash{ERRM_RSRC_NAME} . "," . $content_hash{ERRM_ATTR_PNAME},
 | 
						|
		severity => $content_hash{ERRM_COND_SEVERITY},
 | 
						|
		message => '',
 | 
						|
		rawdata => $content_hash{ERRM_ATTR_PNAME} . "=" . $content_hash{ERRM_VALUE},
 | 
						|
	    }; 
 | 
						|
	    push(@a, $event);
 | 
						|
	}   
 | 
						|
    }
 | 
						|
}    
 | 
						|
 | 
						|
my ($rc, $msg)=xCAT::TableUtils->logEventsToDatabase(\@a);
 | 
						|
if ($rc) {
 | 
						|
   xCAT::MsgUtils->message('S', "logeventtoxcat:$msg. The condition is $condname. The response is $respname.\n");
 | 
						|
}
 | 
						|
 | 
						|
exit $rc;
 | 
						|
 | 
						|
 |