/[soft]/build_system/web/index.php
ViewVC logotype

Annotation of /build_system/web/index.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 281 - (hide annotations) (download)
Thu Jan 13 13:49:24 2011 UTC (13 years, 3 months ago) by rda
File size: 6410 byte(s)
reformatting code, use full php tags
1 pterjan 268 <?php
2    
3     /* Copyright (C) 2011 Oliver Blin *\
4     /**************************************************************************\
5     * This program is free software; you can redistribute it and/or modify it *
6     * under the terms of the GNU General Public License aspublished by the *
7     * Free Software Foundation; either version 2 of the License, or (at your *
8     * option) any later version. *
9     \**************************************************************************/
10    
11     error_reporting(E_ALL);
12    
13     $upload_dir = "/home/schedbot/uploads";
14     $max_modified = 2;
15 pterjan 269 $title = "Mageia build system status";
16     $tz = new DateTimeZone("UTC");
17 pterjan 268
18 pterjan 269 # Temporary until initial mirror is ready
19 pterjan 270 chdir("data");
20 pterjan 269 $nb_rpm = shell_exec('rpm -qp --qf "%{SOURCERPM}\n" /distrib/bootstrap/distrib/cauldron/i586/media/core/release/*.rpm | sort -u | tee src.txt | wc -l');
21     $nb_rpm_mga = shell_exec('grep mga src.txt | tee src.mga.txt | wc -l');
22     shell_exec('grep -v mga src.txt > src.mdv.txt');
23     #########################################
24    
25 pterjan 268 chdir($upload_dir);
26    
27 pterjan 269 $all_files = shell_exec("find \( -name '*.rpm' -o -name '*.src.rpm.info' -o -name '*.youri' -o -name '*.lock' -o -name '*.done' \) ! -ctime $max_modified");
28 pterjan 268
29 pterjan 269 preg_match_all("!^\./(\w+)/((\w+)/(\w+)/(\w+)/(\d+)\.(\w+)\.(\w+)\.(\d+))_?(.+)(\.src\.rpm(?:\.info)?|\.youri|\.lock|\.done)$!m", $all_files, $matches, PREG_SET_ORDER);
30    
31 pterjan 268 $pkgs = array();
32     foreach ($matches as $val) {
33 pterjan 269 if ($_GET["user"] && ($_GET["user"] != $val[7])) {
34     continue;
35     }
36     $key = $val[6] . $val[7];
37 pterjan 268 if (!is_array($pkgs[$key])) {
38     $pkgs[$key] = array();
39     $pkgs[$key]["status"] = array();
40     $pkgs[$key]["path"] = $val[2];
41     $pkgs[$key]["version"] = $val[3];
42     $pkgs[$key]["media"] = $val[4];
43     $pkgs[$key]["section"] = $val[5];
44     $pkgs[$key]["user"] = $val[7];
45     $pkgs[$key]["host"] = $val[8];
46     $pkgs[$key]["job"] = $val[9];
47     }
48    
49     $status = $val[1];
50     $data = $val[10];
51 pterjan 271 $pkgs[$key]["status"][$status] = 1;
52 pterjan 268 $ext = $val[11];
53     if ($ext == ".src.rpm.info") {
54     preg_match("!^(?:@\d+:)?(.*)!", $data, $name);
55     $pkgs[$key]["package"] = $name[1];
56     } else if ($ext == ".src") {
57     $pkgs[$key]["status"]["src"] = 1;
58     } else if ($ext == ".youri") {
59     $pkgs[$key]["status"]["youri"] = 1;
60     } else if ($ext == ".lock") {
61     // parse build bot from $data
62 pterjan 271 $pkgs[$key]["status"]["build"] = 1;
63 pterjan 268 }
64     }
65     // sort by key in reverse order to have more recent pkgs first
66     krsort($pkgs);
67     ?>
68 rda 281 <html lang="en">
69 pterjan 268 <head>
70 rda 281 <title><?php echo $title ?></title>
71 pterjan 268 <style type="text/css">
72 rda 281 table {
73     border-spacing: 0;
74     font-family: Helvetica; font-size: 80%;
75     border: 1px solid #ccc;
76     }
77     table tr { padding: 0; margin: 0; }
78     table th { padding: 0.2em 0.5em; margin: 0; border-bottom: 2px solid #ccc; border-right: 1px solid #ccc; }
79     table td { padding: 0; margin: 0; padding: 0.2em 0.5em; border-bottom: 1px solid #ccc; }
80 pterjan 269
81 rda 281 tr { background: transparent; }
82     tr.uploaded { background: #ddffdd; }
83     tr.failure, tr.rejected { background: #ffdddd; }
84     tr.todo { background: white; }
85     tr.building { background: #ffffdd; }
86     tr.partial { background: #aaaaff; }
87     tr.built { background: #00CCFF; }
88     tr.youri { background: olive; }
89    
90     td.status-box { width: 1em; height: 1em; }
91     tr.uploaded td.status-box { background: green; }
92     tr.failure td.status-box, tr.rejected td.status-box { background: red; }
93     tr.todo td.status-box { background: white; }
94     tr.building td.status-box { background: yellow; }
95     tr.partial td.status-box { background: blue; }
96     tr.built td.status-box { background: #00CCFF; }
97     tr.youri td.status-box { background: olive; }
98 pterjan 268 </style>
99     </head>
100     <body>
101 rda 281 <h1><?php echo $title ?></h1>
102 pterjan 268
103 rda 281 <?php
104 pterjan 268 function pkg_gettype($pkg) {
105     if (array_key_exists("rejected", $pkg["status"]))
106     return "rejected";
107     if (array_key_exists("youri", $pkg["status"])) {
108     if (array_key_exists("src", $pkg["status"]))
109     return "youri";
110     else
111     return "uploaded";
112     }
113     if (array_key_exists("failure", $pkg["status"]))
114     return "failure";
115     if (array_key_exists("done", $pkg["status"]))
116     return "partial";
117     if (array_key_exists("build", $pkg["status"]))
118     return "building";
119     if (array_key_exists("todo", $pkg["status"]))
120     return "todo";
121     return "unknown";
122     }
123    
124 pterjan 269 function plural($num) {
125     if ($num > 1)
126     return "s";
127     }
128    
129     function key2date($key) {
130     global $tz;
131     $date = DateTime::createFromFormat("YmdHis", $key+0, $tz);
132     $diff = time() - $date->getTimestamp();
133     if ($diff<60)
134     return $diff . " second" . plural($diff) . " ago";
135     $diff = round($diff/60);
136     if ($diff<60)
137     return $diff . " minute" . plural($diff) . " ago";
138     $diff = round($diff/60);
139     if ($diff<24)
140     return $diff . " hour" . plural($diff) . " ago";
141     $diff = round($diff/24);
142     return $diff . " day" . plural($diff) . " ago";
143     }
144    
145     # Temporary until initial mirror is ready
146 rda 281 echo sprintf(
147     '<p><a href="%s">%d src.rpm</a> rebuilt for Mageia out of <a href="%s">%d</a>
148     (<a href="%s">List of Mandriva packages still present</a>).</p>',
149    
150     'data/src.mga.txt', $nb_rpm_mga,
151     'data/src.txt', $nb_rpm,
152     'data/src.mdv.txt'
153     );
154    
155 pterjan 269 #########################################
156 rda 281 echo '<table>',
157     '<tr><th>Submitted</th><th>User</th><th>Package</th><th>Target</th><th>Media</th><th colspan="2">Status</th></tr>';
158 pterjan 269
159 pterjan 268 foreach ($pkgs as $key => $p) {
160 rda 281 $p["type"] = pkg_gettype($p);
161 pterjan 269 echo "<tr class=" . $p["type"] . ">\n";
162     echo "<td>" . key2date($key) . "</td>\n";
163     echo "<td><a href='?user=" . $p["user"] . "'>" . $p["user"] . "</a></td>\n";
164 pterjan 268 echo "<td>" . $p["package"] . "</td>\n";
165     echo "<td>" . $p["version"] . "</td>\n";
166     echo "<td>" . $p["media"] . "/" . $p["section"] . "</td>\n";
167 pterjan 269 echo "<td class='status-box' />\n";
168 pterjan 268 $typelink = "";
169     if ($p["type"] == "failure") {
170     $typelink = "/uploads/" . $p["type"] . "/" . $p["path"];
171     } else if ($p["type"] == "rejected") {
172     $typelink = "/uploads/" . $p["type"] . "/" . $p["path"] . ".youri";
173     }
174 pterjan 269 echo "<td>";
175 pterjan 268 if ($typelink)
176     echo "<a href='$typelink'>";
177     echo $p["type"];
178     if ($typelink)
179     echo "</a>";
180 pterjan 269 echo "</td>\n";
181 pterjan 268 echo "</tr>\n";
182     }
183     ?>
184     </table>
185    
186     </body>
187     </html>

  ViewVC Help
Powered by ViewVC 1.1.30