.
$apps = array();
$app_versions = array();
function anon_platform_string($result, $rsc_name=null) {
global $apps;
if (!array_key_exists($result->appid, $apps)) {
$app = BoincApp::lookup_id($result->appid);
$apps[$result->appid] = $app;
}
$app = $apps[$result->appid];
$n = $app->user_friendly_name."
". tra("Anonymous platform");
if ($rsc_name) {
$n .= " ($rsc_name)";
}
return $n;
}
function app_version_string($result) {
global $apps, $app_versions;
$id = $result->app_version_id;
if ($id == 0) return "";
if ($id == -1) return anon_platform_string($result);
if ($id == -2) return anon_platform_string($result, tra("CPU"));
if ($id == -3) return anon_platform_string($result, tra("NVIDIA GPU"));
if ($id == -4) return anon_platform_string($result, tra("ATI GPU"));
if (array_key_exists($id, $app_versions)) {
$av = $app_versions[$id];
$app = $apps[$av->appid];
} else {
$av = BoincAppVersion::lookup_id($id);
if (!$av) {
return tra("Not in DB");
}
$app_versions[$id] = $av;
$app = BoincApp::lookup_id($av->appid);
$apps[$av->appid] = $app;
}
$n = $app->user_friendly_name;
$v = sprintf("%d.%02d", $av->version_num/100, $av->version_num%100);
if ($av->plan_class) {
$c = "($av->plan_class)";
} else {
$c = "";
}
return "$n v$v $c";
}
function result_granted_credit_string($result, $string_to_show) {
if ($result->server_state == 4 && $result->granted_credit > 0) {
return $string_to_show;
}
if ($result->server_state <> 5) return "---";
switch($result->outcome) {
case 1: //Success
switch ($result->validate_state) {
case 0:
case 4:
return tra("pending");
}
return $string_to_show;
default:
if ($result->granted_credit > 0) {
return $string_to_show;
}
return "---";
}
}
// various states that we allow users to filter on
define("STATE_ALL", 0);
define("STATE_IN_PROGRESS", 1);
define("STATE_PENDING", 2);
define("STATE_VALID", 3);
define("STATE_INVALID", 4);
define("STATE_ERROR", 5);
define("NSTATES", 6);
$state_name = array(
tra("All"),
tra("In progress"),
tra("Pending"),
tra("Valid"),
tra("Invalid"),
tra("Error"),
);
$state_clause = array(
"",
" and server_state=4 ",
" and server_state=5 and outcome=1 and (validate_state=0 or validate_state=4) ",
" and server_state=5 and outcome=1 and validate_state=1 ",
" and server_state=5 and (outcome=6 or (outcome=1 and (validate_state=2 or validate_state=3 or validate_state=5))) ",
" and server_state=5 and (outcome=3 or outcome=4 or outcome=7) ",
);
function state_string($result) {
switch ($result->server_state) {
case 1: return tra("Inactive");
case 2: return tra("Unsent");
case 4: return tra("In progress");
case 5:
switch ($result->outcome) {
case 1:
switch ($result->validate_state) {
case 0: return tra("Completed, waiting for validation");
case 1: return tra("Completed and validated");
case 2: return tra("Completed, marked as invalid");
case 3: return tra("Completed, can't validate");
case 4: return tra("Completed, validation inconclusive");
case 5: return tra("Completed, too late to validate");
}
return tra("Completed");
case 2: return tra("Couldn't send");
case 3:
if ($result->exit_status == -221) {
return tra("Cancelled by server");
}
switch($result->client_state) {
case 1: return tra("Error while downloading");
case 2:
case 3: return tra("Error while computing");
case 4: return tra("Error while uploading");
case 6: return tra("Aborted by user");
}
return tra("Error");
case 4: return tra("Timed out - no response");
case 5: return tra("Didn't need");
case 6: return tra("Validate error");
case 7: return tra("Abandoned");
}
}
return tra("Unknown");
}
function result_server_state_string($result) {
switch($result->server_state) {
case 1: return tra("Inactive");
case 2: return tra("Unsent");
case 4: return tra("In progress");
case 5: return tra("Over");
}
return tra("Unknown");
}
function result_outcome_string($result) {
switch($result->outcome) {
case 0: return "---";
case 1: return tra("Success");
case 2: return tra("Couldn't send");
case 3:
if ($result->exit_status <> -221) {
return tra("Computation error");
}
return tra("Redundant result");
case 4: return tra("No reply");
case 5: return tra("Didn't need");
case 6: return tra("Validate error");
case 7: return tra("Abandoned");
}
return tra("Unknown");
}
function result_client_state_string($result) {
switch($result->client_state) {
case 0: return tra("New");
case 1: return tra("Downloading");
case 2: return tra("Processing");
case 3: return tra("Compute error");
case 4: return tra("Uploading");
case 5: return tra("Done");
case 6:
if ($result->exit_status == -221) {
return tra("Cancelled by server");
}
return tra("Aborted by user");
}
}
function validate_state_str($result) {
switch($result->validate_state) {
case 0: return tra("Initial");
case 1: return tra("Valid");
case 2:
if ($result->exit_status <> -221) {
return tra("Invalid");
}
return tra("Not necessary");
case 3: return tra("Workunit error - check skipped");
case 4: return tra("Checked, but no consensus yet");
case 5: return tra("Task was reported too late to validate");
}
return tra("Unknown");
}
function wu_error_mask_str($s) {
$x = "";
if ($s & 1) {
$x = $x." ".tra("Couldn't send result");
$s -= 1;
}
if ($s & 2) {
$x = $x." ".tra("Too many errors (may have bug)");
$s -= 2;
}
if ($s & 4) {
$x = $x." ".tra("Too many results (may be nondeterministic)");
$s -= 4;
}
if ($s & 8) {
$x = $x." ".tra("Too many total results");
$s -= 8;
}
if ($s & 16) {
$x = $x." ".tra("WU cancelled");
$s -= 16;
}
if ($s) {
$x = $x." ".tra("Unrecognized Error: %1", $s);
}
if (strlen($x)) {
$x="".$x."";
} else {
$x="";
}
return $x;
}
function result_page_url($info) {
$c = $info->clause;
$o = $info->offset;
$sn = $info->show_names;
$st = $info->state;
$appid = $info->appid;
return "results.php?$c&offset=$o&show_names=$sn&state=$st&appid=$appid";
}
function result_table_start($show_wu_link, $show_host_link, $info) {
start_table();
echo "
".htmlspecialchars($result->stderr_out).""; } function show_result_navigation($info) { global $state_name; echo "