app/libraries/AppUtilities.php (349 lines of code) (raw):

<?php //Airavata classes - loaded from app/libraries/Airavata use Airavata\Model\AppCatalog\AppDeployment\ApplicationDeploymentDescription; use Airavata\Model\AppCatalog\AppDeployment\ApplicationModule; use Airavata\Model\AppCatalog\Parallelism\ApplicationParallelismType; use Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths; use Airavata\Model\AppCatalog\AppInterface\ApplicationInterfaceDescription; use Airavata\Model\Application\Io\DataType; use Airavata\Model\Application\Io\InputDataObjectType; use Airavata\Model\Application\Io\OutputDataObjectType; use Airavata\Model\AppCatalog\AppDeployment\CommandObject; class AppUtilities { public static function create_or_update_appModule($inputs, $update = false) { $appModule = new ApplicationModule(array( "appModuleName" => $inputs["appModuleName"], "appModuleVersion" => $inputs["appModuleVersion"], "appModuleDescription" => $inputs["appModuleDescription"] )); if ($update) return Airavata::updateApplicationModule(Session::get('authz-token'), $inputs["appModuleId"], $appModule); else return Airavata::registerApplicationModule(Session::get('authz-token'), Session::get("gateway_id"), $appModule); } public static function deleteAppModule($appModuleId) { return Airavata::deleteApplicationModule(Session::get('authz-token'), $appModuleId); } public static function getAppInterfaceData() { $modules = AppUtilities::getAllModules(); $appInterfaces = Airavata::getAllApplicationInterfaces(Session::get('authz-token'), Session::get("gateway_id")); return array( "appInterfaces" => $appInterfaces, "dataTypes" => \Airavata\Model\Application\Io\DataType::$__names, "modules" => $modules ); } public static function create_or_update_appInterface($appInterfaceValues, $update = false) { //var_dump( $appInterfaceValues); exit; $appInterface = new ApplicationInterfaceDescription(array( "applicationName" => $appInterfaceValues["applicationName"], "applicationDescription" => $appInterfaceValues["applicationDescription"], "applicationModules" => $appInterfaceValues["applicationModules"], "archiveWorkingDirectory" => intval( $appInterfaceValues["archiveWorkingDirectory"]), "hasOptionalFileInputs" => intval( $appInterfaceValues["hasOptionalFileInputs"]) )); if (isset($appInterfaceValues["inputName"])) { foreach ($appInterfaceValues["inputName"] as $index => $name) { $inputDataObjectType = new InputDataObjectType(array( "name" => $name, "value" => $appInterfaceValues["inputValue"][$index], "type" => $appInterfaceValues["inputType"][$index], "applicationArgument" => $appInterfaceValues["applicationArgumentInput"][$index], "standardInput" => $appInterfaceValues["standardInput"][$index], "userFriendlyDescription" => $appInterfaceValues["userFriendlyDescription"][$index], // "metaData" => $appInterfaceValues["metaData"][$index], "inputOrder" => intval($appInterfaceValues["inputOrder"][$index]), "dataStaged" => intval($appInterfaceValues["dataStaged"][$index]), "isRequired" => $appInterfaceValues["isRequiredInput"][$index], "requiredToAddedToCommandLine" => $appInterfaceValues["requiredToAddedToCommandLineInput"][$index], "isReadOnly" => $appInterfaceValues["isReadOnly"][$index] )); $appInterface->applicationInputs[] = $inputDataObjectType; } } if (isset($appInterfaceValues["outputName"])) { foreach ($appInterfaceValues["outputName"] as $index => $name) { $outputDataObjectType = new OutputDataObjectType(array( "name" => $name, "value" => $appInterfaceValues["outputValue"][$index], "type" => $appInterfaceValues["outputType"][$index], "applicationArgument" => $appInterfaceValues["applicationArgumentOutput"][$index], "dataMovement" => intval($appInterfaceValues["dataMovement"][$index]), // "location" => $appInterfaceValues["location"][$index], "isRequired" => $appInterfaceValues["isRequiredOutput"][$index], "requiredToAddedToCommandLine" => $appInterfaceValues["requiredToAddedToCommandLineOutput"][$index], "searchQuery" => $appInterfaceValues["searchQuery"][$index] )); $appInterface->applicationOutputs[] = $outputDataObjectType; } } //var_dump( $appInterface); exit; if ($update) { if (Config::get('pga_config.airavata')['enable-app-catalog-cache']) { if (Cache::has('APP-' . $appInterfaceValues["app-interface-id"])) { Cache::forget('APP-' . $appInterfaceValues["app-interface-id"]); } } Airavata::updateApplicationInterface(Session::get('authz-token'), $appInterfaceValues["app-interface-id"], $appInterface); } else { Airavata::getApplicationInterface(Session::get('authz-token'), Airavata::registerApplicationInterface(Session::get('authz-token'), Session::get("gateway_id"), $appInterface)); } //print_r( "App interface has been created."); } public static function clone_appInterface($appInterfaceValues) { return Airavata::cloneApplicationInterface( Session::get("authz-token"), $appInterfaceValues["applicationInterfaceId"], $appInterfaceValues["applicationName"], Session::get("gateway_id") ); } public static function deleteAppInterface($appInterfaceId) { if (Config::get('pga_config.airavata')['enable-app-catalog-cache']) { if (Cache::has('APP-' . $appInterfaceId)) { Cache::forget('APP-' . $appInterfaceId); } } return Airavata::deleteApplicationInterface(Session::get('authz-token'), $appInterfaceId); } public static function getAppDeploymentData() { $appDeployments = Airavata::getAllApplicationDeployments(Session::get('authz-token'), Session::get("gateway_id")); //var_dump( $appDeployments); exit; $computeResources = Airavata::getAllComputeResourceNames(Session::get('authz-token')); $computeResourceFullObjects = CRUtilities::getAllCRObjects(); $gatewayResourceProfile = Airavata::getGatewayResourceProfile(Session::get('authz-token'), Session::get("gateway_id")); $computeResourcePreferences = $gatewayResourceProfile->computeResourcePreferences; foreach ($computeResourcePreferences as $computeResourcePreference) { $computeResourcePreference->crName = $computeResources[$computeResourcePreference->computeResourceId]; } // Sort compute resource preferences by crName usort($computeResourcePreferences, CommonUtilities::arrSortObjsByKey('crName', 'ASC')); $modules = AppUtilities::getAllModules(); usort($modules, CommonUtilities::arrSortObjsByKey('appModuleName', 'ASC')); $apt = new ApplicationParallelismType(); return array( "appDeployments" => $appDeployments, "applicationParallelismTypes" => $apt::$__names, "computeResourcePreferences" => $computeResourcePreferences, "modules" => $modules, "computeResourceFullObjects" => $computeResourceFullObjects ); } public static function create_or_update_appDeployment($inputs, $update = false) { $appDeploymentValues = $inputs; if (isset($appDeploymentValues["moduleLoadCmds"])) { $moduleLoadCmds = array_unique(array_filter($appDeploymentValues["moduleLoadCmds"], "trim")); $processedModuleLoadCommands = array(); foreach ($moduleLoadCmds as $index => $loadCmd) { $cmdObject = new CommandObject(); $cmdObject->command = $loadCmd; $cmdObject->commandOrder = $index; $processedModuleLoadCommands[] = $cmdObject; } $appDeploymentValues["moduleLoadCmds"] = $processedModuleLoadCommands; } if (isset($appDeploymentValues["libraryPrependPathName"])) { $libPrependPathNames = array_unique(array_filter($appDeploymentValues["libraryPrependPathName"], "trim")); foreach ($libPrependPathNames as $index => $prependName) { $envPath = new SetEnvPaths(array( "name" => $prependName, "value" => $appDeploymentValues["libraryPrependPathValue"][$index] )); $appDeploymentValues["libPrependPaths"][] = $envPath; } } if (isset($appDeploymentValues["libraryAppendPathName"])) { $libAppendPathNames = array_unique(array_filter($appDeploymentValues["libraryAppendPathName"], "trim")); foreach ($libAppendPathNames as $index => $appendName) { $envPath = new SetEnvPaths(array( "name" => $appendName, "value" => $appDeploymentValues["libraryAppendPathValue"][$index] )); $appDeploymentValues["libAppendPaths"][] = $envPath; } } if (isset($appDeploymentValues["environmentName"])) { $environmentNames = array_unique(array_filter($appDeploymentValues["environmentName"], "trim")); foreach ($environmentNames as $index => $envName) { $envPath = new SetEnvPaths(array( "name" => $envName, "value" => $appDeploymentValues["environmentValue"][$index] )); $envPath->envPathOrder = $index; $appDeploymentValues["setEnvironment"][] = $envPath; } } if (isset($appDeploymentValues["preJobCommand"])) { $preJobCmds = array_unique(array_filter($appDeploymentValues["preJobCommand"], "trim")); foreach ($preJobCmds as $index => $preJobCmd) { $cmdObject = new CommandObject(); $cmdObject->command = $preJobCmd; $cmdObject->commandOrder = $index; $appDeploymentValues["preJobCommands"][] = $cmdObject; } } if (isset($appDeploymentValues["postJobCommand"])) { $postJobCmds = array_unique(array_filter($appDeploymentValues["postJobCommand"], "trim")); foreach ($postJobCmds as $index => $postJobCmd) { $cmdObject = new CommandObject(); $cmdObject->command = $postJobCmd; $cmdObject->commandOrder = $index; $appDeploymentValues["postJobCommands"][] = $cmdObject; } } if (isset($appDeploymentValues["parallelism"])) { switch($appDeploymentValues["parallelism"]){ case "MPI": $appDeploymentValues["parallelism"] = ApplicationParallelismType::MPI; break; case "SERIAL": $appDeploymentValues["parallelism"] = ApplicationParallelismType::SERIAL; break; case "OPENMP": $appDeploymentValues["parallelism"] = ApplicationParallelismType::OPENMP; break; case "OPENMP_MPI": $appDeploymentValues["parallelism"] = ApplicationParallelismType::OPENMP_MPI; break; case "CRAY_MPI": $appDeploymentValues["parallelism"] = ApplicationParallelismType::CRAY_MPI; break; case "CCM": $appDeploymentValues["parallelism"] = ApplicationParallelismType::CCM; break; } } //var_dump( $appDeploymentValues); exit; $appDeployment = new ApplicationDeploymentDescription($appDeploymentValues); if ($update) Airavata::updateApplicationDeployment(Session::get('authz-token'), $inputs["app-deployment-id"], $appDeployment); else $appDeploymentId = Airavata::registerApplicationDeployment(Session::get('authz-token'), Session::get("gateway_id"), $appDeployment); return; } public static function deleteAppDeployment($appDeploymentId) { return Airavata::deleteApplicationDeployment(Session::get('authz-token'), $appDeploymentId); } public static function getAllModules() { return Airavata::getAllAppModules(Session::get('authz-token'), Session::get("gateway_id")); } public static function checkAppModuleConnections( $appModuleId){ $appInterfaces = Airavata::getAllApplicationInterfaces( Session::get('authz-token'), Session::get("gateway_id")); $appDeployments = Airavata::getAllApplicationDeployments( Session::get('authz-token'), Session::get("gateway_id")); $connections = array(); $connections["appInterfaces"] = array(); $connections["appDeployments"] = array(); foreach($appInterfaces as $appInterface){ foreach($appInterface->applicationModules as $appModule){ var_dump( $appModule); if($appModule == $appModuleId){ $connections["appInterfaces"][] = $appInterface->applicationName; } } } foreach($appDeployments as $appDeployment){ if($appDeployment->appModuleId == $appModuleId){ $connections["appDeployments"][] = $appDeployment->appDeploymentId; } } return $connections; } /** * Get all available applications * @return null */ public static function get_all_applications() { $applications = null; try { $applications = Airavata::getAllApplicationInterfaceNames(Session::get('authz-token'), Session::get("gateway_id")); } catch (InvalidRequestException $ire) { CommonUtilities::print_error_message('<p>There was a problem getting all applications. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>'); } catch (AiravataClientException $ace) { CommonUtilities::print_error_message('<p>There was a problem getting all applications. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>'); } catch (AiravataSystemException $ase) { CommonUtilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment. Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>'); /* CommonUtilities::print_error_message('<p>There was a problem getting all applications. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>'); */ } if (count($applications) == 0) CommonUtilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment. Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>'); return $applications; } /** * Get the interface for the application with the given ID * @param $id * @return null */ public static function get_application_interface($id) { $applicationInterface = null; try { if (Config::get('pga_config.airavata')['enable-app-catalog-cache']) { if (Cache::has('APP-' . $id)) { return Cache::get('APP-' . $id); } else { $applicationInterface = Airavata::getApplicationInterface(Session::get('authz-token'), $id); Cache::put('APP-' . $id, $applicationInterface, Config::get('pga_config.airavata')['app-catalog-cache-duration']); return $applicationInterface; } } else { return $applicationInterface = Airavata::getApplicationInterface(Session::get('authz-token'), $id); } } catch (InvalidRequestException $ire) { CommonUtilities::print_error_message('<p>There was a problem getting the application interface. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>'); } catch (AiravataClientException $ace) { CommonUtilities::print_error_message('<p>There was a problem getting the application interface. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>'); } catch (AiravataSystemException $ase) { CommonUtilities::print_error_message('<p>There was a problem getting the application interface. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>'); } catch(Exception $ex){ return null; } } /** * Get a list of the inputs for the application with the given ID * @param $id * @return null */ public static function get_application_inputs($id) { $inputs = null; try { $inputs = Airavata::getApplicationInputs(Session::get('authz-token'), $id); $inputs = AppUtilities::sanitize_application_input_names($inputs); } catch (InvalidRequestException $ire) { CommonUtilities::print_error_message('<p>There was a problem getting application inputs. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>'); } catch (AiravataClientException $ace) { CommonUtilities::print_error_message('<p>There was a problem getting application inputs. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>'); } catch (AiravataSystemException $ase) { CommonUtilities::print_error_message('<p>There was a problem getting application inputs. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>'); } return $inputs; } /** * Add a field called `sanitizedFormName` to each application input, which * is a sanitized ('.' and ' ' converted to underscores) version of the * `name` field. The reason for this is that PHP will automatically convert '.' * and spaces to underscores when the form is POSTed so we need a safe form * name to use both when generating the form and when consuming it. * @param $inputs - the output of `get_application_inputs()` * @return the application inputs with `sanitizedFormName` field added */ private static function sanitize_application_input_names($inputs) { foreach ($inputs as $index => $input) { $input->sanitizedFormName = str_replace(array(".", " "), "_", $input->name); } return $inputs; } /** * Get a list of the outputs for the application with the given ID * @param $id * @return null */ public static function get_application_outputs($id) { $outputs = null; try { $outputs = Airavata::getApplicationOutputs(Session::get('authz-token'), $id); } catch (InvalidRequestException $ire) { CommonUtilities::print_error_message('<p>There was a problem getting application outputs. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>'); } catch (AiravataClientException $ace) { CommonUtilities::print_error_message('<p>There was a problem getting application outputs. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>'); } catch (AiravataSystemException $ase) { CommonUtilities::print_error_message('<p>There was a problem getting application outputs. Please try again later or submit a bug report using the link in the Help menu.</p>' . '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>'); } return $outputs; } }