");
if(!mysql_select_db($db_name)) {
echo "Unable to select database - please try again later";
exit();
}
return 0;
}
function lookup_user_auth($auth) {
$result = mysql_query("select * from user where authenticator='$auth'");
if ($result) {
$user = mysql_fetch_object($result);
mysql_free_result($result);
return $user;
} else {
return 0;
}
}
function join_query_string($s1, $s2) {
if ($s1) {
if ($s2) {
return "$s1&s2";
} else {
return $s1;
}
} else {
return $s2;
}
}
// SqlQueryString maps a bunch of form items to a SQL query
//
// The items are
// table (name of table)
// id
// platformid
// appid
// workunitid
// hostid
// userid
// teamid
// nsecs (received_time > now - nsecs)
// received_time (> x)
// server_state (== x if z nonzero)
// outcome (== x if z nonzero)
// client_state (== x if z nonzero)
// clauses (literals added after the above)
// sort_by (order by x desc added after all else)
//
// Once you've parsed the items (using parse_form_items()):
//
// get_select_query(n, m) returns the SQL query to get items from m to m+n
// get_url() returns the URL-encoded version of everything
// count() returns the number of records satisfying the query
class SqlQueryString {
var $table;
var $query;
var $urlquery;
function SqlQueryString() {
$this->table = $_GET['table'];
//$this->query = $_GET['query'];
$this->query = "";
$this->urlquery = "";
}
function add($clause) {
if (!$this->query) {
$this->query .= "where $clause";
} else {
$this->query .= " and $clause";
}
}
function addclause($clause) {
if ($clause) {
$this->add($clause);
$this->urlquery .= "&clauses=".urlencode($clause);
}
}
function addeq($name) {
$value = $_GET[$name];
if (strlen($value)) {
$this->add("$name = '$value'");
$this->urlquery .= "&$name=".urlencode($value);
}
}
function addeqnz($name) {
$value = $_GET[$name];
if (strlen($value) && $value > 0) {
$this->add("$name = '$value'");
$this->urlquery .= "&$name=".urlencode($value);
}
}
function addgt($name) {
$value = $_GET[$name];
if (strlen($value) && $value > 0) {
$this->add("$name > '$value'");
$this->urlquery .= "&$name=".urlencode($value);
}
}
function addsort($name) {
$value = $_GET[$name];
if (strlen($value)) {
$this->query .= " order by $value desc";
$this->urlquery .= "&$name=".urlencode($value);
}
}
function count() {
$count_query = "select count(*) as cnt from $this->table $this->query";
$result = mysql_query($count_query);
if (!$result) return 0;
$res = mysql_fetch_object($result);
mysql_free_result($result);
return $res->cnt;
}
function get_select_query($entries_to_show, $start_at) {
if ($entries_to_show) {
if ($start_at) {
return "select * from $this->table $this->query limit $start_at,$entries_to_show";
} else {
return "select * from $this->table $this->query limit $entries_to_show";
}
} else {
return "select * from $this->table $this->query";
}
}
function get_url($base) {
$s = "db_action.php?table=$this->table$this->urlquery";
return $s;
}
function process_form_items() {
$this->addeq('id');
$this->addeq('platformid');
$this->addeq('appid');
$this->addeq('workunitid');
$this->addeq('hostid');
$this->addeq('userid');
$this->addeq('teamid');
if ($_GET['nsecs']) {
$_GET['received_time'] = time() - $_GET['nsecs'];
}
$this->addgt('received_time');
$this->addeqnz('server_state');
$this->addeqnz('outcome');
$this->addeqnz('client_state');
if ($_GET['clauses']) {
$this->addclause($_GET['clauses']);
}
$this->addsort('sort_by');
}
}
function link_results($n, $mq, $query) {
if ($n == '0') { // intentional compare by string
return "0";
} else {
return "$n";
}
}
function show_result_summary() {
$server_state = array();
$outcome = array();
$client_state = array();
for ($ss=1; $ss<6; $ss++) {
$server_state[$ss] = 0;
}
for ($ro=0; $ro<6; $ro++) {
$outcome[$ro] = 0;
}
for ($cs=1; $cs<6; $cs++) {
$client_state[$cs] = 0;
}
$_GET['table'] = 'result';
$_GET['sort_by'] = ''; // ignore sort
$q = new SqlQueryString();
$q->process_form_items();
$main_query = $q->get_select_query(0,0);
$urlquery = $q->urlquery;
echo "
Query: $main_query
\n";
$result = mysql_query($main_query);
$ntotal =0; // TODO: how to count $result?
$nvalid = 0; // for SUCCESS results
$ninvalid = 0;
$nfile_deleted = 0;
while ($res = mysql_fetch_object($result)) {
$server_state[$res->server_state] += 1;
$ntotal += 1;
if ($res->server_state == 5) {
$outcome[$res->outcome] += 1;
if ($res->outcome == 3) {
$client_state[$res->client_state] += 1;
}
if ($res->outcome == 1) {
if ($res->validate_state == 1) {
$nvalid += 1;
}
if ($res->validate_state == 2) {
$ninvalid += 1;
}
if ($res->file_delete_state >= 1) {
$nfile_deleted +=1;
}
}
}
}
mysql_free_result($result);
echo "
";
echo "";
echo "" . link_results("$ntotal results", $urlquery, '') . " | ";
echo "" . link_results("'Over' results", $urlquery, "server_state=5") . " | ";
echo "" . link_results("'Success' results", $urlquery, "outcome=1") . " | ";
echo "" . link_results("'Client error' results", $urlquery, "outcome=3") . " | ";
echo "
";
echo "";
echo "Server state | # results | \n";
for ($ss=1; $ss<6; $ss++) {
row2(server_state_string($ss),
link_results($server_state[$ss], $urlquery,"server_state=$ss"));
}
echo "
| ";
echo "Outcome | # results | \n";
for ($ro=0; $ro<6; $ro++) {
c_row2($outcome[$ro]?outcome_color($ro):'', outcome_string($ro),
link_results($outcome[$ro], $urlquery, "outcome=$ro")
);
}
echo "
| ";
echo "Validate state | # results | \n";
row2("Valid", link_results($nvalid, $urlquery, "validate_state=1"));
row2("Invalid", link_results($ninvalid, $urlquery, "validate_state=2"));
echo " ";
echo "File Delete state | # results | \n";
row2("Files deleted", link_results($ninvalid, $urlquery, "file_delete_state= 1 or file_delete_state=2"));
echo "
| ";
echo "Client state | # results | \n";
for ($cs=1; $cs<6; $cs++) {
row2(client_state_string($cs),
link_results($client_state[$cs], $urlquery, "client_state=$cs")
);
}
echo "
| ";
echo "
";
}
function server_state_select() {
echo "
\n";
}
function outcome_select() {
echo "
\n";
}
function client_state_select() {
echo "
\n";
}
function result_sort_select() {
echo "
";
}
function table_title($table) {
switch($table) {
case "platform": return "Platforms";
case "app": return "Applications";
case "app_version": return "Application Versions";
case "host": return "Hosts";
case "workunit": return "Workunits";
case "result": return "Results";
case "team": return "Teams";
case "user": return "Users";
default: return "????";
}
}
function show_platform($platform) {
start_table();
row("ID", $platform->id);
row("Created", time_str($platform->create_time));
row("Name", $platform->name);
row("User friendly name", $platform->user_friendly_name);
row("","id>App versions for this platform");
end_table();
}
function show_app($app) {
start_table();
row("ID", $app->id);
row("Created", time_str($app->create_time));
row("Name", $app->name);
row("","id>App Versions for this application");
row("","id&detail=low>Workunits for this application");
end_table();
}
function show_app_version($app_version) {
start_table();
row("ID", $app_version->id);
row("Created", time_str($app_version->create_time));
row("Application", "appid>" . app_name_by_id($app_version->appid) . "");
row("Version num", $app_version->version_num);
row("Platform", "platformid>" . platform_name_by_id($app_version->platformid) . "" );
row("XML doc", "".htmlspecialchars($app_version->xml_doc)."
");
row("Min_core_version", $app_version->min_core_version);
row("Max_core_version", $app_version->max_core_version);
row("Message", $app_version->message);
row("Deprecated", $app_version->deprecated);
end_table();
}
function app_version_short_header() {
echo "
ID |
Application |
Version |
Platform |
";
}
function show_app_version_short($app_version) {
$x = app_name_by_id($app_version->appid);
$y = platform_name_by_id($app_version->platformid);
echo "
id>$app_version->id |
appid>$x |
$app_version->version_num |
platformid>$y |
";
}
function host_short_header() {
echo "
host ID |
IP address |
name |
CPU |
OS |
";
}
function show_host_short($host) {
echo "
id>$host->id |
$host->last_ip_addr |
$host->domain_name |
$host->p_vendor $host->p_model |
$host->os_name $host->os_version |
";
}
function show_host($host) {
start_table();
row("ID", $host->id);
row("Created", time_str($host->create_time));
row("User", "userid>$host->userid");
row("Venue", $host->venue);
row("Total credit", $host->total_credit);
row("Average credit", $host->expavg_credit);
row("Average update time", time_str($host->expavg_time));
row("IP address", "$host->last_ip_addr
(same the last $host->nsame_ip_addr times)");
row("Domain name", $host->domain_name);
$x = $host->timezone/3600;
row("Time zone", "UTC - $x hours");
row("Number of CPUs", $host->p_ncpus);
row("CPU", "$host->p_vendor $host->p_model");
row("FP ops/sec", $host->p_fpops);
row("Int ops/sec", $host->p_iops);
row("memory bandwidth", $host->p_membw);
row("Operating System", "$host->os_name $host->os_version");
$x = $host->m_nbytes/(1024*1024);
$y = round($x, 2);
row("Memory", "$y MB");
$x = $host->m_cache/1024;
$y = round($x, 2);
row("Cache", "$y KB");
$x = $host->m_swap/(1024*1024);
$y = round($x, 2);
row("Swap Space", "$y MB");
$x = $host->d_total/(1024*1024*1024);
$y = round($x, 2);
row("Total Disk Space", "$y GB");
$x = $host->d_free/(1024*1024*1024);
$y = round($x, 2);
row("Free Disk Space", "$y GB");
row("Avg network bandwidth (upstream)", "$host->n_bwup bytes/sec");
row("Avg network bandwidth (downstream)", "$host->n_bwdown bytes/sec");
row("Number of RPCs", $host->rpc_seqno);
row("Last RPC", time_str($host->rpc_time));
row("% of time client on", 100*$host->on_frac." %");
row("% of time host connected", 100*$host->connected_frac." %");
row("% of time user active", 100*$host->active_frac." %");
row("Results", "id&sort_by=sent_time>click here");
end_table();
}
function wu_error_mask_str($s) {
$x = "";
if ($s & 1) $x = $x."Couldn't send result; ";
if ($s & 2) $x = $x."Too many errors (may have bug); ";
if ($s & 4) $x = $x."Too many results (may be nondeterministic)";
$x = $x."
";
return $x;
}
function assimilate_state_str($s) {
switch($s) {
case 0: return "Initial";
case 1: return "Ready to assimilate";
case 2: return "Assimilated";
}
}
function file_delete_state_str($s) {
switch($s) {
case 0: return "Initial";
case 1: return "Ready to delete";
case 2: return "Deleted";
}
}
function show_workunit($wu) {
start_table();
row("Created", time_str($wu->create_time));
row("Name", $wu->name);
row("XML doc", "".htmlspecialchars($wu->xml_doc)."
");
row("Application", "appid>" . app_name_by_id($wu->appid) . "");
row("Batch", $wu->batch);
row("Estimated FP Operations", $wu->rsc_fpops_est);
row("Max FP Operations", $wu->rsc_fpops_bound);
row("Max Memory Usage", $wu->rsc_memory_bound);
row("Max Disk Usage", $wu->rsc_disk_bound);
row("Need validate?", $wu->need_validate?"yes":"no");
row("Canonical resultid",
"canonical_resultid>".$wu->canonical_resultid."");
row("Canonical credit", $wu->canonical_credit);
row("Timeout check time", time_str($wu->timeout_check_time));
row("Delay bound", $wu->delay_bound);
row("Error mask", wu_error_mask_str($wu->error_mask));
row("File delete state", file_delete_state_str($wu->file_delete_state));
row("Assimilation state", assimilate_state_str($wu->assimilate_state));
// row("","id&detail=low>Show associated results");
row("min quorum", $wu->min_quorum);
row("max error results", $wu->max_error_results);
row("max total results", $wu->max_total_results);
row("max success results", $wu->max_success_results);
row("","Grep logs");
row("result template", "".htmlspecialchars($wu->result_template)."
");
end_table();
$_GET = array('workunitid' => $wu->id);
show_result_summary();
echo "";
}
function workunit_short_header() {
echo "
WU ID |
canonical result |
error_mask |
file delete |
assimilate |
";
}
function show_workunit_short($wu) {
if ($wu->canonical_resultid) {
$cr = "canonical_resultid>$wu->canonical_resultid";
} else {
$cr = "none";
}
$cr = $cr. " id&detail=low>all";
$e = wu_error_mask_str($wu->error_mask);
$f = file_delete_state_str($wu->file_delete_state);
$a = assimilate_state_str($wu->assimilate_state);
echo "
$wu->id |
$cr |
$e |
$f |
$a |
";
}
function server_state_string($s) {
switch($s) {
case 1: return "Inactive";
case 2: return "Unsent";
case 4: return "In Progress";
case 5: return "Over";
}
return "Unknown";
}
function outcome_string($s) {
switch($s) {
case 1: return "Success";
case 2: return "Couldn't send";
case 3: return "Client error";
case 4: return "No reply";
case 5: return "Didn't need";
}
return "Unknown";
}
function client_state_string($s) {
switch($s) {
case 0: return "New";
case 1: return "Downloading";
case 2: return "Downloaded";
case 3: return "Computing";
case 4: return "Uploading";
case 5: return "Done";
}
return "Unknown";
}
function validate_state_str($s) {
switch($s) {
case 0: return "Initial";
case 1: return "Valid";
case 2: return "Invalid";
}
return "Unknown";
}
function client_version_string($client_version_num) {
if (!$client_version_num) {
return '---';
} else {
return sprintf("%.2f", $client_version_num/100);
}
}
function host_user_link($hostid)
{
if (!$hostid) return '----';
$h = "$hostid";
$result = mysql_query("select userid from host where id='$hostid' limit 1");
if (!$result) return $h;
$host = mysql_fetch_object($result);
mysql_free_result($result);
if (!$host->userid) return $h;
$result = mysql_query("select * from user where id='$host->userid' limit 1");
if (!$result) return $h;
$user = mysql_fetch_object($result);
mysql_free_result($result);
return "$h
(id>$user->name)";
}
function outcome_color($s) {
switch($s) {
// case 0: return 'eeeeee'; // unknown (server state not over probably)
case 1: return '33cc33'; // "Success"
case 3: return 'ff3333'; // "Client error"
}
return '';
}
function credit_str($c) {
if ($c) {
return sprintf("%.3f", $c);
} else {
return '---';
}
}
function show_result($result) {
$wu_name = wu_name_by_id($result->workunitid);
start_table();
row("Created", time_str($result->create_time));
row("Sent", time_str($result->sent_time));
row("Received", time_str($result->received_time));
row("Name", $result->name);
row("Workunit", "workunitid>" . wu_name_by_id($result->workunitid) . "" );
row("Server state", server_state_string($result->server_state));
row("Outcome", outcome_string($result->outcome));
row("Client state", client_state_string($result->client_state));
row("Host ID", "hostid>" . host_name_by_id($result->hostid) . "");
row("Report deadline", time_str($result->report_deadline));
row("CPU time", $result->cpu_time);
row("XML doc in", "".htmlspecialchars($result->xml_doc_in)."
");
row("XML doc out", "".htmlspecialchars($result->xml_doc_out)."
");
row("stderr out", "".htmlspecialchars($result->stderr_out)."
");
row("Batch", $result->batch);
row("File delete state", file_delete_state_str($result->file_delete_state));
row("Validate state", validate_state_str($result->validate_state));
row("claimed credit", $result->claimed_credit);
row("Granted credit", $result->granted_credit);
row("Client version", client_version_string($result->client_version_num));
row("Random",$result->random);
row("","Grep logs");
end_table();
echo "";
}
function result_short_header() {
echo "
result ID |
WU ID |
server state |
outcome |
host (user) |
client ver |
received |
CPU hours |
claimed credit |
granted credit |
";
}
function show_result_short($result) {
$ss = server_state_string($result->server_state);
$oc = outcome_string($result->outcome);
if ($result->outcome == 3) {
$cs = client_state_string($result->client_state);
$oc = "$oc ($cs)";
}
$received = time_str($result->received_time);
$version = client_version_string($result->client_version_num);
$outcome_color = outcome_color($result->outcome);
$host_user = host_user_link($result->hostid);
$cpu_hours = sprintf("%.1f",$result->cpu_time / 3600);
$claimed_credit = credit_str($result->claimed_credit);
$granted_credit = credit_str($result->granted_credit);
echo "
id>$result->id |
workunitid>$result->workunitid |
$ss |
$oc |
$host_user |
$version |
$received |
$cpu_hours |
$claimed_credit |
$granted_credit |
";
}
function show_user($user) {
start_table();
row("ID", $user->id);
row("Created", time_str($user->create_time));
row("Name", $user->name);
row("Authenticator", $user->authenticator);
row("Email address", $user->email_addr);
row("Country", $user->country);
row("Postal code", $user->postal_code);
row("Total credit", $user->total_credit);
row("Average credit", $user->expavg_credit);
row("Last average time", time_str($user->expavg_time));
row("Default venue", $user->venue);
row("Hosts", "id&detail=low>click");
end_table();
}
function team_type_string($s) {
switch ($s) {
case 1: return "Small Company";
case 2: return "Medium Company";
case 3: return "Large Company";
case 4: return "Club";
case 5: return "Primary School";
case 6: return "Secondary School";
case 7: return "Junior College";
case 8: return "University or Department";
case 9: return "Government Agency";
default: return "Unknown";
}
}
function show_team($team) {
start_table();
row("ID", $team->id);
row("Team Founder", "userid>" . user_name_by_id($team->userid) . "");
row("Name", $team->name);
row("Name (HTML Formatted)", "" . htmlspecialchars($team->name_html) . "
" );
row("Url", "url>" . $team->url . "");
row("Type", team_type_string($team->type));
row("Description", $team->description);
row("", "id>List All Members");
end_table();
}
function team_name_by_id($teamid) {
$result = mysql_query("select * from team where id = $teamid");
$team = mysql_fetch_object($result);
return $team->name;
}
function user_name_by_id($user_id) {
$result = mysql_query("select * from user where id = $user_id");
$user = mysql_fetch_object($result);
return $user->name;
}
function app_name_by_id($appid) {
$result = mysql_query("select * from app where id = $appid");
$app = mysql_fetch_object($result);
return $app->name;
}
function wu_name_by_id($workunitid) {
$result = mysql_query("select * from workunit where id = $workunitid");
$wu = mysql_fetch_object($result);
return $wu->name;
}
function platform_name_by_id($platformid) {
$result = mysql_query("select * from platform where id = $platformid");
$plat = mysql_fetch_object($result);
return $plat->name;
}
function host_name_by_id($hostid) {
$result = mysql_query("select * from host where id = $hostid");
$host = mysql_fetch_object($result);
if (!strlen($host->domain_name) && !strlen($host->last_ip_addr)) {
return "(blank)";
} else {
return $host->domain_name . " (" . $host->last_ip_addr . ")";
}
}
?>