Initial add of defaria.com
[clearscm.git] / defaria.com / GD / Rantest / TestStats.php
1 <?php
2 ////////////////////////////////////////////////////////////////////////////////
3 //
4 // File:        TestStats.php
5 // Revision:    1.2
6 // Description: Produce a report or chart of the test statistics
7 // Author:      Andrew@ClearSCM.com
8 // Created:     Mon Apr 28 15:20:06 MST 2008
9 // Modified:    
10 // Language:    PHP
11 //
12 // (c) Copyright 2008, General Dynamics, all rights reserved.
13 //
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.
16 //
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
22 // 5230.25.
23 //
24 ////////////////////////////////////////////////////////////////////////////////
25 $script = basename ($_SERVER["PHP_SELF"]);
26
27 include_once "$_SERVER[DOCUMENT_ROOT]/php/Utils.php";
28 include_once "$_SERVER[DOCUMENT_ROOT]/php/RantestDB.php";
29
30 $start          = $_REQUEST["start"];
31 $end            = $_REQUEST["end"];
32 $user           = $_REQUEST["user"];
33
34 $action         = (empty ($_REQUEST["action"]))    ? "Report"     : $_REQUEST["action"];
35 $type           = (empty ($_REQUEST["type"]))      ? "All"        : $_REQUEST["type"];
36 $sortBy         = (empty ($_REQUEST["sortBy"]))    ? "Date"       : $_REQUEST["sortBy"];
37 $direction      = (empty ($_REQUEST["direction"])) ? "descending" : $_REQUEST["direction"];
38
39 function getData ($start, $end) {
40   global $sortBy;
41
42   $data = getStatus ($start, $end);
43
44   // Sort data
45   if ($sortBy == "Passed") {
46     uasort ($data, "sortSuccess");
47   } elseif ($sortBy == "Failed") {
48     uasort ($data, "sortFailure");
49   } elseif ($sortBy == "Total") {
50     uasort ($data, "sortTotal");
51   } else {
52     uasort ($data, "sortDate");
53   } // if
54
55   return $data;
56 } // getData
57
58 function exportStats ($start, $end) {
59   $title        = "Test Statistics from $start to $end";
60   $filename     = "Test Statistics." . $start . "." . $end . ".csv";
61
62   header ("Content-Type: application/octect-stream");
63   header ("Content-Disposition: attachment; filename=\"$filename\"");
64
65   print exportCSV (getData ($start, $end), $title);
66
67   exit;
68 } // exportStats
69
70 function createHeader () {
71   global $start, $end;
72
73   $header = <<<END
74 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
75    "http://www.w3.org/TR/html4/strict.dtd">
76 <html>
77 <head>
78   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
79   <link rel="stylesheet" type="text/css" media="screen" href="/css/Testing.css">
80   <link rel="stylesheet" type="text/css" media="screen" href="/css/Tables.css">
81   <title>Test Statistics from $start to $end></title>
82 </head>
83 <body>
84 END;
85
86   $header .= banner ();
87   $header .= <<<END
88 <h1 align="center">Test Statistics from $start to $end</h1>
89 END;
90
91   return $header;
92 } // createHeader
93
94 function CreatePage ($start, $end, $forEmail = false, $message = "") {
95   global $sortBy, $direction, $script;
96
97   $data = getData ($start, $end);
98
99   $row_nbr = 0;
100
101   if (!$forEmail) {
102     // Flip direction
103     $direction = ($direction == "ascending") ? "descending" : "ascending";
104     $urlParms  = "$script?start=$start&end=$end&action=$action&direction=$direction&sortBy";
105
106     if ($sortBy == "Passed") {
107       $passedDirection = ($direction == "ascending") 
108         ? "<img src=/images/down.png align=absmiddle border=0>"
109         : "<img src=/images/up.png border=0>";
110     } elseif ($sortBy == "Failed") {
111       $failedDirection = ($direction == "ascending") 
112         ? "<img src=/images/down.png border=0>"
113         : "<img src=/images/up.png align=absmiddle border=0>";
114     } elseif ($sortBy == "Total") {
115       $totalDirection = ($direction == "ascending") 
116         ? "<img src=/images/down.png border=0>"
117         : "<img src=/images/up.png align=absmiddle border=0>";
118     } else {
119       $dateDirection = ($direction == "ascending") 
120         ? "<img src=/images/down.png border=0>"
121         : "<img src=/images/up.png align=absmiddle border=0>";
122     } // if
123
124     if (isset ($message)) {
125       $page .= "<div align=center>$message</div>";
126     } // if
127   } // if
128
129   $page .= <<<END
130 <table align=center width=60%>
131   <thead>
132 END;
133
134   if (!$forEmail) {
135     $page .= <<<END
136     <tr>
137       <th class=clear align="left" colspan="2"><a href="$script?action=Export&start=$start&end=$end"><input type="submit" value="Export to CSV"></a>&nbsp;<a href="$script?action=Graph&start=$start&end=$end"><input type="submit" value="Graph"></a></th>
138       <th class=clear align="right" colspan="2"><form action="$script?action=Mail&start=$start&end=$end" method="post">
139 END;
140
141     $page .= emailUsersDropdown ();
142     $page .= <<<END
143         </select>
144         <input type="submit" value="Send"></form>
145       </th>
146     </tr>
147 END;
148   } // if
149
150   $page .= <<<END
151     <tr>
152       <th class=left><a href="$urlParms=Date">Date&nbsp;$dateDirection</a></th>
153       <th><a href="$urlParms=Passed">Total Passed&nbsp;$passedDirection</a></th>
154       <th><a href="$urlParms=Failed">Total Failed&nbsp;$failedDirection</a></th>
155       <th class=right><a href="$urlParms=Total">Total Run&nbsp;$totalDirection</a></th>
156     </tr>
157   </thead>
158   <tbody>
159 END;
160
161   foreach ($data as $result) {
162     $reportDate = YMD2MDY ($result["Date"]);
163     $row_color = ($row_nbr++ % 2 == 0) ? " class=other" : " class=white";
164
165     $page .= <<<END
166     <tr $row_color>
167       <td align=center><a href="rantest.php?day=$reportDate">$reportDate</a></td>
168       <td align=right>$result[Success]</td>
169       <td align=right>$result[Failure]</td>
170       <td align=right>$result[Total]</td>
171     </tr>
172 END;
173   } // foreach
174
175   $page .= <<<END
176   </tbody>
177 </table>
178 END;
179
180   return $page;
181 } // CreatePage
182
183 function displayReport ($start, $end, $message = "") {
184   print createHeader    ($start, $end);
185   print createPage      ($start, $end, false, $message);
186
187   copyright ();
188 } // displayReport
189
190 function displayChart ($start, $end) {
191   global $testTypes, $type;
192
193   print createHeader ($start, $end);
194
195   $days = getdays();
196
197   print <<<END
198     <div align="center">
199       <form action="TestStats.php">
200       Type: <select name="type" class="inputfield">
201 END;
202
203     foreach ($testTypes as $t) {
204       if ($type != $t) {
205         print "<option>$t</option>";
206       } else {
207         print "<option selected=\"selected\">$t</option>";
208       } // if
209     } // foreach
210
211   print <<<END
212     </select>
213     From:
214         <select name=start class=inputfield>
215 END;
216
217   foreach ($days as $day) {
218     print "<option";
219
220     if ($day == $start) {
221       print " selected=selected";
222     } // if
223
224     print ">$day</option>\n";
225   } // foreach
226
227   print <<<END
228         </select> To: 
229         <select name=end class=inputfield>
230 END;
231
232   foreach ($days as $day) {
233     print "<option";
234
235     if ($day == $end) {
236       print " selected=selected";
237     } // if
238
239     print ">$day</option>\n";
240   } // foreach
241
242   print <<<END
243         </select>
244           <input type=submit name="action" value="Graph">&nbsp;<a href="$script?action=Report&start=$start&end=$end"><input type="submit" value="Report"></a><br><br>
245       </form>
246         <img src="GraphStats.php?start=$start&end=$end&type=$type">
247     </div>
248 END;
249
250   copyright ();
251 } // displayChart
252
253 function mailTestStatsReport ($start, $end, $pnbr, $username) {
254   $subject      = "Test Statistics from $start to $end";
255   $filename     = "TestStats.$start-$end.csv";
256   $body         = createPage ($start, $end, true);
257   $attachment   = exportCSV (getData ($start, $end), $subject);
258
259   return mailReport ($pnbr, $username, $subject, $body, $filename, $attachment);
260 } // mailReport
261
262 if (MDY2YMD ($start) > MDY2YMD ($end)) {
263   Error ("<b>Start Date</b> must come before <b>End Date</b>");
264   return;
265 } // if
266
267 openDB ();
268
269 switch ($action) {
270   case "Graph":
271     displayChart ($start, $end);
272     break;
273
274   case "Export":
275     exportStats ($start, $end);
276     break;
277
278   case "Mail":
279     list ($pnbr, $username) = explode (":", $user);
280     displayReport ($start, $end, mailTestStatsReport ($start, $end, $pnbr, $username));
281     break;
282
283   default:
284     displayReport ($start, $end);
285
286     break;
287 } // switch  
288 ?>
289 </body>
290 </html>