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
|
<?php
class sql_build extends conf_build_common {
protected $table='builds', $primary_key=array('id'), $columns=array(
'id' => array (
'type' => 'CHAR',
'length' => 6,
'not_null' => true,
'default' => ''
),
'owner' => array (
'type' => 'INT',
'length' => 10,
'unsigned' => true,
'not_null' => true,
'default' => 0,
'refers_to' => 'users.id'
),
'name' => array (
'type' => 'VARCHAR',
'length' => 255
),
'module' => array (
'type' => 'VARCHAR',
'length' => 255,
'not_null' => true,
'default' => ''
),
'status' => array (
'type' => 'TINYINT',
'length' => 4,
'not_null' => true
),
'ctime' => array (
'type' => 'INT',
'length' => 10,
'unsigned' => true
),
'start' => array (
'type' => 'INT',
'length' => 10,
'unsigned' => true
),
'finish' => array (
'type' => 'INT',
'length' => 10,
'unsigned' => true
)
);
// Returns HTML code describing this build's status (for human consumption)
function display() {
global $S;
$format='D j M Y G:i:s T';
$OoA=owner_or_admin($this->id);
$html='<div class="build"><span class="name">'.(isset($this->name) && strlen($this->name)?htmlentities($this->name):'Unnamed Build').'</span> ';
$links=array();
if ($this->status == -128) {
$total=$S['pdo']->query('SELECT COUNT(*) FROM `builds` WHERE `status`=-128')->fetch(PDO::FETCH_COLUMN);
$num=$S['pdo']->query('SELECT COUNT(*) FROM `builds` WHERE `status`=-128 AND `ctime` <= '.$this->ctime)->fetch(PDO::FETCH_COLUMN);
$html.="<span class=\"status queued\">[Queued ($num/$total)]</span>";
} elseif ($this->status == -127) {
$html.='<span class="status successful">[uploading]</span>';
if ($OoA) $links['Build log']=url("logs/$this->id");
} elseif ($this->status < 0) {
// TODO Build stage X
$html.='<span class="status building">[building]</span>';
if ($OoA) {
//$links['Watch']=url("logs/$this->id/live");
$links['Build Log']=url("logs/$this->id");
}
} elseif ($this->status == 0) {
$r=$S['pdo']->query('SELECT COUNT(*) as `count`, MAX(`time`) as `time` FROM `downloads` WHERE `build`="'.$this->id.'"')->fetch(PDO::FETCH_ASSOC);
$d=($OoA && $r['count']?'<a href="'.url("download/$this->id/history").'">':'').$r['count'].' download'.($r['count'] != 1?'s':'').($r['count']?($OoA?'</a>':'').'<br/><span class="time">(last at '.date($format, $r['time']).')</span>':'');
$html.='<span class="downloads">'.$d.'</span><span class="status successful">[successful]</span>';
$links['Download image']=url("download/$this->id");
if ($OoA) $links['Build log']=url("logs/$this->id");
} elseif ($this->status == 127) {
$html.='<span class="status failed">[upload failed]</span>';
if ($OoA) $links['Build log']=url("logs/$this->id");
} elseif ($this->status == 126) {
$html.='<span class="status failed">[failed]</span>';
if ($OoA) {
//$links['View output of failed command']=url("logs/$this->id/failure");
$links['Build log']=url("logs/$this->id");
}
} else {
$html.='<span class="status failed">[failed: got signal '.$this->status.']</span>';
if ($OoA) $links['Build log']=url('logs/'.$this->id);
}
if ($links) {
foreach ($links as $label => $url) {
$links[$label]='<a href="'.$url.'">'.htmlentities($label).'</a>';
}
$html.='<br/><span class="links">'.implode(' • ', $links).'</span>';
}
if (isset($this->ctime)) {
$html.='<div class="time">Submitted for build at: <span class="time">'.date($format, $this->ctime).'</span><br/>';
if (isset($this->start)) {
$html.='Build started at: <span class="time">'.date($format, $this->start).'</span><br/>';
if (isset($this->finish)) {
$html.='Build finished at: <span class="time">'.date($format, $this->finish).'</span><br/>Total build time: <span class="time">'.display_time($this->finish-$this->start).'</span>';
} else {
$html.='Running for: <span class="time">'.display_time(time()-$this->start).'</span>';
}
} else {
$html.='Queued for: <span class="time">'.display_time(time()-$this->ctime).'</span>';
}
$html.='</div>';
}
$html.='</div>';
return $html;
}
function queued_tasks() {
global $S;
static $cache;
if (!isset($cache))
$cache=$S['pdo']->query('SELECT COUNT(`order`) FROM `tasks` WHERE `start` IS NULL AND `build`="'.$this->id.'"')->fetch(PDO::FETCH_COLUMN);
return $cache;
}
}
?>
|