. require_once("../inc/submit_db.inc"); require_once("../inc/util.inc"); require_once("../inc/result.inc"); require_once("../inc/submit_util.inc"); require_once("../project/project.inc"); error_reporting(E_ALL); ini_set('display_errors', true); ini_set('display_startup_errors', true); // the job submission "home page": // show the user's in-progress and completed batches, // and a button for creating a new batch // function handle_main($user) { page_head("Job submission and control"); $first = true; $batches = BoincBatch::enum("user_id = $user->id"); foreach ($batches as $batch) { if ($batch->state < BATCH_STATE_COMPLETE) { $wus = BoincWorkunit::enum("batch = $batch->id"); $batch = get_batch_params($batch, $wus); } $app = BoincApp::lookup_id($batch->app_id); if ($app) { $batch->app_name = $app->name; } else { $batch->app_name = "unknown"; } } foreach ($batches as $batch) { if ($batch->state != BATCH_STATE_IN_PROGRESS) continue; if ($first) { $first = false; echo "
You have no in-progress batches.\n"; } else { end_table(); } $first = true; foreach ($batches as $batch) { if ($batch->state != BATCH_STATE_COMPLETE) continue; if ($first) { $first = false; echo "
You have no completed batches.\n"; } else { end_table(); } $first = true; foreach ($batches as $batch) { if ($batch->state != BATCH_STATE_ABORTED) continue; if ($first) { $first = false; echo "
Return to job control page\n";
page_tail();
}
// show the details of an existing batch
//
function handle_query_batch($user) {
$batch_id = get_int('batch_id');
$batch = BoincBatch::lookup_id($batch_id);
$app = BoincApp::lookup_id($batch->app_id);
page_head("Batch $batch_id");
start_table();
row2("name", $batch->name);
row2("application", $app->name);
row2("state", batch_state_string($batch->state));
row2("# jobs", $batch->njobs);
row2("# error jobs", $batch->nerror_jobs);
row2("progress", sprintf("%.0f%%", $batch->fraction_done*100));
if ($batch->completion_time) {
row2("completed", local_time_str($batch->completion_time));
}
row2("GFLOP/hours, estimated", number_format(credit_to_gflop_hours($batch->credit_estimate), 2));
row2("GFLOP/hours, actual", number_format(credit_to_gflop_hours($batch->credit_canonical), 2));
end_table();
$url = boinc_get_output_files_url($user, $batch_id);
show_button($url, "Get zipped output files");
switch ($batch->state) {
case BATCH_STATE_IN_PROGRESS:
echo "
";
show_button(
"submit.php?action=abort_batch_confirm&batch_id=$batch_id",
"Abort batch"
);
break;
case BATCH_STATE_COMPLETE:
case BATCH_STATE_ABORTED:
echo "
";
show_button(
"submit.php?action=retire_batch_confirm&batch_id=$batch_id",
"Retire batch"
);
break;
}
echo "
Return to job control page\n"; page_tail(); } // show the details of a job, including links to see the output files // function handle_query_job() { $wuid = get_int('wuid'); page_head("Job $wuid"); echo "View workunit page\n"; // show input files // echo "
Return to job control page\n"; page_tail(); } function handle_abort_batch_confirm() { $batch_id = get_int('batch_id'); page_head("Confirm abort batch"); echo " Aborting a batch will cancel all unstarted jobs. Are you sure you want to do this?
"; show_button( "submit.php?action=abort_batch&batch_id=$batch_id", "Yes - abort batch" ); echo "
Return to job control page\n"; page_tail(); } function handle_abort_batch() { $batch_id = get_int('batch_id'); $batch = BoincBatch::lookup_id($batch_id); if (!$batch) error("no such batch"); if ($batch->user_id != $user->id) { error("not owner"); } abort_batch($batch); page_head("Batch aborted"); echo "
Return to job control page\n"; page_tail(); } function handle_retire_batch_confirm() { $batch_id = get_int('batch_id'); page_head("Confirm retire batch"); echo " Retiring a batch will remove all of its output files. Are you sure you want to do this?
"; show_button( "submit.php?action=retire_batch&batch_id=$batch_id", "Yes - retire batch" ); echo "
Return to job control page\n"; page_tail(); } function handle_retire_batch() { $batch_id = get_int('batch_id'); $batch = BoincBatch::lookup_id($batch_id); if ($batch->user_id != $user->id) { error_page("not owner"); } retire_batch($batch); page_head("Batch retired"); echo "
Return to job control page\n"; page_tail(); } $user = get_logged_in_user(); $action = get_str('action', true); switch ($action) { case '': handle_main($user); break; case 'abort_batch': handle_abort_batch(); break; case 'abort_batch_confirm': handle_abort_batch_confirm(); break; case 'query_batch': handle_query_batch($user); break; case 'query_job': handle_query_job(); break; case 'retire_batch': handle_retire_batch(); break; case 'retire_batch_confirm': handle_retire_batch_confirm(); break; default: error_page('no such action'); } ?>