2 ////////////////////////////////////////////////////////////////////////////////
4 // File: FailureAnalysis.php
6 // Description: Produce a report showing an analysis of failures for a day
7 // Author: Andrew@ClearSCM.com
8 // Created: Mon Apr 28 15:20:06 MST 2008
12 // (c) Copyright 2008, General Dynamics, all rights reserved.
14 // All rights reserved except as subject to DFARS 252.227-7014 of contract
15 // number CP02H8901N issued under prime contract N00039-04-C-2009.
17 // Warning: This document contains technical data whose export is restricted
18 // by the Arms Export Control Act (Title 22, U.S.C., Sec 2751, et seq.) or the
19 // Export Administration Act of 1979, as amended, Title, 50, U.S.C., App. 2401
20 // et seq. Violations of these export laws are subject to severe criminal
21 // penalties. Disseminate in accordance with provisions of DoD Directive
24 ////////////////////////////////////////////////////////////////////////////////
25 $script = basename ($_SERVER["PHP_SELF"]);
27 include_once "$_SERVER[DOCUMENT_ROOT]/php/Utils.php";
28 include_once "$_SERVER[DOCUMENT_ROOT]/php/RantestDB.php";
30 $day = $_REQUEST["day"];
31 $user = $_REQUEST["user"];
33 $action = (empty ($_REQUEST["action"])) ? "Report" : $_REQUEST["action"];
34 $sortBy = (empty ($_REQUEST["sortBy"])) ? "Date" : $_REQUEST["sortBy"];
35 $direction = (empty ($_REQUEST["direction"])) ? "ascending" : $_REQUEST["direction"];
38 function sortTime ($a, $b) {
41 return cmpStr ($a, $b, "Time", $direction);
44 function getData ($day) {
47 $data = getFailures ($day);
50 if ($sortBy == "Testcase") {
51 uasort ($data, "sortTestcase");
52 } else if ($sortBy == "Unit") {
53 uasort ($data, "sortUnit");
55 uasort ($data, "sortTime");
61 function createCSV ($day) {
62 $data = getData ($day);
65 $csv = "Failure Analysis for $day\n";
70 foreach ($data[0] as $key => $value) {
71 // Skip "hidden" fields - fields beginning with "_"
72 if (preg_match ("/^_/", $key) == 1) {
76 if ($key == "Failures") {
78 $csv .= ",Teststep,Failure Reason";
95 foreach ($data as $entry) {
98 foreach ($entry as $key => $value) {
99 // Skip "hidden" fields - fields beginning with "_"
100 if (preg_match ("/^_/", $key) == 1) {
104 if ($key == "Failures") {
107 foreach ($value as $key => $failure) {
108 $csv .= ",$failure[Step],$failure[Reason]\n";
120 $csv .= "\"$value\"";
129 function exportStats ($day) {
130 $filename = "Test Statistics." . $day . ".csv";
132 header ("Content-Type: application/octect-stream");
133 header ("Content-Disposition: attachment; filename=\"$filename\"");
135 print createCSV ($day);
140 function createHeader ($day) {
142 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
143 "http://www.w3.org/TR/html4/strict.dtd">
146 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
147 <link rel="stylesheet" type="text/css" media="screen" href="/css/Testing.css">
148 <link rel="stylesheet" type="text/css" media="screen" href="/css/Tables.css">
149 <title>Failure Analysis for $day</title>
150 <script language="javascript">
151 function ChangeDay (day, script) {
152 window.location = script + "?day=" + day;
158 $header .= banner ();
163 function createPage ($day, $forEmail = false, $message = "") {
164 global $direction, $sortBy, $direction, $script;
166 $data = getData ($day);
167 $dateDropdown = reportDateDropdown ();
171 $page .= "<h1 align=\"center\">Failure Analysis for $dateDropdown</h1>";
174 $direction = ($direction == "ascending") ? "descending" : "ascending";
175 $urlParms = "$script?day=$day&action=$action&direction=$direction&sortBy";
177 if ($sortBy == "Testcase") {
178 $testcaseDirection = ($direction == "ascending")
179 ? "<img src=/images/down.png border=0>"
180 : "<img src=/images/up.png border=0>";
181 } else if ($sortBy == "Unit") {
182 $unitDirection = ($direction == "ascending")
183 ? "<img src=/images/down.png border=0>"
184 : "<img src=/images/up.png border=0>";
186 $timeDirection = ($direction == "ascending")
187 ? "<img src=/images/down.png border=0>"
188 : "<img src=/images/up.png border=0>";
191 if (isset ($message)) {
192 $page .= "<div align=center>$message</div>";
195 $page .= "<h1 align=\"center\">Failure Analysis for $day</h1>";
199 <table align=center width=90%>
206 <th class="clear" align="left"><a href="$script?action=Export&day=$day"><input type="submit" value="Export to CSV"></a></th>
207 <th class="clear" colspan="2"
208 align="right"><form action="$script?action=Mail&day=$day" method="post">
211 $page .= emailUsersDropdown ();
214 <input type="submit" value="Send"></form>
222 <th class=left><a href="$urlParms=Testcase">Testcase $testcaseDirection</a></th>
223 <th><a href="$urlParms=Unit">Unit $unitDirection</a></th>
224 <th class=right><a href="$urlParms=Time">Time $timeDirection</a></th>
227 <th width="100px"> </th>
229 <th>Failure Reason</th>
235 foreach ($data as $result) {
236 $row_color = " class=other";
238 $unit = ($result["Unit"]) ? $result["Unit"] : "";
239 $time = ($result["Time"]) ? $result["Time"] : "";
243 <td><a href="rantest.php?testName=$result[Testcase]&runid=$result[_runid]&date=$result[Date]">$result[Testcase]</a></td>
244 <td align=right>$unit</td>
245 <td align=right>$time</td>
249 foreach ($result["Failures"] as $failure) {
250 $step = $failure["Step"];
251 $reason = $failure["Reason"];
270 function displayReport ($day, $message = "") {
271 print createHeader ($day);
272 print createPage ($day, false, $message);
277 function mailFailureAnalysisReport ($day, $pnbr, $username) {
278 $subject = "Failure Analysis for $day";
279 $body = createPage ($day, true);
280 $filename = "FailureAnalysis.$day.csv";
281 $attachment = createCSV ($day);
283 return mailReport ($pnbr, $username, $subject, $body, $filename, $attachment);
284 } // mailFailureAnalysisReport
294 list ($pnbr, $username) = explode (":", $user);
295 displayReport ($day, mailFailureAnalysisReport ($day, $pnbr, $username));
299 displayReport ($day);