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;
+    }
+}

Reply via email to