sub debugLogFunctionNameLineNum {
#debugLogFunctionNameLineNum((caller(0))[2],(caller(1))[3], @_);
my ($callerline, $caller, @input) = @_;
my $input_msg = "";
for (my $i = 0; $i < @input; $i++) {
$input_msg .= "$i=>$input[$i]";
if ($i < $#input) {
$input_msg .= ", ";
}
}
my ($package, $filename, $line) = caller;
unless ($caller) {
$caller = $filename;
}
if ($caller =~ m/eval/) {
$caller = "Tk call";
$callerline = "Unknown";
} else {
if ($callerline =~ m/::(.+)/) {
$callerline = $1;
}
}
my $FunctionName = (caller(1))[3];
if (!$FunctionName) {
$FunctionName = "Main";
}
if ($FunctionName =~ m/::(.+)/) {
$FunctionName = $1;
}
my $time = sprintf("%s %s %s", (split(" ", localtime))[1..3]);
#do sprintf left align truncate until sprintf supports
if ($files{log}{fileNameLen} =~ m/-\d+\.(\d+)/) {
$filename = substr($filename, 0, $1);
}
if ($files{log}{funNameLen} =~ m/-\d+\.(\d+)/) {
$FunctionName = substr($FunctionName, 0, $1);
}
my $header = sprintf("%*s, %*s, %*s, %*s:", $files{log}{timeLen},
+$time, $files{log}{fileNameLen}, $filename, $files{log}{funNameLen},
+$FunctionName, $files{log}{lineNumLen}, $line);
#print "$header Called from [$caller] at [$callerline] with option
+s [$input_msg]\n";
$writelog->down();
print $LOGFH "$header $input_msg\n";
$writelog->up();
}
sub logLine {
my ($text) = @_;
chomp($text);
my ($package, $filename, $line) = caller;
my $FunctionName = (caller(1))[3];
if (!$FunctionName) {
$FunctionName = "Main";
}
if ($FunctionName =~ m/::(.+)/) {
$FunctionName = $1;
}
my $time = sprintf("%s %s %s", (split(" ", localtime))[1..3]);
#do sprintf left align truncate until sprintf supports
if ($files{log}{fileNameLen} =~ m/-\d+\.(\d+)/) {
$filename = substr($filename, 0, $1);
}
if ($files{log}{funNameLen} =~ m/-\d+\.(\d+)/) {
$FunctionName = substr($FunctionName, 0, $1);
}
my $header = sprintf("%*s, %*s, %*s, %*s:", $files{log}{timeLen},
+$time, $files{log}{fileNameLen}, $filename, $files{log}{funNameLen},
+$FunctionName, $files{log}{lineNumLen}, $line);
#print "$header $text\n"; #only for testing
$writelog->down();
print $LOGFH "$header $text\n";
$writelog->up();
sub EmailResults {
debugLogFunctionNameLineNum((caller(0))[2],(caller(1))[3], @_);
my $system = $_[0];
my @globalMessages = ("NOT Used", "Used");
$system->{reasonforfailure}->[0] =~ s/\n/<br>\n/g;
$system->{health}->[0] =~ s/\n/<br>\n/g;
$system->{events}->[0] =~ s/\n/<br>\n/g;
my $email_msg = "Test complete on station $station_num <br>\n<br>\
+n";
$email_msg .= "Report share [<a href=\"\\\\$reportconfig{ip}\\$rep
+ortconfig{sharename}\">\\\\$reportconfig{ip}\\$reportconfig{sharename
+}</a>] <br>\n";
$email_msg .= "Report share username [$reportconfig{username}] pas
+sword [$reportconfig{password}] <br>\n<br>\n";
$email_msg .= "Testing Details:<br>\n";
$email_msg .= "Refurbished Drive values were ".$globalMessages[$sy
+stem->{refurbished}->[0]]."<br>\n";
$email_msg .= "Jumbo Frames were ".$globalMessages[$system->{jumbo
+}->[0]]."<br>\n";
$email_msg .= "10G NICs were ".$globalMessages[$system->{tengignic
+}->[0]]."<br>\n";
foreach my $t (@{$system->{job}->[0]->{step}}) {
if ($t->{enabled}->[0] == 1) {
$email_msg .= "Test: ".$t->{name}->[0]."<br>\n";
if ($t->{name}->[0] =~ m/datavalidation/) {
$email_msg .= " Duration:
+ ".$system->{job}->[0]->{datavalidationruntime}->[0]."<br>\n";
$email_msg .= " Iteration
+s: ".$system->{job}->[0]->{datavalidationiterations}->[0]." <br>\n";
}
}
}
my $color = "red";
if ($system->{status}->[0] =~ m/success/i) {
$color = "green";
}
$email_msg .= "<br>\n<b>Unit: ".$system->{hardware}->[0]." -- ".$s
+ystem->{serial}->[0]." -- <font color=$color>".$system->{status}->[0]
+."</font> -- ".$system->{ip}->[0]."</b><br>\n";
$email_msg .= "Service Key: ".$system->{servicekey}->[0]."<br>\n";
$email_msg .= "Report folder: <a href=\"\\\\$reportconfig{ip}\\$re
+portconfig{sharename}\\".$system->{serial}->[0]."\\\">System report f
+older</a><br>\n";
$email_msg .= "Report file: <a href=\"\\\\$reportconfig{ip}\\$repo
+rtconfig{sharename}\\$system->{serial}->[0]\\".$system->{filename}->[
+1]."\">".$system->{filename}->[1]."</a><br>\n";
if ($system->{status}->[0] !~ m/success/) {
#failure
$email_msg .= "<b>Reason for failure:</b> " . $system->{reason
+forfailure}->[0] . "<br>\n";
$email_msg .= "<b>System Health:</b><br>\n" . $system->{health
+}->[0];
$email_msg .= "<b>Eventlog:</b><br>\n" . $system->{events}->[0
+];
} else {
if (exists $system->{license}->[0]->{hash}) {
if ($system->{license}->[0]->{result}->[0] eq "success") {
$email_msg .= "Successfully set unit with license<br>\
+n";
$email_msg .= "<br>\n";
$email_msg .= "Licensed Features:<br>\n";
$email_msg .= "<table border='1' cellpadding='5'>\n";
foreach my $tag ("CI") {
foreach my $type (keys %{$system->{license}->[0]->
+{hash}->[0]->{$tag}->[0]}) {
my ($color, $value) = userColorValue($tag, $ty
+pe);
$email_msg .= "<tr><td>$system->{license}->[0]
+->{hash}->[0]->{$tag}->[0]->{$type}->[3]</td><td><font color=$color>"
+.$value."</font></td></tr>\n"; #data
}
}
my @hashorder;
foreach my $tag (keys %{$system->{license}->[0]->{hash
+}->[0]}) {
foreach my $type (keys %{$system->{license}->[0]->
+{hash}->[0]->{$tag}->[0]}) {
push (@hashorder, [$tag, $type, $system->{lice
+nse}->[0]->{hash}->[0]->{$tag}->[0]->{$type}->[3]]);
}
}
@hashorder = sort {$a->[2] cmp $b->[2]} @hashorder;
foreach (@hashorder) {
my ($tag, $type, undef) = @$_;
if ($tag ne "COM" and $tag ne "CI") {
my ($color, $value) = userColorValue($tag, $ty
+pe);
$email_msg .= "<tr><td>$system->{license}->[0]
+->{hash}->[0]->{$tag}->[0]->{$type}->[3]</td><td><font color=$color>"
+.$value."</font></td></tr>\n"; #data
}
}
$email_msg .= "</table>\n";
} else {
$email_msg .= "Failed to set unit with license <br>\n"
+;
}
}
}
my $subject = "StorTest Complete for station $station_num";
my @addresses = split(",",$emailconfig{"addresses$diagmode"});
for (my $a = 0; $a < @addresses; $a++) {
if ($addresses[$a] !~ m/\@/) {
$addresses[$a] .= "\@".$emailconfig{domain};
}
}
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localti
+me();
$year += 1900;
my $mytimezone = qx"wmic timezone get Description"; #(UTC-05:00) E
+astern Time (US & Canada) || (GMT+05:30) Chennai, Kolkata, Mumbai, Ne
+w Delhi
my $timezone = "-0000"; #default no offset
foreach my $line (split("\n",$mytimezone)) {
if ($line =~ m/\([UG][TM][CT]([+-]\d+:\d+)\)/) {
$timezone = $1;
$timezone =~ s/://;
last;
}
}
logLine("TIMEZONE: $timezone");
#Create an RFC compliant time stamp
my $Date = sprintf("%s, %02d %3s %04d %02d:%02d:%02d %5s",$dayofwe
+ek[$wday],$mday,$monthnames[$mon],$year,$hour - $isdst,$min,$sec,$tim
+ezone);
my $smtp = Net::SMTP->new(Host=>$emailconfig{server}, Hello=>$emai
+lconfig{domain}, Timeout=>120, Debug=>0);
if (not defined $smtp) {
croak "Unable to connect to mailhost [$emailconfig{server}]";
} else {
$smtp->mail("NOREPLY\@$emailconfig{domain}");
$smtp->to(@addresses);
#start data to server
$smtp->data();
#HEADER
$smtp->datasend("From: NOREPLY\@$emailconfig{domain}\n");
$smtp->datasend("To: ".join(",",@addresses)."\n");
$smtp->datasend("Reply-To: NOREPLY\@$emailconfig{domain}\n");
$smtp->datasend("Date: $Date\n");
$smtp->datasend("Subject: $subject\n");
$smtp->datasend("MIME-Version: 1.0\n");
$smtp->datasend("Content-Type: multipart/mixed; boundary= \"*B
+CKTR*\"\n");
$smtp->datasend("\n"); #end content block
#MSG:
$smtp->datasend("--*BCKTR*\n");
$smtp->datasend("Content-Type: ".$MIMEtype{html}[0]."; charset
+=UTF-8\n");
$smtp->datasend("\n"); #end content block
$smtp->datasend("$email_msg");
$smtp->datasend("\n");
#ATTACHMENTS
my $path = "$reportconfig{sharedriveletter}:\\$system->{serial
+}->[0]\\";
for (my $f = 1; $f < @{$system->{filename}}; $f++) {
if (-e "$path$system->{filename}->[$f]") {
logLine("attaching file $system->{filename}->[$f]");
$smtp->datasend("--*BCKTR*\n");
$smtp->datasend("Content-Type: ". $MIMEtype{substr($sy
+stem->{filename}->[$f],index($system->{filename}->[$f],".") + 1)}[0]
+."; name=\"$system->{filename}->[$f]\"\n");#; charset=binary
$smtp->datasend("Content-Transfer-Encoding: ". $MIMEty
+pe{substr($system->{filename}->[$f],index($system->{filename}->[$f],"
+.") + 1)}[1] ."\n");
$smtp->datasend("Content-Disposition: attachment; file
+name=\"$system->{filename}->[$f]\"\n");
$smtp->datasend("\n"); #end content block
open (ATT, "< $path$system->{filename}->[$f]");
while (my $input = <ATT>) {
if ($MIMEtype{substr($system->{filename}->[$f],ind
+ex($system->{filename}->[$f],".") + 1)}[1] eq "base64") {
$input = encode_base64($input);
}
$smtp->datasend($input);
}
close (ATT);
$smtp->datasend("\n"); #separate each file with a new
+line
}
}
if ($system->{status}->[0] =~ m/fail/i) {
$files{log}{file} =~ m/([a-zA-Z0-9\-\._]+)$/;
my $logfile = $1;
$smtp->datasend("--*BCKTR*\n");
$smtp->datasend("Content-Type: ".$MIMEtype{log}[0]."; name
+=\"$logfile\"\n");
$smtp->datasend("Content-Transfer-Encoding: ". $MIMEtype{l
+og}[1] ."\n");
$smtp->datasend("Content-Disposition: attachment; filename
+=\"$logfile\"\n");
$smtp->datasend("\n"); #end content block
open (ATT, "< $files{log}{file}");
while (my $input = <ATT>) {
$smtp->datasend($input);
}
close (ATT);
$smtp->datasend("\n"); #separate each file with a new line
}
# Send the END section break
$smtp->datasend("--*BCKTR*--\n\n");
#end data to server
$smtp->dataend();
#close connection to server (SEND)
$smtp->quit;
}
}