This is an automated email from the ASF dual-hosted git repository.

lahirujayathilake pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/cybershuttle-staging by this 
push:
     new 27eb9e84f0 Use StoragePath from Properties in AgentManagementHandler
27eb9e84f0 is described below

commit 27eb9e84f04c881df460b91745918f6b162a6df1
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Mon Mar 31 23:49:20 2025 -0400

    Use StoragePath from Properties in AgentManagementHandler
    
    * hardcode path in agentmanagementhandler.java
    
    * fix bug in agentmanagementhandler paths
---
 .../service/handlers/AgentManagementHandler.java   | 28 +++++++------
 .../service/models/LaunchAgentRequest.java         |  9 +++++
 .../service/services/AiravataService.java          | 46 +++++++++++-----------
 .../src/main/resources/application.yml             |  1 +
 modules/agent-framework/airavata-agent/.gitignore  |  1 +
 .../deployments/jupyterhub/data/allen-v1           |  1 +
 .../deployments/jupyterhub/data/functional-network |  1 +
 .../deployments/jupyterhub/data/md_demo/.gitignore |  2 +
 8 files changed, 54 insertions(+), 35 deletions(-)

diff --git 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
index a4b3613da5..f4e6bbb3b1 100644
--- 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
+++ 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java
@@ -15,6 +15,7 @@ import org.apache.airavata.model.experiment.ExperimentType;
 import org.apache.airavata.model.experiment.UserConfigurationDataModel;
 import org.apache.airavata.model.process.ProcessModel;
 import 
org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel;
+import org.apache.airavata.model.security.AuthzToken;
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,6 +23,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
+import java.nio.file.Paths;
 import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
