This is an automated email from the ASF dual-hosted git repository.
dimuthuupe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/master by this push:
new 667b4ef3c2 Adding agent management apis
667b4ef3c2 is described below
commit 667b4ef3c297150e29cbe914061616efd057ad04
Author: Dimuthu Wannipurage <[email protected]>
AuthorDate: Sun Jul 21 18:25:19 2024 -0400
Adding agent management apis
---
.../agent/connection/service/UserContext.java | 4 ++--
.../service/controllers/ExperimentController.java | 26 +++++++++------------
.../service/handlers/ExperimentHandler.java | 27 +++++++++++++++++-----
.../service/models/LaunchAgentResponse.java | 27 ++++++++++++++++++++++
.../service/models/TerminateAgentResponse.java | 27 ++++++++++++++++++++++
5 files changed, 88 insertions(+), 23 deletions(-)
diff --git
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/UserContext.java
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/UserContext.java
index 0d768ae306..17239a0c21 100644
---
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/UserContext.java
+++
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/UserContext.java
@@ -15,10 +15,10 @@ public class UserContext {
}
public static String username() {
- return AUTHZ_TOKEN.get().getClaimsMap().get("username");
+ return AUTHZ_TOKEN.get().getClaimsMap().get("userName");
}
public static String gatewayId() {
- return AUTHZ_TOKEN.get().getClaimsMap().get("gatewayId");
+ return AUTHZ_TOKEN.get().getClaimsMap().get("gatewayID");
}
}
diff --git
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java
index 8dc743ef0a..00ea9481db 100644
---
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java
+++
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java
@@ -2,15 +2,12 @@ package
org.apache.airavata.agent.connection.service.controllers;
import org.apache.airavata.agent.connection.service.handlers.ExperimentHandler;
import org.apache.airavata.agent.connection.service.models.LaunchAgentRequest;
+import org.apache.airavata.agent.connection.service.models.LaunchAgentResponse;
+import
org.apache.airavata.agent.connection.service.models.TerminateAgentResponse;
import org.apache.airavata.model.experiment.ExperimentModel;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import javax.validation.Valid;
@@ -32,14 +29,13 @@ public class ExperimentController {
}
@PostMapping(value = "/launch", consumes =
MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity<?> createAndLaunchExperiment(@Valid @RequestBody
LaunchAgentRequest request) {
- String experimentId =
experimentHandler.createAndLaunchExperiment(request);
- URI location = ServletUriComponentsBuilder.fromCurrentRequest()
- .replacePath("/api/v1/exp/{id}")
- .buildAndExpand(experimentId)
- .encode()
- .toUri();
-
- return ResponseEntity.created(location).build();
+ public ResponseEntity<LaunchAgentResponse>
createAndLaunchExperiment(@Valid @RequestBody LaunchAgentRequest request) {
+ LaunchAgentResponse agentResponse =
experimentHandler.createAndLaunchExperiment(request);
+ return ResponseEntity.ok(agentResponse);
+ }
+
+ @GetMapping(value = "/terminate/{expId}", produces =
MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity<TerminateAgentResponse>
terminateExperiment(@PathVariable("expId") String expId) {
+ return ResponseEntity.ok(experimentHandler.terminateExperiment(expId));
}
}
diff --git
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/ExperimentHandler.java
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/ExperimentHandler.java
index 78dc63e68a..0f074eaa27 100644
---
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/ExperimentHandler.java
+++
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/ExperimentHandler.java
@@ -3,6 +3,8 @@ package org.apache.airavata.agent.connection.service.handlers;
import org.apache.airavata.agent.connection.service.UserContext;
import
org.apache.airavata.agent.connection.service.config.ClusterApplicationConfig;
import org.apache.airavata.agent.connection.service.models.LaunchAgentRequest;
+import org.apache.airavata.agent.connection.service.models.LaunchAgentResponse;
+import
org.apache.airavata.agent.connection.service.models.TerminateAgentResponse;
import org.apache.airavata.agent.connection.service.services.AiravataService;
import org.apache.airavata.api.Airavata;
import
org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference;
@@ -40,6 +42,18 @@ public class ExperimentHandler {
this.clusterApplicationConfig = clusterApplicationConfig;
}
+ public TerminateAgentResponse terminateExperiment(String experimentId) {
+ try {
+ Airavata.Client airavata = airavataService.airavata();
+ ExperimentModel experiment =
airavata.getExperiment(UserContext.authzToken(), experimentId);
+ airavata.terminateExperiment(UserContext.authzToken(),
experiment.getExperimentId(), experiment.getGatewayId());
+ return new TerminateAgentResponse(experimentId, true);
+ } catch (Exception e) {
+ LOGGER.error("Error terminating experiment {}", experimentId, e);
+ throw new RuntimeException("Error terminating experiment with the
id: " + experimentId, e);
+ }
+ }
+
public ExperimentModel getExperiment(String experimentId) {
try {
Airavata.Client airavata = airavataService.airavata();
@@ -61,15 +75,16 @@ public class ExperimentHandler {
}
}
- public String createAndLaunchExperiment(LaunchAgentRequest req) {
+ public LaunchAgentResponse createAndLaunchExperiment(LaunchAgentRequest
req) {
try {
- LOGGER.info("Creating an Airavata Experiment for {}",
req.getExperimentName());
- ExperimentModel experiment = generateExperiment(req);
+ String agentId = "agent_" + UUID.randomUUID().toString();
+ LOGGER.info("Creating an Airavata Experiment for {} with agent id
{}", req.getExperimentName(), agentId);
+ ExperimentModel experiment = generateExperiment(req, agentId);
String experimentId =
airavataService.airavata().createExperiment(UserContext.authzToken(),
experiment.getGatewayId(), experiment);
LOGGER.info("Launching the application, Id: {}, Name: {}",
experimentId, experiment.getExperimentName());
airavataService.airavata().launchExperiment(UserContext.authzToken(),
experimentId, experiment.getGatewayId());
- return experimentId;
+ return new LaunchAgentResponse(agentId, experimentId);
} catch (TException e) {
LOGGER.error("Error while creating the experiment with the name:
{}", req.getExperimentName());
throw new RuntimeException("Error while creating the experiment
with the name: " + req.getExperimentName(), e);
@@ -86,7 +101,7 @@ public class ExperimentHandler {
}
}
- private ExperimentModel generateExperiment(LaunchAgentRequest req) throws
TException {
+ private ExperimentModel generateExperiment(LaunchAgentRequest req, String
agentId) throws TException {
Airavata.Client airavataClient = airavataService.airavata();
String experimentName = req.getExperimentName();
@@ -125,7 +140,7 @@ public class ExperimentHandler {
List<InputDataObjectType> experimentInputs = applicationInputs.stream()
.peek(input -> {
if ("agent_id".equals(input.getName())) {
- input.setValue("agent_" + UUID.randomUUID());
+ input.setValue(agentId);
} else if ("server_url".equals(input.getName())) {
input.setValue(airavataService.getServerUrl());
diff --git
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentResponse.java
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentResponse.java
new file mode 100644
index 0000000000..fd833fe684
--- /dev/null
+++
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentResponse.java
@@ -0,0 +1,27 @@
+package org.apache.airavata.agent.connection.service.models;
+
+public class LaunchAgentResponse {
+ private String agentId;
+ private String experimentId;
+
+ public LaunchAgentResponse(String agentId, String experimentId) {
+ this.agentId = agentId;
+ this.experimentId = experimentId;
+ }
+
+ public String getAgentId() {
+ return agentId;
+ }
+
+ public void setAgentId(String agentId) {
+ this.agentId = agentId;
+ }
+
+ public String getExperimentId() {
+ return experimentId;
+ }
+
+ public void setExperimentId(String experimentId) {
+ this.experimentId = experimentId;
+ }
+}
diff --git
a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/TerminateAgentResponse.java
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/TerminateAgentResponse.java
new file mode 100644
index 0000000000..e41644fe7e
--- /dev/null
+++
b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/TerminateAgentResponse.java
@@ -0,0 +1,27 @@
+package org.apache.airavata.agent.connection.service.models;
+
+public class TerminateAgentResponse {
+ private String experimentId;
+ private boolean terminated;
+
+ public TerminateAgentResponse(String experimentId, boolean terminated) {
+ this.experimentId = experimentId;
+ this.terminated = terminated;
+ }
+
+ public String getExperimentId() {
+ return experimentId;
+ }
+
+ public void setExperimentId(String experimentId) {
+ this.experimentId = experimentId;
+ }
+
+ public boolean isTerminated() {
+ return terminated;
+ }
+
+ public void setTerminated(boolean terminated) {
+ this.terminated = terminated;
+ }
+}