2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-21 19:22:05 +00:00
xcat-core/xCAT-rmc/scripts/logeventtoxcat
2016-07-21 13:27:40 -04:00

110 lines
3.7 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;