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 = " "; |
|
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\"> </td> |
|
474 |
|
475 <td bgcolor=\"#006699\"> </td> |
|
476 |
|
477 <td bgcolor=\"#006699\"> </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> <b>" . $AVResults[1] . " </td> |
|
490 |
|
491 <td> <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> </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> <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> <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> <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> <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>  <b> " . $CBRResTime[6] . " </td> |
|
561 <td> </td> |
|
562 <td> </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; |
|