1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
<html>
<head>
<?php
$runs = Array();
$handle = opendir('cauldron/x86_64/core/');
while (false !== ($entry = readdir($handle))) {
if (preg_match("/^....-..-..$/", $entry, $matches)) {
array_push($runs, $matches[0]);
}
}
closedir($handle);
sort($runs);
$run = $_GET['run'];
if (!$run) {
$run = readlink("cauldron/x86_64/core/latest");
}
foreach ($runs as $r) {
if ($r==$run) {
break;
}
$prev = $r;
}
$packages = Array();
if ($handle = opendir('/distrib/bootstrap/distrib/cauldron/SRPMS/core/release/')) {
while (false !== ($entry = readdir($handle))) {
if (preg_match("/(.*)-([^-]*-[^-]*mga)[1-9].src.rpm/", $entry, $matches)) {
$packages[$matches[1]] = $matches[2];
}
}
closedir($handle);
}
$prev_failure = Array();
if ($prev) {
$base_dir = "cauldron/x86_64/core/$prev";
$status_name = "$base_dir/status.core.log";
$status_file = fopen($status_name, "r");
while (!feof($status_file)) {
$line = fgets($status_file);
if (preg_match("/^(.*): (.*)$/", $line, $matches)) {
$rpm = $matches[1];
$status = $matches[2];
if ($status != "ok" && $status != "unknown" && $status != "not_on_this_arch") {
$prev_failure[$rpm] = 1;
}
}
}
fclose($status_file);
}
$success = Array();
$failure = Array();
$fixed = Array();
$removed = Array();
$base_dir = "cauldron/x86_64/core/$run";
$status_name = "$base_dir/status.core.log";
if (!file_exists($status_name)) {
echo "Invalid run";
exit;
}
$status_file = fopen($status_name, "r");
while (!feof($status_file)) {
$line = fgets($status_file);
if (preg_match("/^(.*): (.*)$/", $line, $matches)) {
$rpm = $matches[1];
$status = $matches[2];
if ($status == "ok") {
array_push($success, $rpm);
} elseif ($status != "unknown" && $status != "not_on_this_arch"){
array_push($failure, $rpm);
preg_match("/(.*)-([^-]*-[^-]*mga)[1-9].src.rpm/", $rpm, $matches);
if(!$packages[$matches[1]]) {
$removed[$rpm] = 1;
} elseif ($packages[$matches[1]] != $matches[2]) {
$fixed[$rpm] = 1;
}
}
}
}
fclose($status_file);
sort($success);
sort($failure);
$nb_failed = count($failure);
$nb_success = count($success);
$nb_fixed = count($fixed);
$nb_removed = count($removed);
$nb_tried = $nb_failed + $nb_success;
$succes_percent = round($nb_success*1000/$nb_tried)/10;
$estimated_percent = round(($nb_success+$nb_fixed)*1000/($nb_tried-$nb_removed))/10;
echo "<title>$succes_percent% Success</title>\n";
echo "</head><body>\n";
echo "<h1>$succes_percent% Success</h1>\n";
echo "$nb_fixed packages have been fixed since this run and $nb_removed have been removed.<br/> If no new package was broken, success rate next time should be $estimated_percent%.<br/>\n";
echo "<div style='float:left'><h1>Failed builds ($nb_failed/$nb_tried):</h1><ul>";
foreach ($failure as $rpm) {
$status = "";
if ($fixed[$rpm]) {
$status = " <span style='color:green;'><b>Fixed!</b></span>";
} elseif ($removed[$rpm]) {
$status = " <span style='color:yellow;'><b>Removed</b></span>";
} elseif ($prev && !$prev_failure[$rpm]) {
$status = " <span style='color:red;'><b>New!</b></span>";
}
echo "<li><a href='$base_dir/$rpm/'>$rpm</a>$status</li>\n";
}
echo "</ul></div><div style='float:right'><h1>Successful builds ($nb_success/$nb_tried):</h1><ul>";
foreach ($success as $rpm) {
echo "<li><a href='$base_dir/$rpm/'>$rpm</a></li>\n";
}
?>
</ul></div>
</body>
</html>
|