You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2024/07/17 20:59:12 UTC

(airavata) branch master updated: Emitting agent execution response

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 9ccf69a350 Emitting agent execution response
9ccf69a350 is described below

commit 9ccf69a350b446e8b5d265d06ebc06b0bca6f52a
Author: Dimuthu Wannipurage <di...@gatech.edu>
AuthorDate: Wed Jul 17 16:59:03 2024 -0400

    Emitting agent execution response
---
 modules/agent-framework/airavata-agent/agent.go    | 10 ++++++-
 .../service/controllers/AgentController.java       |  5 ++++
 .../connection/service/handlers/AgentHandler.java  | 17 +++++++++++-
 .../service/models/AgentCommandResponse.java       | 31 ++++++++++++++++++++++
 4 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/modules/agent-framework/airavata-agent/agent.go b/modules/agent-framework/airavata-agent/agent.go
index bdefd0bf79..071418bf37 100644
--- a/modules/agent-framework/airavata-agent/agent.go
+++ b/modules/agent-framework/airavata-agent/agent.go
@@ -67,7 +67,15 @@ func main() {
 					log.Fatalf(err.Error())
 					return
 				}
-				log.Printf("Execution output is %s", string(stdout))
+
+				stdoutString := string(stdout)
+				log.Printf("Execution output is %s", stdoutString)
+				
+				if err := stream.Send(&protos.AgentMessage{Message: 
+					&protos.AgentMessage_CommandExecutionResponse{
+						CommandExecutionResponse: &protos.CommandExecutionResponse{ExecutionId: executionId, ResponseString: stdoutString}}}); err != nil {
+					log.Printf("Failed to send execution result to server: %v", err)
+				} 
 
 			case *protos.ServerMessage_TunnelCreationRequest:
 				log.Printf("Received a tunnel creation request")
diff --git a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java
index 61ef791a60..afb458c5fb 100644
--- a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java
+++ b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/AgentController.java
@@ -44,4 +44,9 @@ public class AgentController {
         }
     }
 
+    @GetMapping("/execution/{executionId}")
+    public ResponseEntity<AgentCommandResponse> getExecutionResponse(@PathVariable("executionId") String executionId) {
+        return ResponseEntity.accepted().body(agentHandler.getAgentCommandResponse(executionId));
+    }
+
 }
diff --git a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentHandler.java b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentHandler.java
index 7c34dff2fa..95cc86e2a3 100644
--- a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentHandler.java
+++ b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentHandler.java
@@ -24,6 +24,8 @@ public class AgentHandler extends AgentCommunicationServiceGrpc.AgentCommunicati
     // <agentId, streamId>
     private final Map<String, String> AGENT_STREAM_MAPPING = new ConcurrentHashMap<>();
 
+    private final Map<String, CommandExecutionResponse> EXECUTION_RESPONSE_CACHE = new ConcurrentHashMap<>();
+
     public AgentInfoResponse isAgentUp(String agentId) {
 
         if (AGENT_STREAM_MAPPING.containsKey(agentId) &&
@@ -34,6 +36,18 @@ public class AgentHandler extends AgentCommunicationServiceGrpc.AgentCommunicati
         }
     }
 
+    public AgentCommandResponse getAgentCommandResponse(String executionId) {
+        AgentCommandResponse agentCommandResponse = new AgentCommandResponse();
+        if (EXECUTION_RESPONSE_CACHE.containsKey(executionId)) {
+            agentCommandResponse.setResponseString(EXECUTION_RESPONSE_CACHE.get(executionId).getResponseString());
+            agentCommandResponse.setExecutionId(executionId);
+            agentCommandResponse.setAvailable(true);
+        } else {
+            agentCommandResponse.setAvailable(false);
+        }
+        return agentCommandResponse;
+    }
+
     public AgentTunnelAck runTunnelOnAgent(AgentTunnelCreationRequest tunnelRequest) {
         AgentTunnelAck ack = new AgentTunnelAck();
 
@@ -101,7 +115,8 @@ public class AgentHandler extends AgentCommunicationServiceGrpc.AgentCommunicati
     }
 
     private void handleCommandExecutionResponse (CommandExecutionResponse commandExecutionResponse) {
-
+        logger.info("Received command execution response for execution id {}", commandExecutionResponse.getExecutionId());
+        EXECUTION_RESPONSE_CACHE.put(commandExecutionResponse.getExecutionId(), commandExecutionResponse);
     }
 
     private void handleContainerExecutionResponse (ContainerExecutionResponse containerExecutionResponse) {
diff --git a/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentCommandResponse.java b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentCommandResponse.java
new file mode 100644
index 0000000000..74cfb4734f
--- /dev/null
+++ b/modules/agent-framework/connection-service/src/main/java/org/apache/airavata/agent/connection/service/models/AgentCommandResponse.java
@@ -0,0 +1,31 @@
+package org.apache.airavata.agent.connection.service.models;
+
+public class AgentCommandResponse {
+    private String executionId;
+    private String responseString;
+    private boolean isAvailable;
+
+    public String getExecutionId() {
+        return executionId;
+    }
+
+    public void setExecutionId(String executionId) {
+        this.executionId = executionId;
+    }
+
+    public String getResponseString() {
+        return responseString;
+    }
+
+    public void setResponseString(String responseString) {
+        this.responseString = responseString;
+    }
+
+    public boolean isAvailable() {
+        return isAvailable;
+    }
+
+    public void setAvailable(boolean available) {
+        isAvailable = available;
+    }
+}