This is an automated email from the ASF dual-hosted git repository.
yasithdev 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 abb331a933 refactor: collapse duplicated method families in
research-service (#640)
abb331a933 is described below
commit abb331a9335fa0a4c1abbe3a397638d73433c265
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Sun Jun 7 20:32:32 2026 -0400
refactor: collapse duplicated method families in research-service (#640)
ExperimentSummaryRepository.getAccessibleExperimentStatistics repeated six
near-identical count-and-list-per-state blocks; they now drive a small table of
(state list, count setter, list setter) records through one loop, with the
'all' row carrying a null state list (via Arrays.asList) that the underlying
query already treats as 'no filter'. ResearchHubService.stopSession and
deleteSession, which differed only by a {remove:true} body, now delegate to a
single deleteHubSession(sessionI [...]
---
.../repository/ExperimentSummaryRepository.java | 211 +++++++--------------
.../research/service/ResearchHubService.java | 35 ++--
2 files changed, 79 insertions(+), 167 deletions(-)
diff --git
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
index 528d4b7f31..5db59fa8cb 100644
---
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
+++
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/repository/ExperimentSummaryRepository.java
@@ -26,6 +26,8 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.IntConsumer;
import java.util.stream.Collectors;
import org.apache.airavata.db.AbstractRepository;
import org.apache.airavata.db.DBConstants;
@@ -300,153 +302,68 @@ public class ExperimentSummaryRepository
}
}
- int allExperimentsCount = getExperimentStatisticsCountForState(
- null,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds);
- List<ExperimentSummaryModel> allExperiments =
getExperimentStatisticsForState(
- null,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds,
- limit,
- offset);
-
experimentStatisticsBuilder.setAllExperimentCount(allExperimentsCount);
- experimentStatisticsBuilder.addAllAllExperiments(allExperiments);
-
- List<ExperimentState> createdStates =
- Arrays.asList(ExperimentState.EXPERIMENT_STATE_CREATED,
ExperimentState.EXPERIMENT_STATE_VALIDATED);
- int createdExperimentsCount = getExperimentStatisticsCountForState(
- createdStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds);
- List<ExperimentSummaryModel> createdExperiments =
getExperimentStatisticsForState(
- createdStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds,
- limit,
- offset);
-
experimentStatisticsBuilder.setCreatedExperimentCount(createdExperimentsCount);
-
experimentStatisticsBuilder.addAllCreatedExperiments(createdExperiments);
-
- List<ExperimentState> runningStates = Arrays.asList(
- ExperimentState.EXPERIMENT_STATE_EXECUTING,
- ExperimentState.EXPERIMENT_STATE_SCHEDULED,
- ExperimentState.EXPERIMENT_STATE_LAUNCHED);
- int runningExperimentsCount = getExperimentStatisticsCountForState(
- runningStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds);
- List<ExperimentSummaryModel> runningExperiments =
getExperimentStatisticsForState(
- runningStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds,
- limit,
- offset);
-
experimentStatisticsBuilder.setRunningExperimentCount(runningExperimentsCount);
-
experimentStatisticsBuilder.addAllRunningExperiments(runningExperiments);
-
- List<ExperimentState> completedStates =
Arrays.asList(ExperimentState.EXPERIMENT_STATE_COMPLETED);
- int completedExperimentsCount =
getExperimentStatisticsCountForState(
- completedStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds);
- List<ExperimentSummaryModel> completedExperiments =
getExperimentStatisticsForState(
- completedStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds,
- limit,
- offset);
-
experimentStatisticsBuilder.setCompletedExperimentCount(completedExperimentsCount);
-
experimentStatisticsBuilder.addAllCompletedExperiments(completedExperiments);
-
- List<ExperimentState> failedStates =
Arrays.asList(ExperimentState.EXPERIMENT_STATE_FAILED);
- int failedExperimentsCount = getExperimentStatisticsCountForState(
- failedStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds);
- List<ExperimentSummaryModel> failedExperiments =
getExperimentStatisticsForState(
- failedStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds,
- limit,
- offset);
-
experimentStatisticsBuilder.setFailedExperimentCount(failedExperimentsCount);
-
experimentStatisticsBuilder.addAllFailedExperiments(failedExperiments);
-
- List<ExperimentState> cancelledStates = Arrays.asList(
- ExperimentState.EXPERIMENT_STATE_CANCELED,
ExperimentState.EXPERIMENT_STATE_CANCELING);
- int cancelledExperimentsCount =
getExperimentStatisticsCountForState(
- cancelledStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds);
- List<ExperimentSummaryModel> cancelledExperiments =
getExperimentStatisticsForState(
- cancelledStates,
- gatewayId,
- fromDate,
- toDate,
- userName,
- applicationName,
- resourceHostName,
- accessibleExperimentIds,
- limit,
- offset);
-
experimentStatisticsBuilder.setCancelledExperimentCount(cancelledExperimentsCount);
-
experimentStatisticsBuilder.addAllCancelledExperiments(cancelledExperiments);
+ record StatGroup(
+ List<ExperimentState> states,
+ IntConsumer countSetter,
+ Consumer<List<ExperimentSummaryModel>> listSetter) {}
+
+ List<StatGroup> statGroups = Arrays.asList(
+ new StatGroup(
+ null,
+ experimentStatisticsBuilder::setAllExperimentCount,
+ experimentStatisticsBuilder::addAllAllExperiments),
+ new StatGroup(
+ Arrays.asList(
+ ExperimentState.EXPERIMENT_STATE_CREATED,
+
ExperimentState.EXPERIMENT_STATE_VALIDATED),
+
experimentStatisticsBuilder::setCreatedExperimentCount,
+
experimentStatisticsBuilder::addAllCreatedExperiments),
+ new StatGroup(
+ Arrays.asList(
+ ExperimentState.EXPERIMENT_STATE_EXECUTING,
+ ExperimentState.EXPERIMENT_STATE_SCHEDULED,
+ ExperimentState.EXPERIMENT_STATE_LAUNCHED),
+
experimentStatisticsBuilder::setRunningExperimentCount,
+
experimentStatisticsBuilder::addAllRunningExperiments),
+ new StatGroup(
+
Arrays.asList(ExperimentState.EXPERIMENT_STATE_COMPLETED),
+
experimentStatisticsBuilder::setCompletedExperimentCount,
+
experimentStatisticsBuilder::addAllCompletedExperiments),
+ new StatGroup(
+
Arrays.asList(ExperimentState.EXPERIMENT_STATE_FAILED),
+
experimentStatisticsBuilder::setFailedExperimentCount,
+
experimentStatisticsBuilder::addAllFailedExperiments),
+ new StatGroup(
+ Arrays.asList(
+ ExperimentState.EXPERIMENT_STATE_CANCELED,
+
ExperimentState.EXPERIMENT_STATE_CANCELING),
+
experimentStatisticsBuilder::setCancelledExperimentCount,
+
experimentStatisticsBuilder::addAllCancelledExperiments));
+
+ for (StatGroup group : statGroups) {
+ int count = getExperimentStatisticsCountForState(
+ group.states(),
+ gatewayId,
+ fromDate,
+ toDate,
+ userName,
+ applicationName,
+ resourceHostName,
+ accessibleExperimentIds);
+ List<ExperimentSummaryModel> experiments =
getExperimentStatisticsForState(
+ group.states(),
+ gatewayId,
+ fromDate,
+ toDate,
+ userName,
+ applicationName,
+ resourceHostName,
+ accessibleExperimentIds,
+ limit,
+ offset);
+ group.countSetter().accept(count);
+ group.listSetter().accept(experiments);
+ }
return experimentStatisticsBuilder.build();
} catch (RegistryException e) {
diff --git
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
index b444eee3a2..ef2adc905e 100644
---
a/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
+++
b/airavata-api/research-service/src/main/java/org/apache/airavata/research/service/ResearchHubService.java
@@ -54,6 +54,7 @@ public class ResearchHubService {
private final SessionService sessionService;
private final ResearchProjectRepository projectRepository;
private final ResearchProperties researchProperties;
+ private final RestTemplate restTemplate = new RestTemplate();
public ResearchHubService(
ResearchProjectService researchProjectService,
@@ -67,36 +68,30 @@ public class ResearchHubService {
}
public boolean stopSession(String sessionId) {
- String userId = UserContext.userId();
- String url = String.format(SERVERS_API_URL,
researchProperties.getHubUrl(), userId, sessionId);
-
- HttpHeaders headers = new HttpHeaders();
- headers.set("Authorization", "token " +
researchProperties.getAdminApiKey());
- HttpEntity<Void> request = new HttpEntity<>(headers);
-
- ResponseEntity<Void> response = new RestTemplate().exchange(url,
HttpMethod.DELETE, request, Void.class);
-
- if (response.getStatusCode().is2xxSuccessful()) {
- LOGGER.info("Successfully stopped/deleted RHub session {} for user
{}", sessionId, userId);
- return true;
- } else {
- throw new RuntimeException("Failed to delete RHub session " +
sessionId + " for user " + userId);
- }
+ return deleteHubSession(sessionId, false);
}
public boolean deleteSession(String sessionId) {
+ return deleteHubSession(sessionId, true);
+ }
+
+ private boolean deleteHubSession(String sessionId, boolean remove) {
String userId = UserContext.userId();
String url = String.format(SERVERS_API_URL,
researchProperties.getHubUrl(), userId, sessionId);
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "token " +
researchProperties.getAdminApiKey());
- Map<String, Object> body = new HashMap<>();
- body.put("remove", true);
-
- HttpEntity<Map<String, Object>> request = new HttpEntity<>(body,
headers);
+ HttpEntity<?> request;
+ if (remove) {
+ Map<String, Object> body = new HashMap<>();
+ body.put("remove", true);
+ request = new HttpEntity<>(body, headers);
+ } else {
+ request = new HttpEntity<>(headers);
+ }
- ResponseEntity<Void> response = new RestTemplate().exchange(url,
HttpMethod.DELETE, request, Void.class);
+ ResponseEntity<Void> response = restTemplate.exchange(url,
HttpMethod.DELETE, request, Void.class);
if (response.getStatusCode().is2xxSuccessful()) {
LOGGER.info("Successfully stopped/deleted RHub session {} for user
{}", sessionId, userId);