@@ -36,6 +38,9 @@ public class AgentManagementHandler {
     @Value("${airavata.storageResourceId}")
     private String storageResourceId;
 
+    @Value("${airavata.storagePath}")
+    private String storagePath;
+
     public AgentManagementHandler(AiravataService airavataService, 
ClusterApplicationConfig clusterApplicationConfig) {
         this.airavataService = airavataService;
         this.clusterApplicationConfig = clusterApplicationConfig;
@@ -120,14 +125,18 @@ public class AgentManagementHandler {
         Airavata.Client airavataClient = airavataService.airavata();
 
         String experimentName = req.getExperimentName();
-        String projectId = 
airavataService.extractDefaultProjectId(airavataClient); // TODO should be 
configurable
+        String projectName = req.getProjectName() != null ? 
req.getProjectName() : "Default Project";
+        String projectDir = projectName.replace(" ", "_");
+        String projectId = airavataService.getProjectId(airavataClient, 
projectName);
+        AuthzToken authzToken = UserContext.authzToken();
+        String userName = UserContext.username();
+        String gatewayId = UserContext.gatewayId();
         String appInterfaceId = 
clusterApplicationConfig.getApplicationInterfaceIdByCluster(req.getApplicationInterfaceName());
-
         ExperimentModel experimentModel = new ExperimentModel();
         experimentModel.setExperimentName(experimentName);
         experimentModel.setProjectId(projectId);
-        experimentModel.setUserName(UserContext.username());
-        experimentModel.setGatewayId(UserContext.gatewayId());
+        experimentModel.setUserName(userName);
+        experimentModel.setGatewayId(gatewayId);
         experimentModel.setExecutionId(appInterfaceId);
 
         ComputationalResourceSchedulingModel 
computationalResourceSchedulingModel = new 
ComputationalResourceSchedulingModel();
@@ -147,16 +156,13 @@ public class AgentManagementHandler {
         userConfigurationDataModel.setAiravataAutoSchedule(false);
         userConfigurationDataModel.setOverrideManualScheduledParams(false);
         userConfigurationDataModel.setStorageId(storageResourceId);
-        userConfigurationDataModel.setExperimentDataDir(UserContext.username()
-                .concat(File.separator)
-                .concat(projectId)
-                .concat(File.separator)
-                .concat(experimentName));
+        String experimentDataDir = Paths.get(storagePath, gatewayId, userName, 
projectDir, experimentName).toString();
+        userConfigurationDataModel.setExperimentDataDir(experimentDataDir);
         
userConfigurationDataModel.setGroupResourceProfileId(groupCompResourcePref.getGroupResourceProfileId());
 
         experimentModel.setUserConfigurationData(userConfigurationDataModel);
 
-        List<InputDataObjectType> applicationInputs = 
airavataClient.getApplicationInputs(UserContext.authzToken(), appInterfaceId);
+        List<InputDataObjectType> applicationInputs = 
airavataClient.getApplicationInputs(authzToken, appInterfaceId);
         List<InputDataObjectType> experimentInputs = applicationInputs.stream()
                 .peek(input -> {
                     if ("agent_id".equals(input.getName())) {
@@ -169,7 +175,7 @@ public class AgentManagementHandler {
                 .collect(Collectors.toList());
 
         experimentModel.setExperimentInputs(experimentInputs);
-        
experimentModel.setExperimentOutputs(airavataClient.getApplicationOutputs(UserContext.authzToken(),
 appInterfaceId));
+        
experimentModel.setExperimentOutputs(airavataClient.getApplicationOutputs(authzToken,
 appInterfaceId));
         experimentModel.setExperimentType(ExperimentType.SINGLE_APPLICATION);
         LOGGER.info("Generated the experiment: {}", 
experimentModel.getExperimentId());
 
diff --git 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
index edbb00c9f2..cb12e7fd17 100644
--- 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
+++ 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/models/LaunchAgentRequest.java
@@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringUtils;
 public class LaunchAgentRequest {
 
     private String experimentName;
+    private String projectName;
     private String remoteCluster;
     private String group;
 
@@ -81,4 +82,12 @@ public class LaunchAgentRequest {
     public String getApplicationInterfaceName() {
         return remoteCluster + (StringUtils.isNotBlank(group) ? ("_" + group) 
: "");
     }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
 }
diff --git 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
index c9db4da7ae..85adb15b89 100644
--- 
a/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
+++ 
b/modules/agent-framework/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java
@@ -48,29 +48,27 @@ public class AiravataService {
         }
     }
 
-    public String extractDefaultProjectId(Airavata.Client airavataClient) 
throws TException {
-        int limit = 10;
-        int offset = 0;
-
-        while (true) {
-            List<Project> userProjects = 
airavataClient.getUserProjects(UserContext.authzToken(), 
UserContext.gatewayId(), UserContext.username(), limit, offset);
-
-            // Check for the "Default Project"
-            Optional<Project> defaultProject = userProjects.stream()
-                    .filter(project -> "Default 
Project".equals(project.getName()))
-                    .findFirst();
-
-            if (defaultProject.isPresent()) {
-                return defaultProject.get().getProjectID();
-            }
-            if (userProjects.size() < limit) {
-                break;
-            }
-            offset += limit;
-        }
-
-        throw new RuntimeException("Could not find a Default project for the 
user: " + UserContext.username());
-    }
+    public String getProjectId(Airavata.Client airavataClient, String 
projectName) throws TException {
+      int limit = 10;
+      int offset = 0;
+
+      while (true) {
+          List<Project> userProjects = 
airavataClient.getUserProjects(UserContext.authzToken(), 
UserContext.gatewayId(), UserContext.username(), limit, offset);
+          Optional<Project> defaultProject = userProjects.stream()
+                  .filter(project -> projectName.equals(project.getName()))
+                  .findFirst();
+
+          if (defaultProject.isPresent()) {
+              return defaultProject.get().getProjectID(); 
+          }
+          if (userProjects.size() < limit) {
+              break;
+          }
+          offset += limit;
+      }
+
+      throw new RuntimeException("Could not find project: " + projectName + " 
for the user: " + UserContext.username());
+  }
 
     public GroupComputeResourcePreference 
extractGroupComputeResourcePreference(Airavata.Client airavataClient, String 
group, String remoteCluster) throws TException {
         List<GroupResourceProfile> groupResourceList = 
airavataClient.getGroupResourceList(UserContext.authzToken(), 
UserContext.gatewayId());
@@ -87,7 +85,7 @@ public class AiravataService {
 
     public List<String> getUserExperimentIDs(Airavata.Client airavataClient) 
throws TException {
         int limit = 100;
-        Map<ExperimentSearchFields, String> filters = 
Map.of(ExperimentSearchFields.PROJECT_ID, 
extractDefaultProjectId(airavataClient));
+        Map<ExperimentSearchFields, String> filters = 
Map.of(ExperimentSearchFields.PROJECT_ID, getProjectId(airavataClient, "Default 
Project"));
 
         return Stream.iterate(0, offset -> offset + limit)
                 .map(offset -> {
diff --git 
a/modules/agent-framework/agent-service/src/main/resources/application.yml 
b/modules/agent-framework/agent-service/src/main/resources/application.yml
index 6f810f668b..cca313f82f 100644
--- a/modules/agent-framework/agent-service/src/main/resources/application.yml
+++ b/modules/agent-framework/agent-service/src/main/resources/application.yml
@@ -31,6 +31,7 @@ airavata:
     truststore:
       path: CHANGE_ME
   storageResourceId: gf4.ucs.indiana.edu_61552681-96f0-462a-a36c-a62a010bffc6
+  storagePath: /var/www/portals/gateway-user-data
   cluster:
     applicationInterfaceId:
       expanse: AiravataAgent_f4313e4d-20c2-4bf6-bff1-8aa0f0b0c1d6
diff --git a/modules/agent-framework/airavata-agent/.gitignore 
b/modules/agent-framework/airavata-agent/.gitignore
index d9d9766141..72c213c17e 100644
--- a/modules/agent-framework/airavata-agent/.gitignore
+++ b/modules/agent-framework/airavata-agent/.gitignore
@@ -3,3 +3,4 @@
 go.sum
 *.egg-info
 *.ipynb_checkpoints
+*.sif
\ No newline at end of file
diff --git a/modules/agent-framework/deployments/jupyterhub/data/allen-v1 
b/modules/agent-framework/deployments/jupyterhub/data/allen-v1
new file mode 160000
index 0000000000..d8cdffa3c2
--- /dev/null
+++ b/modules/agent-framework/deployments/jupyterhub/data/allen-v1
@@ -0,0 +1 @@
+Subproject commit d8cdffa3c2df9f419aedf6f44947cdf321f11e3a
diff --git 
a/modules/agent-framework/deployments/jupyterhub/data/functional-network 
b/modules/agent-framework/deployments/jupyterhub/data/functional-network
new file mode 160000
index 0000000000..569bef67c2
--- /dev/null
+++ b/modules/agent-framework/deployments/jupyterhub/data/functional-network
@@ -0,0 +1 @@
+Subproject commit 569bef67c2381f366f34b32a348deb146911c58e
diff --git 
a/modules/agent-framework/deployments/jupyterhub/data/md_demo/.gitignore 
b/modules/agent-framework/deployments/jupyterhub/data/md_demo/.gitignore
new file mode 100644
index 0000000000..7006ced0e5
--- /dev/null
+++ b/modules/agent-framework/deployments/jupyterhub/data/md_demo/.gitignore
@@ -0,0 +1,2 @@
+auth.state
+plan*.json
\ No newline at end of file

Reply via email to