public static Experiment getExperiment(ExperimentResource experimentResource) throws RegistryException { if (experimentResource != null){ Experiment experiment = new Experiment(); if (experimentResource.getProject()!= null){ experiment.setProjectID(experimentResource.getProject().getId()); experiment.setExperimentID(experimentResource.getExpID()); experiment.setCreationTime(experimentResource.getCreationTime().getTime()); experiment.setUserName(experimentResource.getExecutionUser()); experiment.setName(experimentResource.getExpName()); experiment.setDescription(experimentResource.getDescription()); experiment.setApplicationId(experimentResource.getApplicationId()); experiment.setApplicationVersion(experimentResource.getApplicationVersion()); experiment.setWorkflowTemplateId(experimentResource.getWorkflowTemplateId()); experiment.setEnableEmailNotification(experimentResource.isEnableEmailNotifications()); experiment.setGatewayExecutionId(experimentResource.getGatewayExecutionId()); if (experiment.isEnableEmailNotification()){ List<NotificationEmailResource> notificationEmails = experimentResource.getNotificationEmails(); experiment.setEmailAddresses(getEmailAddresses(notificationEmails)); experiment.setWorkflowTemplateVersion(experimentResource.getWorkflowTemplateVersion()); experiment.setWorkflowExecutionInstanceId(experimentResource.getWorkflowExecutionId()); List<ExperimentInputResource> experimentInputs = experimentResource.getExperimentInputs(); experiment.setExperimentInputs(getExpInputs(experimentInputs)); List<ExperimentOutputResource> experimentOutputs = experimentResource.getExperimentOutputs(); experiment.setExperimentOutputs(getExpOutputs(experimentOutputs)); StatusResource experimentStatus = experimentResource.getExperimentStatus(); if (experimentStatus != null){ experiment.setExperimentStatus(getExperimentStatus(experimentStatus));
public void updateExperiment(Experiment experiment, String expId) throws RegistryException { try { ExperimentResource existingExperiment = gatewayResource.getExperiment(expId); existingExperiment.setExpName(experiment.getName()); existingExperiment.setExecutionUser(experiment.getUserName()); existingExperiment.setGateway(gatewayResource); existingExperiment.setGatewayExecutionId(experiment.getGatewayExecutionId()); if (!workerResource.isProjectExists(experiment.getProjectID())) { logger.error("Project does not exist in the system.."); throw new Exception("Project does not exist in the system, Please create the project first..."); ProjectResource project = workerResource.getProject(experiment.getProjectID()); existingExperiment.setProject(project); existingExperiment.setCreationTime(AiravataUtils.getTime(experiment.getCreationTime())); existingExperiment.setDescription(experiment.getDescription()); existingExperiment.setApplicationId(experiment.getApplicationId()); existingExperiment.setApplicationVersion(experiment.getApplicationVersion()); existingExperiment.setWorkflowTemplateId(experiment.getWorkflowTemplateId()); existingExperiment.setWorkflowTemplateVersion(experiment.getWorkflowTemplateVersion()); existingExperiment.setWorkflowExecutionId(experiment.getWorkflowExecutionInstanceId()); existingExperiment.setEnableEmailNotifications(experiment.isEnableEmailNotification()); existingExperiment.save(); List<String> emailAddresses = experiment.getEmailAddresses(); List<InputDataObjectType> experimentInputs = experiment.getExperimentInputs(); if (experimentInputs != null && !experimentInputs.isEmpty()) { updateExpInputs(experimentInputs, existingExperiment); UserConfigurationData userConfigurationData = experiment.getUserConfigurationData();
final Experiment experiment = new Experiment(); experiment.setApplicationId(appId); ComputationalResourceScheduling scheduling = new ComputationalResourceScheduling(); scheduling.setResourceHostId(hostId); userConfigurationData.setOverrideManualScheduledParams(false); userConfigurationData.setComputationalResourceScheduling(scheduling); experiment.setUserConfigurationData(userConfigurationData); experiment.setName(instanceName); experiment.setProjectID(project.getProjectID()); experiment.setUserName(thriftClientData.getUsername()); experiment.addToExperimentInputs(elem ); experiment.addToExperimentOutputs(elem ); experiment.setExperimentID(airavataClient.createExperiment(experiment)); airavataClient.launchExperiment(experiment.getExperimentID(), "testToken"); hide(); JOptionPane.showMessageDialog(null, "Experiment Launched. You will be alerted on completion."); String status = airavataClient.getExperimentStatus(experiment.getExperimentID()).getExperimentState().toString().trim(); while(!status.equals("COMPLETED") && !status.equals("FAILED")){ try { Thread.sleep(1000); status = airavataClient.getExperimentStatus(experiment.getExperimentID()).getExperimentState().toString().trim(); } catch (InterruptedException e) { output = "";
simpleExperiment.setExperimentOutputs(exOut); UserConfigurationData userConfigurationData = new UserConfigurationData(); userConfigurationData.setComputationalResourceScheduling(scheduling); simpleExperiment.setUserConfigurationData(userConfigurationData); String expId = null; try {
this.getWorkflow().setExecutionState(WorkflowExecutionState.RUNNING); ArrayList<Node> inputNodes = this.getInputNodesDynamically(); List<InputDataObjectType> experimentInputs = experiment.getExperimentInputs(); Map<String,String> inputDataStrings=new HashMap<String, String>(); for (InputDataObjectType dataObjectType : experimentInputs) { publishNodeStatusChange(WorkflowNodeState.EXECUTING,node.getID(),experiment.getExperimentID()); if (inputDataStrings.containsKey(node.getID())){ ((InputNode)node).setDefaultValue(inputDataStrings.get(node.getID())); invokedNode.add(node); node.setState(NodeExecutionState.FINISHED); publishNodeStatusChange(WorkflowNodeState.INVOKED, node.getID(), experiment.getExperimentID()); notifyViaInteractor(WorkflowExecutionMessage.NODE_STATE_CHANGED, null); String portId= ((InputNode) node).getID(); getRegistry().update(RegistryModelType.WORKFLOW_NODE_DETAIL, workflowNode, workflowNode.getNodeInstanceId()); updateWorkflowNodeStatus(workflowNode, WorkflowNodeState.COMPLETED); publishNodeStatusChange(WorkflowNodeState.COMPLETED, node.getID(), experiment.getExperimentID()); log.info("Workflow execution "+experiment.getExperimentID()+" is paused."); while (this.getWorkflow().getExecutionState() == WorkflowExecutionState.PAUSED) { try { log.info("Workflow execution "+experiment.getExperimentID()+" is resumed."); publishNodeStatusChange(WorkflowNodeState.INVOKED, node.getID(), experiment.getExperimentID()); threadList.add(th); th.start();
@Subscribe public void taskOutputChanged(TaskOutputChangeEvent taskOutputEvent){ String taskId = taskOutputEvent.getTaskIdentity().getTaskId(); if (isTaskAwaiting(taskId)){ WorkflowNodeState state=WorkflowNodeState.COMPLETED; Node node = getAwaitingNodeForTask(taskId); List<OutputDataObjectType> applicationOutputs = taskOutputEvent.getOutput(); Map<String, String> outputData = new HashMap<String, String>(); for (OutputDataObjectType outputObj : applicationOutputs) { List<DataPort> outputPorts = node.getOutputPorts(); for (DataPort dataPort : outputPorts) { if (dataPort.getName().equals(outputObj.getName())){ outputData.put(outputObj.getName(), outputObj.getValue()); } } } nodeOutputData.put(node, outputData); setupNodeDetailsOutput(node); node.setState(NodeExecutionState.FINISHED); try { publishNodeStatusChange(WorkflowNodeState.COMPLETED, node.getID(), experiment.getExperimentID()); updateWorkflowNodeStatus(nodeInstanceList.get(node), state); } catch (RegistryException e) { e.printStackTrace(); } catch (AiravataException e) { e.printStackTrace(); } } }
jobExecutionContext.getExperiment().setUserName(loginUser);
public static ExecutionType getExecutionType(Experiment experiment){ try { ApplicationInterface applicationInterface = AppCatalogFactory.getAppCatalog().getApplicationInterface(); List<String> allApplicationInterfaceIds = applicationInterface.getAllApplicationInterfaceIds(); String applicationId = experiment.getApplicationId(); if (allApplicationInterfaceIds.contains(applicationId)){ return ExecutionType.SINGLE_APP; } else { List<String> allWorkflows = WorkflowCatalogFactory.getWorkflowCatalog().getAllWorkflows(); if (allWorkflows.contains(applicationId)){ return ExecutionType.WORKFLOW; } } } catch (AppCatalogException e) { e.printStackTrace(); } return ExecutionType.UNKNOWN; } }
public void initialize(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException { log.info("Initializing UNICORE Provider.."); super.initialize(jobExecutionContext); secProperties = (DefaultClientConfiguration) jobExecutionContext.getProperty(PROP_CLIENT_CONF); if (secProperties != null) { secProperties = secProperties.clone(); return; } SecurityUtils.addSecurityContext(jobExecutionContext); UNICORESecurityContext unicoreContext = (UNICORESecurityContext) jobExecutionContext.getSecurityContext(X509SecurityContext.X509_SECURITY_CONTEXT); try{ if (jobExecutionContext.getExperiment() .getUserConfigurationData().isGenerateCert()) { secProperties = unicoreContext .getDefaultConfiguration(false, jobExecutionContext .getExperiment().getUserConfigurationData()); }else { secProperties = unicoreContext.getDefaultConfiguration(false); } } catch (ApplicationSettingsException e) { throw new GFacProviderException("Error initializing security of Unicore provider", e); } if (log.isDebugEnabled()) { log.debug("Security properties initialized."); } }
private WorkflowNodeDetails createWorkflowNodeDetails(Node node) throws RegistryException { WorkflowNodeDetails workflowNode = ExperimentModelUtil.createWorkflowNode(node.getName(), null); ExecutionUnit executionUnit = ExecutionUnit.APPLICATION; String executionData = null; if (node instanceof InputNode){ executionUnit = ExecutionUnit.INPUT; } else if (node instanceof OutputNode){ executionUnit = ExecutionUnit.OUTPUT; } if (node instanceof WSNode){ executionUnit = ExecutionUnit.APPLICATION; executionData = ((WSNode)node).getComponent().getApplication().getApplicationId(); } workflowNode.setExecutionUnit(executionUnit); workflowNode.setExecutionUnitData(executionData); workflowNode.setNodeInstanceId((String) getRegistry().add(ChildDataType.WORKFLOW_NODE_DETAIL, workflowNode, getExperiment().getExperimentID())); nodeInstanceList.put(node, workflowNode); setupNodeDetailsInput(node, workflowNode); return workflowNode; }
@Override public void launchExperiment(String experimentId, String token) throws WorkflowEngineException { try { Registry registry = RegistryFactory.getDefaultRegistry(); Experiment experiment = (Experiment)registry.get(RegistryModelType.EXPERIMENT, experimentId); WorkflowCatalog workflowCatalog = WorkflowCatalogFactory.getWorkflowCatalog(); WorkflowInterpreterConfiguration config = new WorkflowInterpreterConfiguration(new Workflow(workflowCatalog.getWorkflow(experiment.getApplicationId()).getGraph())); final WorkflowInterpreter workflowInterpreter = new WorkflowInterpreter(experiment, token, config , getOrchestratorClient(), rabbitMQPublisher); new Thread(){ public void run() { try { workflowInterpreter.scheduleDynamically(); } catch (WorkflowException e) { e.printStackTrace(); } catch (RegistryException e) { e.printStackTrace(); } catch (AiravataException e) { e.printStackTrace(); } }; }.start(); } catch (Exception e) { logger.error("Error while retrieving the experiment", e); WorkflowEngineException exception = new WorkflowEngineException("Error while launching the workflow experiment. More info : " + e.getMessage()); throw exception; } }
public String addExperiment(Experiment experiment, String gatewayId) throws RegistryException { String experimentID; try { if (!ResourceUtils.isUserExist(experiment.getUserName())) { ResourceUtils.addUser(experiment.getUserName(), null); experimentID = getExperimentID(experiment.getName()); experiment.setExperimentID(experimentID); ExperimentResource experimentResource = new ExperimentResource(); experimentResource.setExpID(experimentID); experimentResource.setExpName(experiment.getName()); experimentResource.setExecutionUser(experiment.getUserName()); GatewayResource gateway = (GatewayResource)ResourceUtils.getGateway(gatewayId); experimentResource.setGateway(gateway); experimentResource.setGatewayExecutionId(experiment.getGatewayExecutionId()); experimentResource.setEnableEmailNotifications(experiment.isEnableEmailNotification()); if (!workerResource.isProjectExists(experiment.getProjectID())) { logger.error("Project does not exist in the system.."); throw new Exception("Project does not exist in the system, Please create the project first..."); ProjectResource project = workerResource.getProject(experiment.getProjectID()); experimentResource.setProject(project); experimentResource.setCreationTime(AiravataUtils.getTime(experiment.getCreationTime())); experimentResource.setDescription(experiment.getDescription()); experimentResource.setApplicationId(experiment.getApplicationId()); experimentResource.setApplicationVersion(experiment.getApplicationVersion()); experimentResource.setWorkflowTemplateId(experiment.getWorkflowTemplateId()); experimentResource.setWorkflowTemplateVersion(experiment.getWorkflowTemplateVersion()); experimentResource.setWorkflowExecutionId(experiment.getWorkflowExecutionInstanceId()); experimentResource.save();
project.setProjectID(airavataClient.createProject(project)); final List<InputNode> inputNodes = GraphUtil.getInputNodes(this.workflow.getGraph()); final Experiment experiment = new Experiment(); experiment.setApplicationId(w.getTemplateId()); experiment.setName(instanceName); experiment.setProjectID(project.getProjectID()); experiment.setUserName(thriftClientData.getUsername()); for (int i = 0; i < inputNodes.size(); i++) { InputNode inputNode = inputNodes.get(i); elem.setType(DataType.STRING); elem.setValue(value); experiment.addToExperimentInputs(elem ); outputDataObjectType.setName(outputNode.getName()); outputDataObjectType.setType(DataType.STRING); experiment.addToExperimentOutputs(outputDataObjectType); userConfigurationData.setOverrideManualScheduledParams(false); userConfigurationData.setComputationalResourceScheduling(computationalResourceScheduling); experiment.setUserConfigurationData(userConfigurationData); }else { throw new RuntimeException("Resource scheduling failed, target computer resource host name is not defined"); experiment.setExperimentID(airavataClient.createExperiment(experiment)); this.engine.getMonitor().subscribe(experiment.getExperimentID()); this.engine.getMonitor().fireStartMonitoring(workflow.getName()); } catch (MonitorException e) {
invokedNode.add(node); updateWorkflowNodeStatus(nodeInstanceList.get(node), WorkflowNodeState.EXECUTING); publishNodeStatusChange(WorkflowNodeState.EXECUTING, node.getID(), experiment.getExperimentID()); Component component = node.getComponent(); if (component instanceof SubWorkflowComponent) {
publishNodeStatusChange(WorkflowNodeState.EXECUTING, node.getID(), experiment.getExperimentID()); publishNodeStatusChange(WorkflowNodeState.COMPLETED, node.getID(), experiment.getExperimentID()); updateWorkflowNodeStatus(workflowNodeDetails, WorkflowNodeState.COMPLETED); notifyViaInteractor(WorkflowExecutionMessage.NODE_STATE_CHANGED, null);