bldsystemtools/commonbldutils/GenResult/GenPostBuildResult.pm
branchRCL_3
changeset 5 d90029decf65
parent 4 a9d4531388d0
child 6 5e522efbae7b
equal deleted inserted replaced
4:a9d4531388d0 5:d90029decf65
     1 # Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 # All rights reserved.
       
     3 # This component and the accompanying materials are made available
       
     4 # under the terms of "Eclipse Public License v1.0"
       
     5 # which accompanies this distribution, and is available
       
     6 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 #
       
     8 # Initial Contributors:
       
     9 # Nokia Corporation - initial contribution.
       
    10 #
       
    11 # Contributors:
       
    12 #
       
    13 # Description:
       
    14 # Script summarise and hotlink autosmoketest logs by reading
       
    15 # testdriver generated files
       
    16 # 
       
    17 #
       
    18 
       
    19 #!/usr/bin/perl -w
       
    20 package GenPostBuildResult;
       
    21 use GenResult;
       
    22 use strict;
       
    23 use Net::SMTP;
       
    24 
       
    25 ##########################################################################
       
    26 # 
       
    27 # Name      :  getAVResults()
       
    28 # Synopsis  :  To parse a logfile, and ouput results into a common
       
    29 #              data format for processing.
       
    30 #
       
    31 # Inputs    :  $iLogsPublication
       
    32 # Output    :  A single variable that is passed to the final results HTML 
       
    33 #              table.
       
    34 #
       
    35 ##########################################################################
       
    36 sub getAVResults {
       
    37 
       
    38 my ($iLogsPublishLocation) = @_;
       
    39 
       
    40 my $iAVFileName = "anti-virus.log";
       
    41 my $iAVError = "";
       
    42 my $iAVLogFileLocation = $iLogsPublishLocation.$iAVFileName;
       
    43 my $iAVResult = "<font color = \"Red\">WARNING: Potential virus found, check anti-virus.log</font>";
       
    44 my $iAVWarning = "";
       
    45 my $oldIdeFile = 0;
       
    46 my $errorFound = 0;
       
    47 
       
    48 # mcafee specifics
       
    49 my $iTotal      = 0;
       
    50 my $iClean      = 0;
       
    51 
       
    52      if(-e $iAVLogFileLocation) {
       
    53     
       
    54 	# id header from antivirus.log
       
    55 	my $iAVName = getAVProductName($iAVLogFileLocation);
       
    56 	
       
    57         open (AVLOGFILE, $iAVLogFileLocation) or die "ERROR: Can't open file: $!";
       
    58         
       
    59         my @iAVLog = <AVLOGFILE>;
       
    60         
       
    61          if ($iAVName eq "SOPHOS") {
       
    62             
       
    63             foreach (@iAVLog){
       
    64                if(m/No viruses were discovered/i){
       
    65                  $iAVResult = "<font color = \"green\">No viruses were discovered</font>";
       
    66                  $iAVError = "";
       
    67                }
       
    68                elsif(m/(is older than \d+ days)+/i){
       
    69                  $oldIdeFile = 1;
       
    70                }
       
    71                elsif(m/errors? (was|were) encountered/i) {
       
    72                  $errorFound = 1;
       
    73                }
       
    74             }
       
    75             
       
    76 	  } elsif ($iAVName eq "MCAFEE") {
       
    77 	    
       
    78             foreach (@iAVLog){
       
    79                if (m/Total files:\s{1}\.*\s*([0-9]+)/i) {
       
    80                   $iTotal += $1;                  
       
    81                }
       
    82                elsif (m/Clean:\s{1}\.*\s*([0-9]+)/i) {                  
       
    83                  $iClean  += $1;
       
    84                }
       
    85 	    }
       
    86             
       
    87             if ($iTotal eq $iClean) {
       
    88                   $iAVResult = "<font color = \"green\">No viruses were discovered</font>";
       
    89                   $iAVError = "";
       
    90             }
       
    91 	  } elsif ($iAVName eq "UNKNOWN") {
       
    92             $iAVResult = "<font color = \"Red\"> WARNING: Cannot Identify Anti-Virus product</font>";
       
    93             $iAVError = "";
       
    94          }
       
    95 	  
       
    96 	# generate-html-output
       
    97 	if( $oldIdeFile) {
       
    98 	  $iAVWarning = "<font color = \"Red\"> Virus Definition file needs to be updated</font>";
       
    99 	}
       
   100 	if($oldIdeFile && $errorFound) {
       
   101 	  $iAVWarning .= "<br>";
       
   102 	}
       
   103 	if( $errorFound) {
       
   104 	  $iAVWarning .= "<font color = \"Red\"> Error(s) encountered. See anti-virus.log</font>";
       
   105 	}	
       
   106      }
       
   107      else{
       
   108       $iAVResult = "<font color = \"Red\">WARNING: Anti-virus.log file not found </font>";
       
   109       $iAVError = "";
       
   110      }
       
   111 
       
   112   close AVLOGFILE;
       
   113   
       
   114 return ($iAVResult,$iAVWarning,$iAVError);
       
   115 }
       
   116 
       
   117 #
       
   118 # Identify AV Product
       
   119 # - Sophos
       
   120 # - McAfee
       
   121 # - UnKnown
       
   122 sub getAVProductName($) {
       
   123   
       
   124   my $iAVLogFileLocation = shift;
       
   125  
       
   126   my $iMcAfee = 0;
       
   127   my $iSophos = 0;
       
   128   
       
   129   open (AVLOGFILE, $iAVLogFileLocation) or die "ERROR: Can't open file: $!";
       
   130   
       
   131   my @iAVLog  = <AVLOGFILE>;
       
   132   
       
   133   foreach (@iAVLog){
       
   134     
       
   135     if(m/McAfee VirusScan for Win32/i) {
       
   136       $iMcAfee = 1;
       
   137       last;
       
   138     }
       
   139     
       
   140     if(m/Sophos Anti-Virus/i) {
       
   141       $iSophos = 1;
       
   142       last;
       
   143     }
       
   144   }
       
   145   
       
   146   # does not recognise "both"
       
   147   return ($iMcAfee ? "MCAFEE" :
       
   148          ($iSophos ? "SOPHOS" : "UNKNOWN"));
       
   149   
       
   150 }
       
   151 
       
   152 ##########################################################################
       
   153 #   --- REQ9019 ---
       
   154 # Name      :  getSidVidResults()
       
   155 # Synopsis  :  To check if the SID-VID report for ROM images has been created 
       
   156 #              using tools_imgcheck module during the build.
       
   157 # Inputs    :  $iLogsPublishLocation
       
   158 # Output    :  A single variable that is passed to the final results HTML 
       
   159 #              table.
       
   160 #
       
   161 ##########################################################################
       
   162 sub getSidVidResults {
       
   163  
       
   164 my ($iLogsPublishLocation) = @_;
       
   165 
       
   166 my $iSidVidReportFileName     = "sidvid.xml";
       
   167 my $iSidVidReportFileLocation = $iLogsPublishLocation.$iSidVidReportFileName;
       
   168 my $iSidVidReportResult;
       
   169      if(-e $iSidVidReportFileLocation) {
       
   170 
       
   171          $iSidVidReportFileLocation =~ s/\\/\//g;     # swap backslashes to fwd slashes
       
   172          
       
   173          # create browser link
       
   174          $iSidVidReportFileLocation = "file:///".$iSidVidReportFileLocation;    
       
   175          $iSidVidReportResult   ="<a class =\"hoverlink\" href = \"" . $iSidVidReportFileLocation."\">$iSidVidReportFileName</a>";  
       
   176      }
       
   177      else{
       
   178          $iSidVidReportResult = "<font color = \"Red\">WARNING: SID/VID report $iSidVidReportFileName not found</font>";
       
   179      }
       
   180  
       
   181 return ($iSidVidReportResult);
       
   182 }
       
   183 
       
   184 ##########################################################################
       
   185 # 
       
   186 # Name      :  CDBfiletest()
       
   187 # Synopsis  :  To test if the CDB report was created successfully. Submit
       
   188 #              result to the postbuild results table.
       
   189 #
       
   190 # Inputs    :  $iBCPrevious
       
   191 # Output    :  A single variable that is passed to the final results HTML 
       
   192 #              table.
       
   193 #
       
   194 ##########################################################################
       
   195 sub CDBFileTest{
       
   196 
       
   197 my  ($iLinkPathLocation, $iProduct, $iSnapshot, $imail)  = @_;
       
   198 
       
   199 my $iBCPreviousXML = $iLinkPathLocation;
       
   200 $iBCPreviousXML = $iBCPreviousXML."cdb-info\\bc-prev.xml";
       
   201 my $iBCBaseXML = $iLinkPathLocation;
       
   202 $iBCBaseXML = $iBCBaseXML."cdb-info\\bc-base.xml";
       
   203 
       
   204 my $iPrevTotal = "XML file not found";
       
   205 my $iPrevPublish = "XML file not found";  
       
   206 my $iBaseTotal = "XML file not found";
       
   207 my $iBasePublish = "XML file not found";  
       
   208 
       
   209 my $size = 0;
       
   210 my $errorMessageBase = "";
       
   211 my $errorMessagePrev = "";
       
   212 
       
   213 my $iBCPreviousHTML = $iLinkPathLocation;
       
   214 $iBCPreviousHTML = $iBCPreviousHTML."cdb-info\\BC-prev.html";
       
   215 my $iBCBaseHTML = $iLinkPathLocation;
       
   216 $iBCBaseHTML = $iBCBaseHTML."cdb-info\\BC-base.html";
       
   217 
       
   218 if (-e $iBCPreviousXML){ 
       
   219    
       
   220    $iPrevTotal = "Keyword 'TotalBreaks' not found";
       
   221    $iPrevPublish = "Keyword 'PublishedPartner' not found";
       
   222 
       
   223    open (BCPREV, $iBCPreviousXML) or die "ERROR: Can't open file: $!";
       
   224 
       
   225        my @iBCPrev = <BCPREV>;
       
   226 
       
   227           foreach (@iBCPrev){
       
   228        
       
   229                    if(m/(totalBreaks count=")(\d+)/i){
       
   230                           $iPrevTotal = $2;
       
   231                    }
       
   232                   
       
   233                    if(m/(publishedPartner" count=")(\d+)/i){
       
   234                           $iPrevPublish = $2;
       
   235                    }
       
   236           }
       
   237     close BCPREV;
       
   238     
       
   239     if((uc($iLinkPathLocation) !~ m/TEST_BUILD/) && defined($imail) && $iPrevTotal>50){
       
   240       &SendEmail($iProduct,$iSnapshot,"The BC_Prev breaks are $iPrevTotal for Symbian v$iProduct $iSnapshot" );}
       
   241     
       
   242     #--DEF067716--
       
   243         
       
   244     $size = (stat($iBCPreviousHTML))[7]; 
       
   245     
       
   246     if ( -e $iBCPreviousHTML){
       
   247     	if ($size == 0) {
       
   248 	    $errorMessagePrev = " [ BC-prev html link invalid ]";
       
   249         } else {
       
   250             my $bool = 0;
       
   251             open (BCPREVHTML, $iBCPreviousHTML) or die "ERROR: Can't open file: $!";
       
   252             while(<BCPREVHTML>){
       
   253                 if(m/<HTML>/){
       
   254                     $bool = 1;
       
   255                 }
       
   256             }
       
   257             close BCPREVHTML;
       
   258             if ($bool == 1){
       
   259                 $errorMessagePrev = "";
       
   260             }else{
       
   261                 $errorMessagePrev = " [ BC-prev: Not a HTML file ]";
       
   262             }            
       
   263         }
       
   264     } else {
       
   265         $errorMessagePrev = " [ BC-prev.html does not exist ]";
       
   266     }
       
   267     
       
   268     #--------------
       
   269     
       
   270     }
       
   271 
       
   272 if (-e $iBCBaseXML){
       
   273    
       
   274    $iBaseTotal = "Keyword 'TotalBreaks' not found";
       
   275    $iBasePublish = "Keyword 'PublishedPartner' not found";
       
   276            
       
   277    open (BCBASE, $iBCBaseXML) or die "ERROR: Can't open file: $!";
       
   278 
       
   279        my @iBCBase = <BCBASE>;
       
   280 
       
   281           foreach (@iBCBase){
       
   282       
       
   283                    if(m/(totalBreaks count=")(\d+)/i){
       
   284                           $iBaseTotal = $2;                  
       
   285                    }
       
   286                   
       
   287                    if(m/(publishedPartner" count=")(\d+)/i){
       
   288                           $iBasePublish = $2;
       
   289                    }
       
   290            }
       
   291     close BCBASE;
       
   292     
       
   293     if((uc($iLinkPathLocation) !~ m/TEST_BUILD/) && defined($imail) && $iBaseTotal>400){
       
   294       &SendEmail($iProduct,$iSnapshot,"The BC_Base breaks are $iBaseTotal for Symbian v$iProduct $iSnapshot" );}
       
   295     #--DEF067716--
       
   296     
       
   297     $size = (stat($iBCBaseHTML))[7]; 
       
   298     
       
   299     if ( -e $iBCBaseHTML){
       
   300     	if ($size == 0) {
       
   301 	    $errorMessageBase = " [ BC-base html link invalid ]"; 
       
   302         }else {
       
   303             my $bool = 0;
       
   304             open (BCBASEHTML, $iBCBaseHTML) or die "ERROR: Can't open file: $!";
       
   305             while(<BCBASEHTML>){
       
   306                 if(m/<HTML>/){
       
   307                     $bool = 1;
       
   308                 }
       
   309             }
       
   310             close BCBASEHTML;  
       
   311             if ($bool == 1){
       
   312                 $errorMessageBase = "";
       
   313             }else{
       
   314                 $errorMessageBase = " [ BC-base: Not a HTML file ]";
       
   315             }
       
   316         }
       
   317     } else {
       
   318         $errorMessageBase = " [ BC-base.html does not exist ]";
       
   319     }
       
   320     
       
   321     #--------------
       
   322     
       
   323     }
       
   324 
       
   325 return ($iPrevTotal, $iPrevPublish, $iBaseTotal, $iBasePublish, $errorMessagePrev, $errorMessageBase);
       
   326 }
       
   327 
       
   328 sub SendEmail
       
   329 {
       
   330   my (@body, @message, $sender_address, $notification_address,$iProduct,$iSnap);                        
       
   331   ($iProduct,$iSnap,@body) = @_;
       
   332   $sender_address  =  'I_EXT_SysBuildSupport@nokia.com';
       
   333   $notification_address  =  'I_EXT_SysBuildSupport@nokia.com';
       
   334      
       
   335   push @message,"From: $sender_address\n";
       
   336   push @message,"To: $notification_address\n";
       
   337   push @message,"Subject: Break Threshold CDB Notification $iSnap Symbian v$iProduct\n";
       
   338   push @message,"\n";
       
   339   push @message,@body;
       
   340   
       
   341   my $smtp = Net::SMTP->new('smtp.nokia.com', Hello => $ENV{COMPUTERNAME}, Debug   => 0);
       
   342   $smtp->mail();
       
   343   $smtp->to($notification_address);
       
   344   
       
   345   $smtp->data(@message) or die "ERROR: Sending message";
       
   346   $smtp->quit;
       
   347 }
       
   348 ##########################################################################
       
   349 # 
       
   350 # Name      :  CBRTime()
       
   351 # Synopsis  :  To obtain the time of export for both the gt_techview and
       
   352 #              gt_only files and to report the status of the exported
       
   353 #              CBR's.
       
   354 #
       
   355 # Inputs    :  Export_gt_only_baseline.log,
       
   356 #              Export_gt_techview_baseline.log
       
   357 # Output    :  To display the times in the post built results table.
       
   358 #              
       
   359 #
       
   360 ##########################################################################
       
   361 sub CBRTime{
       
   362 
       
   363   my ($iLogsPublishLocation, $iProduct, $iSnapshot) = @_;
       
   364   
       
   365   
       
   366   my $iOnlyResult = "<font color = \"black\"> Export Unsuccessful</font>";              
       
   367   my $iTechViewResult = "<font color = \"black\">Export Unsuccessful</font>";  
       
   368   my $iOnlyTimes = "";
       
   369   my $iTechViewTime = "";
       
   370   # Error
       
   371   my $iOnlyResultError = "";
       
   372   my $iTechViewResultError = ""; 
       
   373   my $iExportError = "";
       
   374   
       
   375   if (-e $iLogsPublishLocation."Export_CBR.log")
       
   376   {  
       
   377   open (ILOG, $iLogsPublishLocation."Export_CBR.log") or die "ERROR: Can't open file: $!";
       
   378   my $iOnlyExportFound = 0;
       
   379   my $iTechviewExportFound = 0;
       
   380   
       
   381   while (my $line = <ILOG>)
       
   382   {
       
   383     if( $line =~ m/Environment gt_only_baseline.*?successfully exported/i)
       
   384     {
       
   385       $iOnlyResult = "<font color = \"black\">Export Successful</font>";
       
   386       $iOnlyExportFound = 1;
       
   387     }
       
   388 
       
   389     if( $line =~ m/gt_only_baseline.*?exportenv finsihed at\s+(.*)/i)
       
   390     {
       
   391       $iOnlyTimes = "<font color = \"black\">".$1."</font>";
       
   392     }
       
   393   
       
   394     if($line =~ m/Environment gt_techview_baseline.*?successfully exported/i)
       
   395     {
       
   396       $iTechViewResult = "<font color = \"black\">Export Successful</font>";
       
   397       $iTechviewExportFound = 1;
       
   398     }
       
   399     
       
   400     if( $line =~ m/gt_techview_baseline.*?exportenv finsihed at\s+(.*)/i)
       
   401     {
       
   402       $iTechViewTime  = "<font color = \"black\">".$1."</font>";
       
   403     }
       
   404     
       
   405     if( $line =~ m/ERROR: Failed to record delivery using template/i)
       
   406     {
       
   407       $iExportError = "<font color = \"red\"> Record Delivery Failed </font>";
       
   408     }
       
   409     
       
   410       
       
   411   } 
       
   412   
       
   413   if($iOnlyExportFound == 0)
       
   414   {
       
   415     $iOnlyResultError = "<font color = \"red\"> [ Export Unsuccessful ]</font>";
       
   416     $iOnlyTimes = "--";
       
   417   }
       
   418   if($iTechviewExportFound == 0)
       
   419   {
       
   420     $iTechViewResultError = "<font color = \"red\"> [ Export Unsuccessful ]</font>";
       
   421     $iTechViewTime = "--";
       
   422   }  
       
   423   close ILOG;
       
   424   
       
   425   } else {
       
   426   $iOnlyResult = "<font color = \"black\">Cannot find file</font>";
       
   427   $iOnlyTimes = "<font color = \"black\">Cannot find file</font>";
       
   428   $iOnlyResultError = "<font color = \"red\"> [ File not found ]</font>";
       
   429   $iTechViewResult = "<font color = \"black\">Cannot find file</font>";
       
   430   $iTechViewTime = "<font color = \"black\">Cannot find file</font>";
       
   431   $iTechViewResultError = "<font color = \"red\"> [ File not found ]</font>";
       
   432   }
       
   433   
       
   434   return ($iOnlyResult, $iOnlyTimes, $iTechViewResult, $iTechViewTime, $iOnlyResultError, $iTechViewResultError, $iExportError);
       
   435 }
       
   436 
       
   437 ##########################################################################
       
   438 #
       
   439 # Name    : generatesPostBuildSummary()
       
   440 # Synopsis: Creates Post Build Table in Build Results.
       
   441 # Inputs  : Function parameters returned from genResult.pm that are to be
       
   442 #           implemented in the Post Build Results table.
       
   443 #	
       
   444 # Outputs : HTML code that will be part of the HTML report generated 
       
   445 #           for the final build results table.
       
   446 ##########################################################################
       
   447 sub generatesPostBuildSummary{
       
   448 
       
   449 my ($iLogsPublishLocation, $iLinkPathLocation, $iProduct, $iSnapshot, $imail) = @_;
       
   450 my @CDBResArr = &CDBFileTest($iLinkPathLocation, $iProduct, $iSnapshot, $imail);
       
   451 my @CBRResTime = &CBRTime($iLogsPublishLocation, $iProduct, $iSnapshot);
       
   452 my @AVResults = &getAVResults($iLogsPublishLocation);
       
   453 my $SidVidReportURL =  &getSidVidResults($iLogsPublishLocation);
       
   454 
       
   455 my $SidVidReportResult = "SID/VID report generated.";
       
   456 
       
   457 if( $SidVidReportURL =~ /WARNING/){
       
   458     $SidVidReportResult = $SidVidReportURL;
       
   459     $SidVidReportURL    = "&nbsp"; 
       
   460 }
       
   461 
       
   462 my $postbuild_html = "\n
       
   463                      <br><table border=\"1\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">
       
   464 
       
   465         <tr>
       
   466 
       
   467                 <td align=\"center\" colspan=\"4\" bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>Post Build Results</font></td>
       
   468 
       
   469         </tr>
       
   470         
       
   471         <tr>
       
   472         
       
   473                 <td bgcolor=\"#006699\">&nbsp</td>
       
   474 
       
   475                 <td bgcolor=\"#006699\">&nbsp</td>
       
   476                 
       
   477                 <td bgcolor=\"#006699\">&nbsp</td>
       
   478                 
       
   479                 <td align=\"center\" bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>Defects</font></td>        
       
   480         
       
   481         </tr>
       
   482 
       
   483         <tr>
       
   484 
       
   485                 <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>AntiVirus</font></td>
       
   486 
       
   487                 <td > " . $AVResults[0] . " </td>
       
   488                 
       
   489                 <td>&nbsp<b>" . $AVResults[1] . " </td>
       
   490                 
       
   491                 <td>&nbsp<b>" . $AVResults[2] . " </td>
       
   492 
       
   493         </tr>
       
   494         
       
   495         <tr>
       
   496         
       
   497                 <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>SID VID Reports</font></td>
       
   498          
       
   499                 <td>".$SidVidReportResult."</td>
       
   500                 <td>".$SidVidReportURL."</td>
       
   501                 <td>&nbsp</td>
       
   502 
       
   503          </tr>       
       
   504 
       
   505         <tr>
       
   506 
       
   507                 <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>
       
   508 
       
   509                 <td>Total Number of Breaks: <b> " . $CDBResArr[0] . " </td>
       
   510 
       
   511                 <td>Breaks at Published Partner and Above: <b> " . $CDBResArr[1] . " </td>
       
   512                 
       
   513                 <td>&nbsp<b>" . "<font color=\"Red\" size=\"2\">" . $CDBResArr[4] . "  </td>
       
   514 
       
   515         </tr>
       
   516 
       
   517         <tr>
       
   518 
       
   519                 <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>
       
   520 
       
   521                 <td>Total Number of Breaks: <b> " . $CDBResArr[2] . " </td>
       
   522 
       
   523                 <td>Breaks at Published Partner and Above: <b> " .$CDBResArr[3] . " </td>
       
   524 
       
   525 		<td>&nbsp<b>" . "<font color=\"Red\" size=\"2\">" . $CDBResArr[5] . " </td>
       
   526 
       
   527           </tr>";
       
   528         
       
   529         # If it is a test build then do not evaluate the CBR Export time component, else implement the export table.
       
   530           
       
   531          if(GenResult::isTestBuild() eq "0"){
       
   532           
       
   533           $postbuild_html=$postbuild_html."
       
   534                   
       
   535           <tr>
       
   536                 <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>[CBR Export] GT_Only</td>
       
   537 
       
   538                 <td>Status: <b> " . $CBRResTime[0] . " </td>
       
   539 
       
   540                 <td>Time of Export: <b> " . $CBRResTime[1]  . " </td>
       
   541 
       
   542 		<td>&nbsp<b> " . $CBRResTime[4] . "</td>
       
   543 
       
   544         </tr>
       
   545         <tr>
       
   546 
       
   547                 <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>[CBR Export] TechView</td>
       
   548 
       
   549                 <td>Status: <b> " . $CBRResTime[2] . " </td>
       
   550 
       
   551                 <td>Time of Export: <b> " . $CBRResTime[3]  . " </td>
       
   552                 
       
   553                 <td>&nbsp<b> " . $CBRResTime[5] . "</td>
       
   554 
       
   555         </tr>
       
   556         <tr>
       
   557         
       
   558                 <td bgcolor=\"#006699\"><font color=\"#FFFFFF\" size=\"2\"><b>Record Delivery Errors</td>
       
   559          
       
   560                 <td>&nbsp <b> " . $CBRResTime[6] . " </td>
       
   561 	       	<td>&nbsp</td>
       
   562 		<td>&nbsp</td>
       
   563 		
       
   564          </tr>       
       
   565         
       
   566         </table>
       
   567         <br>
       
   568                      ";
       
   569          }
       
   570          else{
       
   571           $postbuild_html=$postbuild_html."
       
   572           </table>
       
   573         <br>";
       
   574          }
       
   575 return $postbuild_html;
       
   576 }
       
   577 
       
   578 1;