mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-24 20:52:08 +00:00
127 lines
4.3 KiB
Perl
Executable File
127 lines
4.3 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 LogEventToTealEventLog response to put RMC events into
|
|
# the TEAL's x_tealeventlog 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;
|
|
use TEAL::Semaphore;
|
|
use TEAL::event_id;
|
|
|
|
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};
|
|
my $eventid = $TEAL::event_id::tabeventid{$condname};
|
|
|
|
if (!$batch) { #handle single event
|
|
my $time = $ENV{ERRM_TIME};
|
|
my $nodenamelist = $ENV{ERRM_NODE_NAMELIST};
|
|
$nodenamelist =~ s/\{(.*)\}/$1/;
|
|
|
|
my $event = {
|
|
event_id => $eventid,
|
|
time_occurred => convertTime($time),
|
|
src_comp => $ENV{ERRM_RSRC_CLASS_PNAME},
|
|
src_loc_type => "A",
|
|
src_loc => "$nodenamelist##" . $ENV{ERRM_RSRC_NAME},
|
|
rpt_comp => 'IBM.Condition',
|
|
rpt_loc_type => "A",
|
|
rpt_loc => $ENV{ERRM_NODE_NAME} . "##" . $ENV{ERRM_COND_NAME},
|
|
raw_data_fmt => "0",
|
|
raw_data => $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', "logeventtoteal: 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', "logeventtoteal: 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 = {
|
|
event_id => $eventid,
|
|
time_occurred => convertTime($time),
|
|
src_comp => $content_hash{ERRM_RSRC_CLASS_PNAME},
|
|
src_loc_type => "A",
|
|
src_loc => $nodenamelist . "##" . $content_hash{ERRM_RSRC_NAME},
|
|
rpt_comp => "IBM.Condition",
|
|
rpt_loc_type => "A",
|
|
rpt_loc => $content_hash{ERRM_NODE_NAME} . "##" . $content_hash{ERRM_COND_NAME},
|
|
raw_data_fmt => "0",
|
|
raw_data => $content_hash{ERRM_ATTR_PNAME} . "=" . $content_hash{ERRM_VALUE},
|
|
};
|
|
push(@a, $event);
|
|
}
|
|
}
|
|
}
|
|
|
|
my ($rc, $msg) = xCAT::TableUtils->logEventsToTealDatabase(\@a);
|
|
if ($rc) {
|
|
xCAT::MsgUtils->message('S', "logeventtoteal:$msg. The condition is $condname. The response is $respname.\n");
|
|
} else {
|
|
my $s = TEAL::Semaphore->new();
|
|
$s->post()
|
|
}
|
|
|
|
# convert time string that can be used for timestamp datatype for db
|
|
sub convertTime {
|
|
my ($seconds, $micro) = split(/\,/, $_[0]);
|
|
|
|
#return strftime("%A %D %T", localtime($seconds));
|
|
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($seconds);
|
|
my $result = sprintf("%4d-%02d-%02d %02d:%02d:%02d.%06d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec, $micro);
|
|
return $result;
|
|
}
|
|
|
|
|
|
exit $rc;
|
|
|
|
|