]> git.pld-linux.org Git - projects/buildlogs.git/blame - index.php
Tail more is no more 100 last lines. It is not 'from the first error until the end...
[projects/buildlogs.git] / index.php
CommitLineData
a7f1713c 1<?php
2ob_start("ob_gzhandler", 1);
3$buildlogs_server = "buildlogs.pld-linux.org";
a6cc6dd6 4$url = "index.php";
a7f1713c 5$fail_or_ok = array( "FAIL", "OK" );
6/*
9dcdc6b4 7$database = 'sqlite:/home/services/ftp/buildlogs2.db';
a7f1713c 8$root_directory = "/home/services/ftp/pub/pld-buildlogs";
9*/
10
11// $database, $root_directory and others are taken from buildlogs.inc
f27dac56 12include('buildlogs.inc');
a7f1713c 13
14/* It should be set */
15
16$langs["en_US"]["charset"]="ISO-8859-1";
17$langs["pl_PL"]["charset"]="ISO-8859-2";
18
19$lang="en_US";
20if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]))
21{
22 $rows=explode(";",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
23 $rows=explode(",",$rows[0]);
24 $lang_detected=rtrim($rows[0]);
25} else if (preg_match("/opera/i",$_SERVER["HTTP_USER_AGENT"]))
26{
27 $lang_detected=preg_replace("/.*\[(.*)\].*/i","\\1",$_SERVER["HTTP_USER_AGENT"]);
28}
29
30// FIXME - some array
31$lang_detected=preg_replace("/^pl$/i","pl_PL",$lang_detected);
32
33if (isset($lang_detected) && isset($langs[$lang_detected]))
34{
35 $lang=$lang_detected;
36}
37
38if (isset($_GET["lang"]))$_SESSION["lang"]=$_GET["lang"];
39if (isset($_SESSION["lang"]))$lang=$_SESSION["lang"];
40
41putenv("LANG=$lang");
42setlocale(LC_ALL,$lang);
43bindtextdomain("messages","locale");
44textdomain("messages");
45
46if (isset($_GET["dist"]) && isset($_GET["arch"]))
47{
48 $dist = basename($_GET["dist"]);
49 $arch = basename($_GET["arch"]);
50}
51
52if (isset($_POST["dist"])) $dist = basename($_POST["dist"]);
53if (isset($_POST["arch"])) $arch = basename($_POST["arch"]);
54
55if (isset($_GET["name"])) {
8f0e31ba 56 $name_url = urlencode($_GET["name"]);
a7f1713c 57 $name = basename($_GET["name"]);
58}
59if (isset($_GET["ok"]))$ok=(int)$_GET["ok"];
60else $ok="";
61if (isset($_GET["ns"]))$ns=(int)$_GET["ns"];
62else $ns="";
63if (isset($_GET["cnt"]))$cnt=(int)$_GET["cnt"];
64else $cnt = 50;
65if (isset($_GET["action"]))$action=$_GET["action"];
66else $action="";
67if (isset($_GET["off"]))$off=(int)$_GET["off"];
68else $off = 0;
69if (isset($_GET["id"]))$id=$_GET["id"];
70
71if (isset($_POST["str"]))$str=$_POST["str"];
72if (isset($_POST["action"]))$action=$_POST["action"];
73
dbb4d4ae
AM
74if ($arch == "src")
75 $arch = "SRPMS";
76
a7f1713c 77function myheader()
78{
79echo '<' . '?xml version="1.0" encoding="' . _("ISO-8859-1") .'"?' . ">\n";
80echo '<' . '?xml-stylesheet href="#internalStyle" type="text/css"?' . ">\n";
81?>
82<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
83 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
84<html xmlns="http://www.w3.org/1999/xhtml">
85 <head>
86 <title>PLD Build Logs</title>
87 <?php echo '<meta http-equiv="Content-type" content="text/html; charset=' . _("ISO-8859-1") .'"/>' ."\n";?>
88 <style type="text/css"><!--
89A { text-decoration: none; }
90A:hover { text-decoration: underline; }
2ba2cc91
ER
91H1 { font-family: arial,helvetica,sans-serif;
92 font-size: 20pt;
a7f1713c 93 font-weight: bold;}
2ba2cc91
ER
94H2 { font-family: arial,helvetica,sans-serif;
95 font-size: 18pt;
a7f1713c 96 font-weight: bold;}
2ba2cc91 97BODY,TD { font-family: arial,helvetica,sans-serif;
a7f1713c 98 font-size: 13pt; }
2ba2cc91
ER
99TH { font-family: arial,helvetica,sans-serif;
100 font-size: 13pt;
a7f1713c 101 font-weight: bold; }
2ba2cc91
ER
102/* error lines from build logs */
103.error {
104 background-color: #b00;
105}
e926de50
ER
106.verbose {
107 color: #886;
108}
109.section {
110 color: #111;
111 background-color: #161;
112}
a7f1713c 113//-->
114</style>
115 </head>
116 <!-- Diffrent color for visited link doesn't make much sense here...
117 this page is autogenerated and it might be misleading after some
118 build log changes. -->
119 <body bgcolor="#ffffff" text="#000000" link="#5f26cd" vlink="#5f26cd">
120<?php
121}
122
123function start_pre()
124{
125 echo "<table cellpadding=\"10\"><tr><td bgcolor=\"#000000\">".
126 "<font color=\"#cccccc\"><pre style=\"width: 2048px;overflow: scroll\">";
127}
128
129function end_pre()
130{
131 echo "</pre></font></td></tr></table>\n";
132}
133
134function trailer()
135{
136 echo "</body></html>";
137}
138
139
140function mydie($msg)
141{
142 echo "Fatal error: $msg";
143}
144
145
146
147function list_logs()
148{
149 global $database;
150 global $arch, $dist, $ok;
151 global $big_url, $ns;
152 global $off, $cnt, $root_directory, $url;
153
154 $big_url = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
155
156 if ($ok == 1) {
157 echo "<h1>"._("Listing of")." $dist/$arch/OK "
158 ."(<a href=\"$big_url&amp;ok=0\">"._("fail")."</a>)</h1>\n";
159 } else {
160 echo "<h1>"._("Listing of")." $dist/$arch/FAIL "
161 ."(<a href=\"$big_url&amp;ok=1\">"._("ok")."</a>)</h1>\n";
162 }
163
164 echo "<div align=\"center\"><table cols=\"4\" border=\"0\" cellspacing=\"1\" ".
165 "cellpadding=\"3\" bgcolor=\"#000000\" width=\"90%\">\n";
166 echo "<tr><th bgcolor=\"#CCCCFF\" align=\"right\" width=\"1%\">"._("No.")."</th>".
167 "<th bgcolor=\"#CCCCFF\" align=\"left\" width=\"80%\">"._("Log File").
168 "[<a href=\"$big_url&amp;ns=1\">"._("sort")."</a>]</th>".
169 "<th bgcolor=\"#CCCCFF\" align=\"right\" width=\"15%\">"._("Size")."</th> ".
170 "<th bgcolor=\"#CCCCFF\" align=\"left\">"._("Age").
171 "[<a href=\"$big_url&amp;ns=0\">"._("sort")."</a>]</th>".
172 "</tr>";
173
174 if ($ns != 1) $ns = 0;
175 if (!isset($ok)) $ok = 0;
176// if (!isset($off)) $off = 0;
177// if (!isset($cnt)) $cnt = 50;
178 if ($ns == 0) $order = "mtime DESC";
179 else $order = "name";
180
181 $query = "SELECT log_id, dist, arch, ok, name, mtime, size, id FROM logs WHERE "
182 . "dist = '$dist' AND arch = '$arch' AND ok = $ok ORDER BY $order LIMIT $cnt OFFSET $off";
183
184 try {
185 $dbh = new PDO("$database");
186 } catch (PDOException $e) {
187 mydie("new PDO: " . $e->getMessage());
188 }
189 $now = time();
190 $i = $off;
191 foreach ($dbh->query("$query") as $row) {
8f0e31ba 192 $name = $row["name"];
193 $id = $row["id"];
194 $dist = $row["dist"];
195 $arch = $row["arch"];
196 $f = $name;
197 $name_url = urlencode($name);
a7f1713c 198 $t = $now - $row["mtime"];
199 $s = $row["size"];
200 $h = $row["log_id"];
201
202 $t /= 60;
203 if ($t >= 60) {
204 $t /= 60;
205 if ($t >= 24) {
206 $t /= 24;
207 $t = round($t);
208 $t = $t . "&nbsp;" . ngettext("day","days",$t);
209 } else {
210 $t = round($t);
211 $t = $t . "&nbsp;" . ngettext("hour","hours",$t);
212 }
213 } else {
214 $t = round($t);
215 $t = $t . "&nbsp;" . ngettext("minute","minutes",$t);
216 }
8f0e31ba 217 $u = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;name=$name_url&amp;id=$id";
a7f1713c 218 echo "<tr><td bgcolor=\"#CCCCCC\" align=\"right\">".($i+1).".</td>".
219 "<td bgcolor=\"#CCCCCC\"><a href=\"$u\">$f</a> ".
220 "[<a href=\"$u&amp;action=text\">"._("text")."</a> | ".
221 "<a href=\"$u&amp;action=tail\">"._("tail")."</a>]".
222 "</td><td bgcolor=\"#CCCCCC\" align=\"right\">".
223 "$s</td><td bgcolor=\"#CCCCCC\">$t</td></tr>\n";
224 $i++;
225 }
226 $count = $i - $off;
227 echo "</table></div>\n";
228
229 $backarr = "&lt;&lt;&lt;&nbsp;";
230 $back = _("Page back");
231 $forward = _("Page forward");
232 $forwardarr = "&nbsp;&gt;&gt;&gt;";
233
234 echo "<p><table width=\"90%\" align=\"center\"><tr><td align=\"left\" width=\"1%\">";
235
236 if ($off > 0) {
237 $noff = $off - $count;
238 if ($noff < 0)
239 $noff = 0;
240 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
241 echo "$hrefurl$backarr</a></td><td align=\"left\">$hrefurl$back</a>";
242 } else {
243 echo "$backarr</td><td align=\"left\">$back";
244 }
245
246 echo "</td>\n<td align=\"center\">";
247
248 if (isset($dist) && isset($arch)) {
249 echo "[<a href=\"$big_url&amp;action=qa\">"._("View <quot>rpm&nbsp;-qa</quot> of builder")."</a>]";
250 } else {
251 echo "&nbsp;";
252 }
253
254 echo "</td>\n<td align=right>";
255 if ($cnt == $count) {
256 $noff = $off + $cnt;
257 if ($noff < 0)
258 $noff = 0;
259 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
260 echo "$hrefurl$forward</a></td><td align=right width=1%>$hrefurl$forwardarr</a>";
261 } else {
262 echo "$forward</td><td align=right width=1%>$forwardarr";
263 }
264 echo "</td>\n</tr></table></p>";
265}
266
267function file_name()
268{
8f0e31ba 269 global $ok, $dist, $arch, $name, $name_url, $id;
a7f1713c 270
271 if (isset($name) && isset($ok) && isset($arch) && isset($dist)) {
272 if (isset($id) && $id != '') {
273 $name = $name . ",$id";
274 }
275 $w = $ok ? "OK" : "FAIL";
276 return "$dist/$arch/$w/$name.bz2";
277 }
278}
279
280function dump_log($tail)
281{
8f0e31ba 282 global $ok, $url, $dist, $arch, $name, $name_url;
a7f1713c 283 global $root_directory, $big_url, $ns, $id, $cnt, $off;
284 global $buildlogs_server;
285
286 $f = file_name();
287
288 if ($f == false)
289 return;
290
291 $df = preg_replace("/.*\/([^\/]*)$/", "\\1", $f);
292 $df = preg_replace("/\.(bz2|gz)$/", "", $df);
293
294 echo "<h1>$df</h1>";
295
296 echo "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#000000\">";
297
298 function one_item($h, $t) {
299 echo "<tr><td bgcolor=\"#ccccff\">$h:</td>".
300 "<td bgcolor=\"#cccccc\">$t</td></tr>";
301 }
302
303 function href($h, $c) {
304 return "<a href=\"$h\">$c</a>";
305 }
306
2ba2cc91
ER
307 one_item(_("Status"), ($ok == 1 ?
308 "<font color=\"green\"><b>"._("OK")."</b></font>" :
a7f1713c 309 "<font color=\"red\"><b>"._("Failed")."</b></a>"));
2ba2cc91
ER
310 one_item(_("Source URL"),
311 href("ftp://$buildlogs_server/$f",
a7f1713c 312 "ftp://$buildlogs_server/$f"));
313
314 $big_url = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
315 $bu = "$big_url&amp;off=$off";
316
2ba2cc91 317 one_item(_("text/plain URL"),
8f0e31ba 318 href("$bu&amp;name=$name_url&amp;id=$id&amp;action=text",
a7f1713c 319 _("View!")));
320 if ($tail) {
2ba2cc91 321 one_item(_("full text"),
8f0e31ba 322 href("$bu&amp;name=$name_url&amp;id=$id",
a7f1713c 323 _("View!")));
324 }
325
326 if (isset($dist) && isset($arch)) {
327 one_item(_("rpm -qa of builder"), href("$bu&amp;action=qa", _("View!")));
328 } else {
329 one_item(_("rpm -qa of builder"), _("Not available"));
330 }
35a4c15e 331 one_item("Date", date("Y/m/d H:i:s", filemtime("$root_directory/$f")));
a7f1713c 332 /*
2ba2cc91 333 echo "<tr><td>Here:</td><td>" .
a7f1713c 334 "<a href=\"$url?idx=$idx&amp;ok=$ok&amp;id=$id\">".
335 "http://" . getenv("SERVER_NAME") .
336 getenv("SCRIPT_NAME") . "?idx=$idx&amp;ok=$ok&amp;id=$id</a>" .
337 "</td></tr>"; */
338
a7f1713c 339
340
341 # what can I say beside PHP suxx? how the fuck should I create
342 # bidirectional pipe? gotta use wget
343
344 if (preg_match("/\.bz2$/", $f)) {
345 $filter = "bzcat";
346 } elseif (preg_match("/\.gz$/", $f)) {
347 $filter = "zcat";
348 } else {
349 $filter = "cat";
350 }
351
8f0e31ba 352 $cmd = "$filter '$root_directory/$f'";
a7f1713c 353 $fd = popen($cmd, "r");
e926de50 354 $toc = array();
e69f53b7 355 $err = array();
283f4590 356 $err_count = 0;
b530f30e 357 $time = "";
e69f53b7 358 $out_buf = array();
a7f1713c 359 while (($s = fgets($fd, 102400)) != false) {
360 if (strlen($s) > 800) {
361 $s = chunk_split($s, 800, "\n ");
362 $s = trim($s);
363 }
e69f53b7
AM
364
365 $toc_elem = false;
366 $err_elem = false;
367
a7f1713c 368 $s = htmlspecialchars($s);
2ba2cc91 369 // highlight errors
1c26089b 370 if (preg_match("/(?:fail|error(s|\sCS\d+)?):/i", $s)) {
283f4590 371 $err_count++;
e69f53b7
AM
372 $toc_elem = "error $err_count";
373 $err_elem = $s;
374 $s = "<span class=error id=error-$err_count>$s</span>";
375 } elseif (preg_match("/(?:undefined reference to)/i", $s)) {
376 $err_count++;
377 $toc_elem = "error $err_count";
378 $err_elem = $s;
98e99288 379 $s = "<span class=error id=error-$err_count>$s</span>";
1c26089b
ER
380 } elseif (preg_match("#^\+ /usr/bin/make\b.*\b(?P<target>check)\b#", $s, $m)) {
381 // rpm build section
e69f53b7
AM
382 $toc_elem = "make {$m['target']}";
383 $err_elem = $s;
1c26089b 384 $s = "<span class=line id=make-{$m['target']}>$s</span>";
e926de50
ER
385 } elseif (substr($s, 0, 2) == "+ ") {
386 // shell verbose
387 $s = "<span class=verbose>$s</span>";
388 } elseif (preg_match("/^Executing\(%(?P<section>\w+)\)/", $s, $m)) {
389 // rpm build section
e69f53b7
AM
390 $toc_elem = $m['section'];
391 $err_elem = $s;
98e99288 392 $s = "<span class=section id={$m['section']}>$s</span>";
901abf2c
ER
393 } elseif (preg_match("/^Processing files: (?P<pkg>(?P<name>.+)-[^-]+-[^-]+)/", $s, $m)) {
394 // processing files
e69f53b7
AM
395 $toc_elem = "files ".$m['name'];
396 $err_elem = $s;
98e99288 397 $s = "<span class=section id=files-{$m['name']}>$s</span>";
b530f30e
ER
398 } elseif (preg_match("/^ended at: (?P<date>.+), done in (?P<time>[\d:.]+)/", $s, $m)) {
399 $time = $m['time'];
2ba2cc91 400 }
e69f53b7
AM
401
402 // if (not in tail mode) or (in tail mode but we have an error)
403 if ($err_count || !$tail) {
404 if ($toc_elem)
405 $toc[] = $toc_elem;
406 if ($err_elem)
407 $err[] = $err_elem;
408 $out_buf[] = $s;
409 }
a7f1713c 410 }
a7f1713c 411 pclose($fd);
e69f53b7
AM
412
413 $code = join(' ', $out_buf);
e926de50 414
b530f30e
ER
415 if ($time) {
416 one_item(_("Runtime"), $time);
417 }
418
f43fc7b7
ER
419 echo "</table>";
420
e926de50
ER
421 if (!empty($toc)) {
422 echo "<h2>"._("Toc:")."</h2>";
423 echo "<ul class=toc>";
98e99288 424 foreach ($toc as $i => $section) {
901abf2c
ER
425 $id = str_replace(" ", "-", $section);
426 echo "<li><a href=#{$id}>{$section}</a></li>";
98e99288 427 echo "<code>{$err[$i]}</code>";
e926de50
ER
428 }
429 echo "</ul>";
430 }
431
432 echo "<h2>"._("Content:")."</h2>";
433
434 start_pre();
435 echo $code;
436 end_pre();
a7f1713c 437
438?>
439 <table width="100%">
440 <tr>
441 <td align=left>
442 [<a href="<?php echo $bu; ?>"><?=_("Back to list of logs")?></a>]
443 </td>
444 <td align=right>
2ba2cc91 445 [<a href="<?php echo "$bu&amp;action=qa"
a7f1713c 446 ?>"><?=_("View rpm -qa of builder")?></a>]
447 </td>
448 </tr>
449 </table>
450<?php
451
452}
453
454function dump_text()
455{
456 global $root_directory;
457 global $buildlogs_server;
458
459 header("Content-type: text/plain");
460
461 $f = file_name();
462 if ($f == false)
463 return;
464
465 echo "# src : ftp://$buildlogs_server/$f\n";
2ba2cc91 466 echo "# date : " .
a7f1713c 467 date("Y/m/d H:i:s", filemtime("$root_directory/$f")) . "\n";
468
469 if (preg_match("/\.bz2$/", $f)) {
470 $filter = "bzcat";
471 } elseif (preg_match("/\.gz$/", $f)) {
472 $filter = "zcat";
473 } else {
474 $filter = "cat";
475 }
476
8f0e31ba 477 $cmd = "$filter '$root_directory/$f'";
a7f1713c 478 $fd = popen($cmd, "r");
479 while (($s = fgets($fd, 1000)) != false) {
480 echo $s;
481 }
482 pclose($fd);
483}
484
485function list_archs()
486{
487 global $addr, $url, $cnt,$ok,$ns;
488
489 if (!isset($cnt))
490 $cnt = 50;
491
492 $big_url = "$url?ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
493
494 echo "<table width=\"100%\" border=\"0\">\n";
495 echo "<tr><td bgcolor=\"#cccccc\" nowrap=\"nowrap\">"._("Failed")."</td><td bgcolor=\"#cccccc\">"._("Ok")."</td></tr>\n";
8f0e31ba 496 foreach ($addr as $dist => $ddist) {
506bb488 497 foreach ($ddist as $arch) {
a7f1713c 498 echo "<tr><td nowrap=\"nowrap\">".
506bb488 499 "<a href=\"$url?dist=$dist&amp;arch=$arch&amp;ok=0&amp;cnt=$cnt\">
500 $dist/$arch</a></td><td nowrap=\"nowrap\">".
a7f1713c 501 "[<a href=\"$url?dist=$dist&amp;arch=$arch&amp;ok=1&amp;cnt=$cnt\">OK</a>]</td>".
502 #"<td>[<a href=\"$url?idx=$i&amp;action=qa\">qa</a>]</td>".
503 "</tr>\n";
506bb488 504 }
a7f1713c 505 }
506 echo "</table><hr />\n";
507
508 echo "<div align=\"center\">";
509 echo "<a href=\"$big_url&amp;action=adv_search\">"._("Advanced Search")."</a><br />\n";
510
511 echo "<a href=\"$url\">main()</a><hr />\n";
512 echo "<a href=\"http://www.pld-linux.org/\"><img src=\"powpld.png\" ".
513 "alt=\""._("Powered by PLD Linux")."\" border=\"0\" /></a><br />\n" .
514 "<small>(c) 2002 ".
515 "<a href=\"mailto:feedback@pld-linux.org\">PLD&nbsp;Team</a><br />\n".
e69f53b7 516 '$Revision: 1.23 $'.
a7f1713c 517 "</small></div>\n";
518
519 # smile ;)
520 echo "<div align=\"center\"><small>";
521 $pow = array("vim", "php", "brain", "power", "electricity",
522 "coffee", "ufo", "penguin", "GNOME", "ELF", "DWARF",
523 "voodoo magic", "Linux", "x-files", "X", "foobar",
2ba2cc91 524 "/dev/null", "/dev/zero", "/dev/drzewo",
a7f1713c 525 "Leppe'", "matrix", "Neo", "PDP-11",
526 "Ken", "GNU antilope", "PDP-7", "ITS", "Multics",
2ba2cc91 527 "foobarbaz", "ed", "Joe", "Unix conspiracy",
a7f1713c 528 "overclock", "The Right Thing",
529 "The Bad Thing", "Star Treck", "NSA", "NASA",
530 "achelon", "VAX", "Real Programmer",
531 "Real Operating System", "Real Computer",
532 "computron", "bogon", "quantum bogodynamics",
533 "BOFH", "/dev/ill", "nasi tu byli",
534 "Paranoid Android", "Lunatic Corp", "Parallel thinking",
535 "sfistak", "Linus", "The Golden Path", "Dark Side of the Force",
536 "Przewodniczacego Lepper-a", "KDE", "Microsoft Windows 2003", "sqlite3",
3cf4f3e8 537 "synergy", "six Cray XMT Supercomputers"
a7f1713c 538 # feel free to add sth if you change this file ;)
539 );
540 echo _("Powered by")." ";
541 $max = 1;
542 for ($i = 0; $i < $max; $i++) {
543 $x = rand(0, count($pow) - 1);
544 if ($pow[$x] == "") $i--;
545 else echo $pow[$x] . ($i == $max - 1 ? "." : ", ");
546 $pow[$x] = "";
547 }
548 echo "</small></div>";
549
774eb927
AM
550 echo "<div align=\"center\"><small>";
551 echo "Your IP: " . $_SERVER['REMOTE_ADDR'];
552 echo "</small></div>";
553
a7f1713c 554 if (isset($dist) && isset($arch)) {
a6cc6dd6 555 echo "<form action=\"index.php\" method=\"post\">";
a7f1713c 556 echo "<input type=\"hidden\" name=\"dist\" value=\"$dist\" />";
557 echo "<input type=\"hidden\" name=\"arch\" value=\"$arch\" />";
558 echo "<input type=\"hidden\" name=\"action\" value=\"sqa\" />";
559 echo "<input type=\"text\" size=\"14\" name=\"str\" /><br />";
560 echo "<input type=\"submit\" name=\"submit\" value=\""._("Search rpmqa!")."\" />";
561 echo "</form>";
562 }
563}
564
565function get_qa()
566{
567 global $dist, $arch;
568
569 if (!isset($dist) || !isset($arch))
570 return false;
f0694a44 571 $addr = "http://ftp1.pld-linux.org/dists/$dist/.stat/builder/$dist/rpmqa-$arch.txt";
a7f1713c 572 return fopen("$addr", "r");
573}
574
575function search_qa()
576{
577 global $url, $str, $dist, $arch;
578
579 $f = get_qa();
580 echo "<h1>"._("Search results for")." '$str' "._("in")." $dist/$arch</h1>";
581
582 start_pre();
583
584 if ($f == 0) {
585 echo _("Sorry, cannot open.");
586 } else {
587 while (($s = fgets($f, 1000)) != false) {
588 if (stristr($s, $str))
589 echo $s;
590 }
591 echo "/* EOF */";
592 }
593 end_pre();
594}
595
596function dump_qa($plain)
597{
598 global $url, $dist, $arch;
599
600 $f = get_qa();
601
602 if ($plain) {
2ba2cc91 603 header("Content-type: text/plain");
a7f1713c 604 echo _("# rpm -qa of")." $dist/$arch\n";
605 } else {
606 echo "<h1>"._("rpm -qa of")." $a</h1>";
607 echo "<a href=\"$url?dist=$dist&amp;arch=$arch&amp;action=qatxt\">"._("text/plain version")."</a>";
608 start_pre();
609 }
610
611 if ($f == 0) {
612 echo _("Sorry, cannot open.");
613 } else {
614 while (($s = fgets($f, 1000)) != false) {
615 echo $s;
616 }
617 }
618
619 if (!$plain)
620 end_pre();
621}
622
623
624function adv_search()
625{
626 global $database, $addr, $fail_or_ok, $url, $_POST, $off, $cnt, $root_directory, $ok, $ns;
627
628 $big_url = "$url?ok=$ok&amp;ns=$ns&amp;cnt=$cnt";
629
630 echo "<script><!--\n".
631 "function checkboxToggle() {\n".
632 "for (var i=0;i<document.forms[0].elements.length;i++) {\n".
633 "var e = document.forms[0].elements[i];\n".
634 "if ((e.name != 'all') && (e.type=='checkbox'))\n".
635 "e.checked = document.forms[0].all.checked;\n".
636 "}\n }\n -->\n </script>\n";
637
638/* Shut up warnings */
8f0e31ba 639 if (!isset($_POST["n2"])) $_POST["n2"] = "";
a7f1713c 640 if (!isset($_POST["age1"])) $_POST["age1"] = "";
641 if (!isset($_POST["age2"])) $_POST["age2"] = "";
642 if (!isset($_POST["size1"])) $_POST["size1"] = "";
643 if (!isset($_POST["size2"])) $_POST["size2"] = "";
644
a6cc6dd6 645 echo "<form action=\"index.php?action=adv_search\" method=\"post\">";
a7f1713c 646
647 echo "<div align=\"center\">";
648 echo "<table border=\"0\">\n";
649 echo "<tr>\n";
650 echo "<td>"._("Package name")."</td>\n";
8f0e31ba 651 echo "<td><input type=\"text\" size=\"20\" name=\"n2\" value=\"". $_POST["name"] ."\"/></td>\n";
a7f1713c 652 echo "</tr>\n";
653
654 echo "<tr>\n";
655 echo "<td>"._("Days")."</td>\n";
656 echo "<td>"._("From").": <input type=\"text\" size=\"20\" name=\"age1\" value=\"". $_POST["age1"] ."\" /></td>\n";
657 echo "<td>"._("To").": <input type=\"text\" size=\"20\" name=\"age2\" value=\"". $_POST["age2"] ."\" /></td>\n";
658 echo "</tr>\n";
659
660 echo "<tr>\n";
661 echo "<td>"._("Size")."</td>\n";
662 echo "<td>"._("From").": <input type=\"text\" size=\"20\" name=\"size1\" value=\"". $_POST["size1"] ."\" /></td>\n";
663 echo "<td>"._("To").": <input type=\"text\" size=\"20\" name=\"size2\" value=\"". $_POST["size2"] ."\" /></td>\n";
664 echo "</tr>\n";
665
666 echo "<tr>\n";
667 echo "<td>"._("Search logs:")."</td>\n";
668 echo "</tr>\n";
669
670 echo "<tr>\n";
671 echo "<td>"._("Failed")."</td>\n";
672 echo "<td>"._("OK")."</td>\n";
673 echo "</tr>\n";
674
506bb488 675 $i = 1;
8f0e31ba 676 foreach ($addr as $dist => $ddist) {
506bb488 677 foreach ($ddist as $arch) {
a7f1713c 678 echo "<tr>\n";
679 $name="as0_".$i;
a7f1713c 680 if (!isset($_POST["$name"])) {
681 $check = " ";
682 } else {
1b44998a 683 $check=" checked='checked'";
a7f1713c 684 }
8f0e31ba 685 echo "<td><input name=\"$name\" id=\"$name\" type=\"checkbox\"$check /><label for=\"$name\">". "$dist/$arch" ."</label></td>\n";
a7f1713c 686 $name="as1_".$i;
8f0e31ba 687 if (!isset($_POST["$n2"])) {
a7f1713c 688 $check = " ";
689 } else {
1b44998a 690 $check=" checked='checked'";
a7f1713c 691 }
8f0e31ba 692 echo "<td><input name=\"$name\" id=\"$name\" type=\"checkbox\"$check /><label for=\"$name\">". "$dist/$arch" ."</label></td>\n";
a7f1713c 693 echo "</tr>\n";
506bb488 694 $i++;
695 }
a7f1713c 696 }
697
698 echo "<tr>\n";
8f0e31ba 699 echo "<td><label><input name=\"all\" type=\"checkbox\" checked=\"on\" onClick=\"checkboxToggle()\">"._("Toggle checkboxes")."</label>&nbsp;<input type=\"submit\" name=\"submit\" value=\""._("Search!")."\" /></td>";
a7f1713c 700 echo "</tr>\n";
701
702 echo "</table>\n";
703
704// if (isset($_POST["name"]) || isset($_POST["age1"]) || isset($_POST["age2"]) ||
705// isset($_POST["size1"]) || isset($_POST["size2"])
8f0e31ba 706 if (($_POST["n2"]!="") || ($_POST["age1"]!="") || ($_POST["age2"]!="") ||
a7f1713c 707 ($_POST["size1"]!="") || ($_POST["size2"]!=""))
708 {
709 $query = "SELECT log_id, dist, arch, ok, name, size, mtime, id FROM logs WHERE 1 ";
8f0e31ba 710 if ($_POST["n2"] != "") {
711 $n = addslashes($_POST["n2"]);
a7f1713c 712 $query .= "AND name LIKE '$n%' ";
713 }
714 $now = time();
715
716 if ($_POST["age1"] != "") {
717 $age = $now - (int)$_POST["age1"] * 24 * 3600;
718 $query .= "AND mtime > $age ";
719 }
720
721 if ($_POST["age2"] != "") {
722 $age = $now - (int)$_POST["age2"] * 24 * 3600;
723 $query .= "AND mtime < $age ";
724 }
725
726 if ($_POST["size1"] != "") {
727 $size = (int)$_POST["size1"];
728 $query .= "AND size > $size ";
729 }
730
731 if ($_POST["size2"] != "") {
732 $size = (int)$_POST["size2"];
733 $query .= "AND size < $size ";
734 }
735
736 $or = "AND (";
506bb488 737 $i = 1;
8f0e31ba 738 foreach ($addr as $dist => $ddist) {
506bb488 739 foreach ($ddist as $arch) {
740 for ($j = 0; $j < 2; $j++) {
741 if (isset($_POST["as" . $j . "_" .$i])) {
8f0e31ba 742 $query .= "$or (dist = '$dist' AND arch = '$arch' AND ok = $j)";
a7f1713c 743 $or = " OR ";
744 }
745 }
506bb488 746 $i++;
747 }
a7f1713c 748 }
749 if ($or == " OR ") $query .= ")";
750// if (!isset($cnt)) $cnt = 50;
751// if (!isset($off)) $off = 0;
752 if (!isset($ns)) $ns = 0;
753 switch ($ns) {
754 case 0:
755 $query .= " ORDER BY mtime DESC";
756 break;
757 case 1:
758 $query .= " ORDER BY name";
759 break;
760 case 2:
761 $query .= " ORDER BY dist, arch, name";
762 break;
763 }
764 $query .= " LIMIT $cnt OFFSET $off ";
2ba2cc91 765
a7f1713c 766 try {
767 $dbh = new PDO("$database");
768 } catch (PDOException $e) {
769 mydie("new PDO: " . $e->getMessage());
770 }
771 $result = $dbh->query("$query")->fetchAll();
772
773 if ($result == FALSE) {
774 echo _("Nothing found");
775 } else {
776 echo "<table border=\"0\" cellspacing=\"1\" ".
777 "cellpadding=3 bgcolor=\"#000000\" width=\"90%\">\n";
778 echo "<tr><th bgcolor=\"#CCCCFF\" align=\"left\" width=\"10%\">"._("Builder").
779 "[<a href=\"$big_url&amp;ns=2\">"._("sort")."</a>]</th>";
780 echo "<th bgcolor=\"#CCCCFF\" align=\"left\" width=\"60%\">"._("Log File").
781 "[<a href=\"$big_url&amp;ns=1\">"._("sort")."</a>]</th>".
782 "<th bgcolor=\"#CCCCFF\" align=\"right\" width=\"15%\">"._("Size")."</th> ".
783 "<th bgcolor=\"#CCCCFF\" align=\"left\">"._("Age").
784 "[<a href=\"$big_url&amp;ns=0\">"._("sort")."</a>]</th>".
785 "</th></tr>";
786 $i = $off;
787// for ($i = $off; $i < $off + $count; $i++) {
788 foreach ($result as $row) {
789 $dist = $row["dist"];
790 $arch = $row["arch"];
791 $name = $row["name"];
8f0e31ba 792 $name_url = urlencode($name);
a7f1713c 793 $id = $row["id"];
794 $f = $name;
a7f1713c 795 $t = $now - $row["mtime"];
796 $s = $row["size"];
797 $t /= 60;
798 if ($t >= 60) {
799 $t /= 60;
800 if ($t >= 24) {
801 $t /= 24;
802 $t = round($t);
803 $t = $t . "&nbsp;" . ngettext("day","days",$t);
804 } else {
805 $t = round($t);
806 $t = $t . "&nbsp;" . ngettext("hour","hours",$t);
807 }
808 } else {
809 $t = round($t);
810 $t = $t . "&nbsp;" . ngettext("minute","minutes",$t);
811 }
812
813// $big_url = "$url?idx=$i&amp;ok=$j&amp;ns=$ns&amp;cnt=$cnt";
814 $ok = $row["ok"];
8f0e31ba 815 $u = "$url?dist=$dist&amp;arch=$arch&amp;name=$name_url&amp;ok=$ok&amp;id=$id";
a7f1713c 816 $b = "$url?dist=$dist&amp;arch=$arch&amp;ok=$ok&amp;ns=$ns&amp;off=$off&amp;cnt=$cnt";
817
818 $builder = "$dist/$arch/". $fail_or_ok[$ok];
819 echo "<tr>";
820 echo "<td bgcolor=\"#CCCCCC\"><a href=\"$b\">$builder</a></td>";
821 echo "<td bgcolor=\"#CCCCCC\"><a href=\"$u\">$f</a> ".
822 "[<a href=\"$u&amp;action=text\">"._("text")."</a> | ".
823 "<a href=\"$u&amp;action=tail\">"._("tail")."</a>]".
824 "</td><td bgcolor=\"#CCCCCC\" align=\"right\">".
825 "$s</td><td bgcolor=\"#CCCCCC\">$t</td></tr>\n";
826 $i++;
827 }
828 echo "</table></div>\n";
829
830 $backarr = "&lt;&lt;&lt;&nbsp;";
831 $back = _("Page back");
832 $forward = _("Page forward");
833 $forwardarr = "&nbsp;&gt;&gt;&gt;";
834
835 }
836// FIXME
837/*
838 echo "<p><table width=\"90%\" align=\"center\"><tr><td align=left width=1%>";
839
840 if ($off > 0) {
841 $noff = $off - $cnt;
842 if ($noff < 0)
843 $noff = 0;
844 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
845 echo "$hrefurl$backarr</a></td><td align=left>$hrefurl$back</a>";
846 } else {
847 echo "$backarr</td><td align=left>$back";
848 }
849
850 echo "</td>\n<td align=\"center\">";
851 echo "</td>\n<td align=\"right\">";
852
853 if ($off + $cnt < count($list))
854 {
855 $noff = $off + $cnt;
856 if ($noff < 0)
857 $noff = 0;
858 $hrefurl = "<a href=\"$big_url&amp;off=$noff\">";
859 echo "$hrefurl$forward</a></td><td align=\"right\" width=\"1%\">$hrefurl$forwardarr</a>";
860 }
861 else
862 {
863 echo "$forward</td><td align=\"right\" width=\"1%\">$forwardarr";
864 }
865
866 echo "</td>\n</tr></table></p>";
867*/
868 } else
869 {
870 echo _("Enter something!");
871 }
4086dafb 872 echo "</div></form>\n";
a7f1713c 873}
874
875function welcome()
876{
877?>
878<table border="0" width="100%"><tr><td width="20%">&nbsp;</td><td>
879<h1><?=_("Welcome!")?></h1>
880<p><?=_("Welcome to PLD Build Logs WWW interface.")?></p><p>
881<?=_("Feel free to email bug reports, complaints and feature requests ")?>
882<!-- ech... niech strace... -->
2ba2cc91 883<a href="mailto:feedback@pld-linux.org"><?=_("to us")?></a>. <?=_("Positive opinions are also")?>
a7f1713c 884<a href="mailto:feedback@pld-linux.org"><?=_("welcome")?></a> ;)</p>
e69f53b7 885<p>Version: $Id: index.php,v 1.23 2013/09/07 21:18:46 glen Exp $</p>
a7f1713c 886</td><td width="20%">&nbsp;</td></tr>
887</table>
888<?php
889}
890
891header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
892header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
893header("Cache-Control: no-cache, must-revalidate");
894header("Pragma: no-cache");
895
896//phpinfo();
897if ($action == "text") {
898 dump_text();
899} else if ($action == "adv_search") {
900 myheader();
901 adv_search();
902 trailer();
903} else if ($action == "qatxt") {
904 dump_qa(1);
905} else {
906 myheader();
907 echo "<table cellpadding=\"10\" width=\"100%\"><tr><td valign=\"top\" width=\"10%\">";
908 list_archs();
909 echo "</td><td valign=\"top\">";
910 flush();
911 if ($action == "qa")
912 dump_qa(0);
913 else if ($action == "sqa")
914 search_qa();
915 else if (isset($id) || isset($name))
916 dump_log($action == "tail");
917 else if (isset($dist))
918 list_logs();
919 else
920 welcome();
921 echo "</td></tr></table>";
922 trailer();
923}
924?>
This page took 0.138501 seconds and 4 git commands to generate.