'rejected', 'upload' => 'uploaded', 'failure' => 'failure', 'done' => 'partial', 'build' => 'building', 'todo' => 'todo' ); foreach ($labels as $k => $v) { if (array_key_exists($k, $pkg['status'])) { return $v; } } return 'unknown'; } /** * @param integer $num * * @return string */ function plural($num) { if ($num > 1) return "s"; } /** * Return timestamp from package key * * @param string $key package submission key * * @return integer */ function key2timestamp($key) { global $tz; $date = DateTime::createFromFormat("YmdHis", $key+0, $tz); if ($date <= 0) return null; return $date->getTimestamp(); } /** * Return human-readable time difference * * @param integer $start timestamp * @param integer $end timestamp, defaults to now * * @return string */ function timediff($start, $end) { if (is_null($end)) { $end = time(); } $diff = $end - $start; if ($diff < 60) { return $diff . " second" . plural($diff); } $diff = round($diff/60); if ($diff < 60) { return $diff . " minute" . plural($diff); } $diff = round($diff/60); if ($diff < 24) { return $diff . " hour" . plural($diff); } $diff = round($diff/24); return $diff . " day" . plural($diff); } /** * Compare two duration strings * * @param string $a "1 hour" or "23 mins" * @param string $b * * @return integer */ function timesort($a, $b) { $a = explode(' ', trim($a)); $b = explode(' ', trim($b)); if ($a[1] == 'hour' || $a[1] == 'hours') { $a[0] *= 3600; } if ($b[1] == 'hour' || $a[1] == 'hours') { $b[0] *= 3600; } if ($a[0] > $b[0]) { return 1; } elseif ($a[0] < $b[0]) { return -1; } else { return 0; } } /** * Publish BS stats as HTTP headers for remote services to adapt. * * @param array $stats * @param array $last_package * * @return void */ function publish_stats_headers($stats, $last_package = null) { foreach ($stats as $k => $v) { header("X-BS-Queue-$k: $v"); } $w = $stats['todo'] - 10; if ($w < 0) { $w = 0; } $w = $w * 60; header("X-BS-Throttle: $w"); if (!is_null($last_package)) { header("X-BS-Package-Status: ".$last_package['type']); } $buildtime_total = $buildtime_total / 60; header(sprintf('X-BS-Buildtime: %d', round($buildtime_total))); $buildtime_avg = ($build_count == 0) ? 0 : round($buildtime_total / $build_count, 2); header(sprintf('X-BS-Buildtime-Average: %5.2f', $buildtime_avg)); }