bldsystemtools/commonbldutils/GenResult/GenPostBuildResult.pm
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bldsystemtools/commonbldutils/GenResult/GenPostBuildResult.pm	Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,578 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Script summarise and hotlink autosmoketest logs by reading
+# testdriver generated files
+# 
+#
+
+#!/usr/bin/perl -w
+package GenPostBuildResult;
+use GenResult;
+use strict;
+use Net::SMTP;
+
+##########################################################################
+# 
+# Name      :  getAVResults()
+# Synopsis  :  To parse a logfile, and ouput results into a common
+#              data format for processing.
+#
+# Inputs    :  $iLogsPublication
+# Output    :  A single variable that is passed to the final results HTML 
+#              table.
+#
+##########################################################################
+sub getAVResults {
+
+my ($iLogsPublishLocation) = @_;
+
+my $iAVFileName = "anti-virus.log";
+my $iAVError = "";
+my $iAVLogFileLocation = $iLogsPublishLocation.$iAVFileName;
+my $iAVResult = "<font color = \"Red\">WARNING: Potential virus found, check anti-virus.log</font>";
+my $iAVWarning = "";
+my $oldIdeFile = 0;
+my $errorFound = 0;
+
+# mcafee specifics
+my $iTotal      = 0;
+my $iClean      = 0;
+
+     if(-e $iAVLogFileLocation) {
+    
+	# id header from antivirus.log
+	my $iAVName = getAVProductName($iAVLogFileLocation);
+	
+        open (AVLOGFILE, $iAVLogFileLocation) or die "ERROR: Can't open file: $!";
+        
+        my @iAVLog = <AVLOGFILE>;
+        
+         if ($iAVName eq "SOPHOS") {
+            
+            foreach (@iAVLog){
+               if(m/No viruses were discovered/i){
+                 $iAVResult = "<font color = \"green\">No viruses were discovered</font>";
+                 $iAVError = "";
+               }
+               elsif(m/(is older than \d+ days)+/i){
+                 $oldIdeFile = 1;
+               }
+               elsif(m/errors? (was|were) encountered/i) {
+                 $errorFound = 1;
+               }
+            }
+            
+	  } elsif ($iAVName eq "MCAFEE") {
+	    
+            foreach (@iAVLog){
+               if (m/Total files:\s{1}\.*\s*([0-9]+)/i) {
+                  $iTotal += $1;                  
+               }
+               elsif (m/Clean:\s{1}\.*\s*([0-9]+)/i) {                  
+                 $iClean  += $1;
+               }
+	    }
+            
+            if ($iTotal eq $iClean) {
+                  $iAVResult = "<font color = \"green\">No viruses were discovered</font>";
+                  $iAVError = "";
+            }
+	  } elsif ($iAVName eq "UNKNOWN") {
+            $iAVResult = "<font color = \"Red\"> WARNING: Cannot Identify Anti-Virus product</font>";
+            $iAVError = "";
+         }
+	  
+	# generate-html-output
+	if( $oldIdeFile) {
+	  $iAVWarning = "<font color = \"Red\"> Virus Definition file needs to be updated</font>";
+	}
+	if($oldIdeFile && $errorFound) {
+	  $iAVWarning .= "<br>";
+	}
+	if( $errorFound) {
+	  $iAVWarning .= "<font color = \"Red\"> Error(s) encountered. See anti-virus.log</font>";
+	}	
+     }
+     else{
+      $iAVResult = "<font color = \"Red\">WARNING: Anti-virus.log file not found </font>";
+      $iAVError = "";
+     }
+
+  close AVLOGFILE;
+  
+return ($iAVResult,$iAVWarning,$iAVError);
+}
+
+#
+# Identify AV Product
+# - Sophos
+# - McAfee
+# - UnKnown
+sub getAVProductName($) {
+  
+  my $iAVLogFileLocation = shift;
+ 
+  my $iMcAfee = 0;
+  my $iSophos = 0;
+  
+  open (AVLOGFILE, $iAVLogFileLocation) or die "ERROR: Can't open file: $!";
+  
+  my @iAVLog  = <AVLOGFILE>;
+  
+  foreach (@iAVLog){
+    
+    if(m/McAfee VirusScan for Win32/i) {
+      $iMcAfee = 1;
+      last;
+    }
+    
+    if(m/Sophos Anti-Virus/i) {
+      $iSophos = 1;
+      last;
+    }
+  }
+  
+  # does not recognise "both"
+  return ($iMcAfee ? "MCAFEE" :
+         ($iSophos ? "SOPHOS" : "UNKNOWN"));
+  
+}
+
+##########################################################################
+#   --- REQ9019 ---
+# Name      :  getSidVidResults()
+# Synopsis  :  To check if the SID-VID report for ROM images has been created 
+#              using tools_imgcheck module during the build.
+# Inputs    :  $iLogsPublishLocation
+# Output    :  A single variable that is passed to the final results HTML 
+#              table.
+#
+##########################################################################
+sub getSidVidResults {
+ 
+my ($iLogsPublishLocation) = @_;
+
+my $iSidVidReportFileName     = "sidvid.xml";
+my $iSidVidReportFileLocation = $iLogsPublishLocation.$iSidVidReportFileName;
+my $iSidVidReportResult;
+     if(-e $iSidVidReportFileLocation) {
+
+         $iSidVidReportFileLocation =~ s/\\/\//g;     # swap backslashes to fwd slashes
+         
+         # create browser link
+         $iSidVidReportFileLocation = "file:///".$iSidVidReportFileLocation;    
+         $iSidVidReportResult   ="<a class =\"hoverlink\" href = \"" . $iSidVidReportFileLocation."\">$iSidVidReportFileName</a>";  
+     }
+     else{
+         $iSidVidReportResult = "<font color = \"Red\">WARNING: SID/VID report $iSidVidReportFileName not found</font>";
+     }
+ 
+return ($iSidVidReportResult);
+}
+
+##########################################################################
+# 
+# Name      :  CDBfiletest()
+# Synopsis  :  To test if the CDB report was created successfully. Submit
+#              result to the postbuild results table.
+#
+# Inputs    :  $iBCPrevious
+# Output    :  A single variable that is passed to the final results HTML 
+#              table.
+#
+##########################################################################
+sub CDBFileTest{
+
+my  ($iLinkPathLocation, $iProduct, $iSnapshot, $imail)  = @_;
+
+my $iBCPreviousXML = $iLinkPathLocation;
+$iBCPreviousXML = $iBCPreviousXML."cdb-info\\bc-prev.xml";
+my $iBCBaseXML = $iLinkPathLocation;
+$iBCBaseXML = $iBCBaseXML."cdb-info\\bc-base.xml";
+
+my $iPrevTotal = "XML file not found";
+my $iPrevPublish = "XML file not found";  
+my $iBaseTotal = "XML file not found";
+my $iBasePublish = "XML file not found";  
+
+my $size = 0;
+my $errorMessageBase = "";
+my $errorMessagePrev = "";
+
+my $iBCPreviousHTML = $iLinkPathLocation;
+$iBCPreviousHTML = $iBCPreviousHTML."cdb-info\\BC-prev.html";
+my $iBCBaseHTML = $iLinkPathLocation;
+$iBCBaseHTML = $iBCBaseHTML."cdb-info\\BC-base.html";
+
+if (-e $iBCPreviousXML){ 
+   
+   $iPrevTotal = "Keyword 'TotalBreaks' not found";
+   $iPrevPublish = "Keyword 'PublishedPartner' not found";
+
+   open (BCPREV, $iBCPreviousXML) or die "ERROR: Can't open file: $!";
+
+       my @iBCPrev = <BCPREV>;
+
+          foreach (@iBCPrev){
+       
+                   if(m/(totalBreaks count=")(\d+)/i){
+                          $iPrevTotal = $2;
+                   }
+                  
+                   if(m/(publishedPartner" count=")(\d+)/i){
+                          $iPrevPublish = $2;
+                   }
+          }
+    close BCPREV;
+    
+    if((uc($iLinkPathLocation) !~ m/TEST_BUILD/) && defined($imail) && $iPrevTotal>50){
+      &SendEmail($iProduct,$iSnapshot,"The BC_Prev breaks are $iPrevTotal for Symbian v$iProduct $iSnapshot" );}
+    
+    #--DEF067716--
+        
+    $size = (stat($iBCPreviousHTML))[7]; 
+    
+    if ( -e $iBCPreviousHTML){
+    	if ($size == 0) {
+	    $errorMessagePrev = " [ BC-prev html link invalid ]";
+        } else {
+            my $bool = 0;
+            open (BCPREVHTML, $iBCPreviousHTML) or die "ERROR: Can't open file: $!";
+            while(<BCPREVHTML>){
+                if(m/<HTML>/){
+                    $bool = 1;
+                }
+            }
+            close BCPREVHTML;
+            if ($bool == 1){
+                $errorMessagePrev = "";
+            }else{
+                $errorMessagePrev = " [ BC-prev: Not a HTML file ]";
+            }            
+        }
+    } else {
+        $errorMessagePrev = " [ BC-prev.html does not exist ]";
+    }
+    
+    #--------------
+    
+    }
+
+if (-e $iBCBaseXML){
+   
+   $iBaseTotal = "Keyword 'TotalBreaks' not found";
+   $iBasePublish = "Keyword 'PublishedPartner' not found";
+           
+   open (BCBASE, $iBCBaseXML) or die "ERROR: Can't open file: $!";
+
+       my @iBCBase = <BCBASE>;
+
+          foreach (@iBCBase){
+      
+                   if(m/(totalBreaks count=")(\d+)/i){
+                          $iBaseTotal = $2;                  
+                   }
+                  
+                   if(m/(publishedPartner" count=")(\d+)/i){
+                          $iBasePublish = $2;
+                   }
+           }
+    close BCBASE;
+    
+    if((uc($iLinkPathLocation) !~ m/TEST_BUILD/) && defined($imail) && $iBaseTotal>400){
+      &SendEmail($iProduct,$iSnapshot,"The BC_Base breaks are $iBaseTotal for Symbian v$iProduct $iSnapshot" );}
+    #--DEF067716--
+    
+    $size = (stat($iBCBaseHTML))[7]; 
+    
+    if ( -e $iBCBaseHTML){
+    	if ($size == 0) {
+	    $errorMessageBase = " [ BC-base html link invalid ]"; 
+        }else {
+            my $bool = 0;
+            open (BCBASEHTML, $iBCBaseHTML) or die "ERROR: Can't open file: $!";
+            while(<BCBASEHTML>){
+                if(m/<HTML>/){
+                    $bool = 1;
+                }
+            }
+            close BCBASEHTML;  
+            if ($bool == 1){
+                $errorMessageBase = "";
+            }else{
+                $errorMessageBase = " [ BC-base: Not a HTML file ]";
+            }
+        }
+    } else {
+        $errorMessageBase = " [ BC-base.html does not exist ]";
+    }
+    
+    #--------------
+    
+    }
+
+return ($iPrevTotal, $iPrevPublish, $iBaseTotal, $iBasePublish, $errorMessagePrev, $errorMessageBase);
+}
+
+sub SendEmail
+{
+  my (@body, @message, $sender_address, $notification_address,$iProduct,$iSnap);                        
+  ($iProduct,$iSnap,@body) = @_;
+  $sender_address  =  'I_EXT_SysBuildSupport@nokia.com';
+  $notification_address  =  'I_EXT_SysBuildSupport@nokia.com';
+     
+  push @message,"From: $sender_address\n";
+  push @message,"To: $notification_address\n";
+  push @message,"Subject: Break Threshold CDB Notification $iSnap Symbian v$iProduct\n";
+  push @message,"\n";
+  push @message,@body;
+  
+  my $smtp = Net::SMTP->new('smtp.nokia.com', Hello => $ENV{COMPUTERNAME}, Debug   => 0);
+  $smtp->mail();
+  $smtp->to($notification_address);
+  
+  $smtp->data(@message) or die "ERROR: Sending message";
+  $smtp->quit;
+}
+##########################################################################
+# 
+# Name      :  CBRTime()
+# Synopsis  :  To obtain the time of export for both the gt_techview and
+#              gt_only files and to report the status of the exported
+#              CBR's.
+#
+# Inputs    :  Export_gt_only_baseline.log,
+#              Export_gt_techview_baseline.log
+# Output    :  To display the times in the post built results table.
+#              
+#
+##########################################################################
+sub CBRTime{
+
+  my ($iLogsPublishLocation, $iProduct, $iSnapshot) = @_;
+  
+  
+  my $iOnlyResult = "<font color = \"black\"> Export Unsuccessful</font>";              
+  my $iTechViewResult = "<font color = \"black\">Export Unsuccessful</font>";  
+  my $iOnlyTimes = "";
+  my $iTechViewTime = "";
+  # Error
+  my $iOnlyResultError = "";
+  my $iTechViewResultError = ""; 
+  my $iExportError = "";
+  
+  if (-e $iLogsPublishLocation."Export_CBR.log")
+  {  
+  open (ILOG, $iLogsPublishLocation."Export_CBR.log") or die "ERROR: Can't open file: $!";
+  my $iOnlyExportFound = 0;
+  my $iTechviewExportFound = 0;
+  
+  while (my $line = <ILOG>)
+  {
+    if( $line =~ m/Environment gt_only_baseline.*?successfully exported/i)
+    {
+      $iOnlyResult = "<font color = \"black\">Export Successful</font>";
+      $iOnlyExportFound = 1;
+    }
+
+    if( $line =~ m/gt_only_baseline.*?exportenv finsihed at\s+(.*)/i)
+    {
+      $iOnlyTimes = "<font color = \"black\">".$1."</font>";
+    }
+  
+    if($line =~ m/Environment gt_techview_baseline.*?successfully exported/i)
+    {
+      $iTechViewResult = "<font color = \"black\">Export Successful</font>";
+      $iTechviewExportFound = 1;
+    }
+    
+    if( $line =~ m/gt_techview_baseline.*?exportenv finsihed at\s+(.*)/i)
+    {
+      $iTechViewTime  = "<font color = \"black\">".$1."</font>";
+    }
+    
+    if( $line =~ m/ERROR: Failed to record delivery using template/i)
+    {
+      $iExportError = "<font color = \"red\"> Record Delivery Failed </font>";
+    }
+    
+      
+  } 
+  
+  if($iOnlyExportFound == 0)
+  {
+    $iOnlyResultError = "<font color = \"red\"> [ Export Unsuccessful ]</font>";
+    $iOnlyTimes = "--";
+  }
+  if($iTechviewExportFound == 0)
+  {
+    $iTechViewResultError = "<font color = \"red\"> [ Export Unsuccessful ]</font>";
+    $iTechViewTime = "--";
+  }  
+  close ILOG;
+  
+  } else {
+  $iOnlyResult = "<font color = \"black\">Cannot find file</font>";
+  $iOnlyTimes = "<font color = \"black\">Cannot find file</font>";
+  $iOnlyResultError = "<font color = \"red\"> [ File not found ]</font>";
+  $iTechViewResult = "<font color = \"black\">Cannot find file</font>";
+  $iTechViewTime = "<font color = \"black\">Cannot find file</font>";
+  $iTechViewResultError = "<font color = \"red\"> [ File not found ]</font>";
+  }
+  
+  return ($iOnlyResult, $iOnlyTimes, $iTechViewResult, $iTechViewTime, $iOnlyResultError, $iTechViewResultError, $iExportError);
+}
+
+##########################################################################
+#
+# Name    : generatesPostBuildSummary()
+# Synopsis: Creates Post Build Table in Build Results.
+# Inputs  : Function parameters returned from genResult.pm that are to be
+#           implemented in the Post Build Results table.
+#	
+# Outputs : HTML code that will be part of the HTML report generated 
+#           for the final build results table.
+##########################################################################
+sub generatesPostBuildSummary{
+
+my ($iLogsPublishLocation, $iLinkPathLocation, $iProduct, $iSnapshot, $imail) = @_;
+my @CDBResArr = &CDBFileTest($iLinkPathLocation, $iProduct, $iSnapshot, $imail);
+my @CBRResTime = &CBRTime($iLogsPublishLocation, $iProduct, $iSnapshot);
+my @AVResults = &getAVResults($iLogsPublishLocation);
+my $SidVidReportURL =  &getSidVidResults($iLogsPublishLocation);
+
+my $SidVidReportResult = "SID/VID report generated.";
+
+if( $SidVidReportURL =~ /WARNING/){
+    $SidVidReportResult = $SidVidReportURL;
+    $SidVidReportURL    = "&nbsp"; 
+}
+
+my $postbuild_html = "\n
+                     <br><table border=\"1\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">
+
+        <tr>
+
+                <td align=\"center\" colspan=\"4\" bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>Post Build Results</font></td>
+
+        </tr>
+        
+        <tr>
+        
+                <td bgcolor=\"#006699\">&nbsp</td>
+
+                <td bgcolor=\"#006699\">&nbsp</td>
+                
+                <td bgcolor=\"#006699\">&nbsp</td>
+                
+                <td align=\"center\" bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>Defects</font></td>        
+        
+        </tr>
+
+        <tr>
+
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>AntiVirus</font></td>
+
+                <td > " . $AVResults[0] . " </td>
+                
+                <td>&nbsp<b>" . $AVResults[1] . " </td>
+                
+                <td>&nbsp<b>" . $AVResults[2] . " </td>
+
+        </tr>
+        
+        <tr>
+        
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>SID VID Reports</font></td>
+         
+                <td>".$SidVidReportResult."</td>
+                <td>".$SidVidReportURL."</td>
+                <td>&nbsp</td>
+
+         </tr>       
+
+        <tr>
+
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><a class =\"hoverlink\" href = \"" . &GenResult::setBrowserFriendlyLinks($iLinkPathLocation."cdb-info\\BC-prev.html")."\"><b>[CDB PREVIOUS]</a></td>
+
+                <td>Total Number of Breaks: <b> " . $CDBResArr[0] . " </td>
+
+                <td>Breaks at Published Partner and Above: <b> " . $CDBResArr[1] . " </td>
+                
+                <td>&nbsp<b>" . "<font color=\"Red\" size=\"2\">" . $CDBResArr[4] . "  </td>
+
+        </tr>
+
+        <tr>
+
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><a class =\"hoverlink\" href = \"" . &GenResult::setBrowserFriendlyLinks($iLinkPathLocation."cdb-info\\BC-base.html")."\"><b>[CDB BASE]</a></td>
+
+                <td>Total Number of Breaks: <b> " . $CDBResArr[2] . " </td>
+
+                <td>Breaks at Published Partner and Above: <b> " .$CDBResArr[3] . " </td>
+
+		<td>&nbsp<b>" . "<font color=\"Red\" size=\"2\">" . $CDBResArr[5] . " </td>
+
+          </tr>";
+        
+        # If it is a test build then do not evaluate the CBR Export time component, else implement the export table.
+          
+         if(GenResult::isTestBuild() eq "0"){
+          
+          $postbuild_html=$postbuild_html."
+                  
+          <tr>
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>[CBR Export] GT_Only</td>
+
+                <td>Status: <b> " . $CBRResTime[0] . " </td>
+
+                <td>Time of Export: <b> " . $CBRResTime[1]  . " </td>
+
+		<td>&nbsp<b> " . $CBRResTime[4] . "</td>
+
+        </tr>
+        <tr>
+
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>[CBR Export] TechView</td>
+
+                <td>Status: <b> " . $CBRResTime[2] . " </td>
+
+                <td>Time of Export: <b> " . $CBRResTime[3]  . " </td>
+                
+                <td>&nbsp<b> " . $CBRResTime[5] . "</td>
+
+        </tr>
+        <tr>
+        
+                <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>Record Delivery Errors</td>
+         
+                <td>&nbsp <b> " . $CBRResTime[6] . " </td>
+	       	<td>&nbsp</td>
+		<td>&nbsp</td>
+		
+         </tr>       
+        
+        </table>
+        <br>
+                     ";
+         }
+         else{
+          $postbuild_html=$postbuild_html."
+          </table>
+        <br>";
+         }
+return $postbuild_html;
+}
+
+1;