#!/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;