| <?php |
| |
| use Airavata\Model\Status\JobState; |
| |
| class ExperimentController extends BaseController |
| { |
| |
| /** |
| * Limit used in fetching paginated results |
| * @var int |
| */ |
| var $limit = 20; |
| |
| /** |
| * Instantiate a new ExperimentController Instance |
| **/ |
| |
| public function __construct() |
| { |
| $this->beforeFilter('verifylogin'); |
| $this->beforeFilter('verifyauthorizeduser'); |
| Session::put("nav-active", "experiment"); |
| } |
| |
| public function createView() |
| { |
| Session::forget('exp_create_continue'); |
| return View::make('experiment/create'); |
| } |
| |
| public function createSubmit() |
| { |
| if (isset($_POST['continue'])) { |
| Session::put('exp_create_continue', true); |
| |
| $computeResources = CRUtilities::create_compute_resources_select($_POST['application'], null); |
| |
| $queueDefaults = array("queueName" => Config::get('pga_config.airavata')["queue-name"], |
| "nodeCount" => Config::get('pga_config.airavata')["node-count"], |
| "cpuCount" => Config::get('pga_config.airavata')["total-cpu-count"], |
| "wallTimeLimit" => Config::get('pga_config.airavata')["wall-time-limit"] |
| ); |
| |
| $experimentInputs = array( |
| "disabled" => ' disabled', |
| "experimentName" => $_POST['experiment-name'], |
| "experimentDescription" => $_POST['experiment-description'] . ' ', |
| "project" => $_POST['project'], |
| "application" => $_POST['application'], |
| "allowedFileSize" => Config::get('pga_config.airavata')["server-allowed-file-size"], |
| "echo" => ($_POST['application'] == 'Echo') ? ' selected' : '', |
| "wrf" => ($_POST['application'] == 'WRF') ? ' selected' : '', |
| "queueDefaults" => $queueDefaults, |
| "advancedOptions" => Config::get('pga_config.airavata')["advanced-experiment-options"], |
| "computeResources" => $computeResources, |
| "resourceHostId" => null, |
| "advancedOptions" => Config::get('pga_config.airavata')["advanced-experiment-options"] |
| ); |
| |
| return View::make("experiment/create-complete", array("expInputs" => $experimentInputs)); |
| } else if (isset($_POST['save']) || isset($_POST['launch'])) { |
| $expId = ExperimentUtilities::create_experiment(); |
| |
| if (isset($_POST['launch']) && $expId) { |
| ExperimentUtilities::launch_experiment($expId); |
| } |
| /* Not required. |
| else |
| { |
| CommonUtilities::print_success_message("<p>Experiment {$_POST['experiment-name']} created!</p>" . |
| '<p>You will be redirected to the summary page shortly, or you can |
| <a href=' . URL::to('/') . '"/experiment/summary?expId=' . $expId . '">go directly</a> to experiment summary page.</p>'); |
| |
| }*/ |
| return Redirect::to('experiment/summary?expId=' . $expId); |
| } else |
| return Redirect::to("home")->with("message", "Something went wrong here. Please file a bug report using the link in the Help menu."); |
| } |
| |
| public function summary() |
| { |
| $experiment = ExperimentUtilities::get_experiment($_GET['expId']); |
| //var_dump( $detailedExperiment); exit; |
| if ($experiment != null) { |
| $project = ProjectUtilities::get_project($experiment->projectId); |
| $expVal = ExperimentUtilities::get_experiment_values($experiment, $project); |
| $jobDetails = ExperimentUtilities::get_job_details($experiment->experimentId); |
| //var_dump( $jobDetails); exit; |
| foreach( $jobDetails as $index => $jobDetail){ |
| if(isset($jobDetail->jobStatus)){ |
| $jobDetails[ $index]->jobStatus->jobStateName = JobState::$__names[$jobDetail->jobStatus->jobState]; |
| } |
| else{ |
| $jobDetails[ $index]->jobStatus = new stdClass(); |
| $jobDetails[ $index]->jobStatus->jobStateName = null; |
| } |
| } |
| $expVal["jobDetails"] = $jobDetails; |
| |
| |
| $data = array( |
| "expId" => Input::get("expId"), |
| "experiment" => $experiment, |
| "project" => $project, |
| "jobDetails" => $jobDetails, |
| "expVal" => $expVal |
| ); |
| if( Input::has("dashboard")) |
| { |
| $detailedExperiment = ExperimentUtilities::get_detailed_experiment( $_GET['expId']); |
| $data["detailedExperiment"] = $detailedExperiment; |
| } |
| |
| if (Request::ajax()) { |
| //admin wants to see an experiment summary |
| if (Input::has("dashboard")) { |
| $data["dashboard"] = true; |
| return View::make("partials/experiment-info", $data); |
| } else |
| return json_encode($data); |
| } else { |
| return View::make("experiment/summary", $data); |
| } |
| } else { |
| if (Input::has("dashboard")) |
| return View::make("partials/experiment-info", array("invalidExperimentId" => 1)); |
| else |
| return View::make("experiment/summary", array("invalidExperimentId" => 1)); |
| } |
| } |
| |
| public function expCancel() |
| { |
| ExperimentUtilities::cancel_experiment(Input::get("expId")); |
| |
| return Redirect::to('experiment/summary?expId=' . Input::get("expId")); |
| } |
| |
| public function expChange() |
| { |
| //var_dump( Input::all() ); exit; |
| $experiment = ExperimentUtilities::get_experiment(Input::get('expId')); |
| $project = ProjectUtilities::get_project($experiment->projectId); |
| |
| $expVal = ExperimentUtilities::get_experiment_values($experiment, $project); |
| $expVal["jobState"] = ExperimentUtilities::get_job_status($experiment); |
| /*if (isset($_POST['save'])) |
| { |
| $updatedExperiment = CommonUtilities::apply_changes_to_experiment($experiment); |
| |
| CommonUtilities::update_experiment($experiment->experimentId, $updatedExperiment); |
| }*/ |
| if (isset($_POST['launch'])) { |
| ExperimentUtilities::launch_experiment($experiment->experimentId); |
| return Redirect::to('experiment/summary?expId=' . $experiment->experimentId); |
| } elseif (isset($_POST['cancel'])) { |
| ExperimentUtilities::cancel_experiment($experiment->experimentId); |
| return Redirect::to('experiment/summary?expId=' . $experiment->experimentId); |
| |
| } |
| } |
| |
| public function editView() |
| { |
| $queueDefaults = array("queueName" => Config::get('pga_config.airavata')["queue-name"], |
| "nodeCount" => Config::get('pga_config.airavata')["node-count"], |
| "cpuCount" => Config::get('pga_config.airavata')["total-cpu-count"], |
| "wallTimeLimit" => Config::get('pga_config.airavata')["wall-time-limit"] |
| ); |
| |
| $experiment = ExperimentUtilities::get_experiment($_GET['expId']); |
| $project = ProjectUtilities::get_project($experiment->projectId); |
| |
| $expVal = ExperimentUtilities::get_experiment_values($experiment, $project); |
| $expVal["jobState"] = ExperimentUtilities::get_job_status($experiment); |
| |
| $computeResources = CRUtilities::create_compute_resources_select($experiment->executionId, $expVal['scheduling']->resourceHostId); |
| |
| $experimentInputs = array( |
| "disabled" => ' ', |
| "experimentName" => $experiment->experimentName, |
| "experimentDescription" => $experiment->description, |
| "application" => $experiment->executionId, |
| "autoSchedule" => $experiment->userConfigurationData->airavataAutoSchedule, |
| "allowedFileSize" => Config::get('pga_config.airavata')["server-allowed-file-size"], |
| 'experiment' => $experiment, |
| "queueDefaults" => $queueDefaults, |
| 'project' => $project, |
| 'expVal' => $expVal, |
| 'cloning' => true, |
| 'advancedOptions' => Config::get('pga_config.airavata')["advanced-experiment-options"], |
| 'computeResources' => $computeResources, |
| "resourceHostId" => $expVal['scheduling']->resourceHostId, |
| 'project' => $project, |
| 'expVal' => $expVal, |
| 'cloning' => true, |
| 'advancedOptions' => Config::get('pga_config.airavata')["advanced-experiment-options"] |
| ); |
| return View::make("experiment/edit", array("expInputs" => $experimentInputs)); |
| } |
| |
| public function cloneExperiment() |
| { |
| if (isset($_GET['expId'])) { |
| $cloneId = ExperimentUtilities::clone_experiment($_GET['expId']); |
| $experiment = ExperimentUtilities::get_experiment($cloneId); |
| $project = ProjectUtilities::get_project($experiment->projectId); |
| |
| $expVal = ExperimentUtilities::get_experiment_values($experiment, $project); |
| $expVal["jobState"] = ExperimentUtilities::get_job_status($experiment); |
| |
| return Redirect::to('experiment/edit?expId=' . $cloneId); |
| } |
| } |
| |
| public function editSubmit() |
| { |
| if (isset($_POST['save']) || isset($_POST['launch'])) { |
| $experiment = ExperimentUtilities::get_experiment(Input::get('expId')); // update local experiment variable |
| $updatedExperiment = ExperimentUtilities::apply_changes_to_experiment($experiment, Input::all()); |
| |
| ExperimentUtilities::update_experiment($experiment->experimentId, $updatedExperiment); |
| |
| if (isset($_POST['save'])) { |
| $experiment = ExperimentUtilities::get_experiment(Input::get('expId')); // update local experiment variable |
| } |
| if (isset($_POST['launch'])) { |
| ExperimentUtilities::launch_experiment($experiment->experimentId); |
| } |
| |
| return Redirect::to('experiment/summary?expId=' . $experiment->experimentId); |
| } else |
| return View::make("home"); |
| } |
| |
| public function getQueueView() |
| { |
| $queues = ExperimentUtilities::getQueueDatafromResourceId(Input::get("crId")); |
| $queueDefaults = array("queueName" => Config::get('pga_config.airavata')["queue-name"], |
| "nodeCount" => Config::get('pga_config.airavata')["node-count"], |
| "cpuCount" => Config::get('pga_config.airavata')["total-cpu-count"], |
| "wallTimeLimit" => Config::get('pga_config.airavata')["wall-time-limit"] |
| ); |
| return View::make("partials/experiment-queue-block", array("queues" => $queues, "queueDefaults" => $queueDefaults)); |
| } |
| |
| public function browseView() |
| { |
| $pageNo = Input::get('pageNo'); |
| $prev = Input::get('prev'); |
| $isSearch = Input::get('search'); |
| if (empty($pageNo) || isset($isSearch) ) { |
| $pageNo = 1; |
| } else { |
| if (isset($prev)) { |
| $pageNo -= 1; |
| } else { |
| $pageNo += 1; |
| } |
| } |
| |
| $expContainer = ExperimentUtilities::get_expsearch_results_with_pagination(Input::all(), $this->limit, |
| ($pageNo - 1) * $this->limit); |
| $experimentStates = ExperimentUtilities::getExpStates(); |
| |
| return View::make('experiment/browse', array( |
| 'input' => Input::all(), |
| 'pageNo' => $pageNo, |
| 'limit' => $this->limit, |
| 'expStates' => $experimentStates, |
| 'expContainer' => $expContainer |
| )); |
| } |
| } |
| |
| ?> |