machristie commented on code in PR #433:
URL: https://github.com/apache/airavata/pull/433#discussion_r1312007360
##########
modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java:
##########
@@ -113,4 +117,51 @@ public List<JobStatus> getDistinctListofJobStatus(String
gatewayId,String status
return
jobStatusRepository.selectWithNativeQuery(QueryConstants.FIND_JOB_COUNT_NATIVE_QUERY,
gatewayId,status,String.valueOf(time));
}
+
+ public List<CpuUsage> getCpuUsages(String gatewayId, long fromTime, long
toTime) {
+ JobStatusRepository jobStatusRepository = new JobStatusRepository();
+ List<CpuUsage> cpuUsages = new ArrayList<>();
+ List<JobStatus> startedJobStatusList =
jobStatusRepository.selectWithNativeQuery(
+ QueryConstants.FIND_JOB_STATUS_STARTED_BEFORE_TIME, gatewayId,
JobState.ACTIVE.name(),
+ String.valueOf(toTime));
+ ;
+ List<JobStatus> finishedJobStatusList =
jobStatusRepository.selectWithNativeQuery(
+ QueryConstants.FIND_JOB_STATUS_FINISHED_AFTER_TIME, gatewayId,
JobState.COMPLETE.name(),
+ JobState.FAILED.name(), JobState.CANCELED.name(),
String.valueOf(fromTime));
+ Mapper mapper = ObjectMapperSingleton.getInstance();
+ for (JobStatus startedJobStatus : startedJobStatusList) {
+ for (JobStatus finishedJobStatus : finishedJobStatusList) {
+ JobStatusEntity startedJobStatusEntity =
mapper.map(startedJobStatus, JobStatusEntity.class);
+ JobStatusEntity finishedJobStatusEntity =
mapper.map(finishedJobStatus, JobStatusEntity.class);
+ if (startedJobStatusEntity.getJobId() ==
finishedJobStatusEntity.getJobId()) {
Review Comment:
I'm pretty sure this won't work. Mapping a JobStatus back to an Entity won't
populate the extra fields (like `getJobId()`) that are stored on the database.
But see my comment above, if that approach works you won't need to do this.
##########
modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java:
##########
@@ -113,4 +117,51 @@ public List<JobStatus> getDistinctListofJobStatus(String
gatewayId,String status
return
jobStatusRepository.selectWithNativeQuery(QueryConstants.FIND_JOB_COUNT_NATIVE_QUERY,
gatewayId,status,String.valueOf(time));
}
+
+ public List<CpuUsage> getCpuUsages(String gatewayId, long fromTime, long
toTime) {
+ JobStatusRepository jobStatusRepository = new JobStatusRepository();
+ List<CpuUsage> cpuUsages = new ArrayList<>();
+ List<JobStatus> startedJobStatusList =
jobStatusRepository.selectWithNativeQuery(
+ QueryConstants.FIND_JOB_STATUS_STARTED_BEFORE_TIME, gatewayId,
JobState.ACTIVE.name(),
+ String.valueOf(toTime));
+ ;
+ List<JobStatus> finishedJobStatusList =
jobStatusRepository.selectWithNativeQuery(
+ QueryConstants.FIND_JOB_STATUS_FINISHED_AFTER_TIME, gatewayId,
JobState.COMPLETE.name(),
+ JobState.FAILED.name(), JobState.CANCELED.name(),
String.valueOf(fromTime));
+ Mapper mapper = ObjectMapperSingleton.getInstance();
+ for (JobStatus startedJobStatus : startedJobStatusList) {
+ for (JobStatus finishedJobStatus : finishedJobStatusList) {
+ JobStatusEntity startedJobStatusEntity =
mapper.map(startedJobStatus, JobStatusEntity.class);
+ JobStatusEntity finishedJobStatusEntity =
mapper.map(finishedJobStatus, JobStatusEntity.class);
+ if (startedJobStatusEntity.getJobId() ==
finishedJobStatusEntity.getJobId()) {
+ String jobId = startedJobStatusEntity.getJobId();
+ List<ExperimentModel> experiments = (new
ExperimentRepository())
+
.selectWithNativeQuery(QueryConstants.FIND_EXPERIMENT_WITH_JOB_ID, jobId);
+ if (!experiments.isEmpty()) {
+ ExperimentModel experiment = experiments.get(0);
+ List<Integer> res = (new
ExperimentRepository().selectWithNativeQuery(
Review Comment:
Do you need this query? You've already loaded the ExperimentModel so I think
you can just use
`experiment.getUserConfigurationData().getComputationalResourceScheduling().getTotalCPUCount()`.
##########
modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java:
##########
@@ -113,4 +117,51 @@ public List<JobStatus> getDistinctListofJobStatus(String
gatewayId,String status
return
jobStatusRepository.selectWithNativeQuery(QueryConstants.FIND_JOB_COUNT_NATIVE_QUERY,
gatewayId,status,String.valueOf(time));
}
+
+ public List<CpuUsage> getCpuUsages(String gatewayId, long fromTime, long
toTime) {
+ JobStatusRepository jobStatusRepository = new JobStatusRepository();
+ List<CpuUsage> cpuUsages = new ArrayList<>();
+ List<JobStatus> startedJobStatusList =
jobStatusRepository.selectWithNativeQuery(
+ QueryConstants.FIND_JOB_STATUS_STARTED_BEFORE_TIME, gatewayId,
JobState.ACTIVE.name(),
+ String.valueOf(toTime));
+ ;
+ List<JobStatus> finishedJobStatusList =
jobStatusRepository.selectWithNativeQuery(
+ QueryConstants.FIND_JOB_STATUS_FINISHED_AFTER_TIME, gatewayId,
JobState.COMPLETE.name(),
+ JobState.FAILED.name(), JobState.CANCELED.name(),
String.valueOf(fromTime));
+ Mapper mapper = ObjectMapperSingleton.getInstance();
+ for (JobStatus startedJobStatus : startedJobStatusList) {
Review Comment:
This double for loop isn't going to scale well for gateways with a large
number of jobs. It would be better to do this all in the query. I would suggest
something like this:
```sql
select j.* from JOB j
inner join PROCESS p on p.PROCESS_ID = j.PROCESS_ID
inner join EXPERIMENT e on e.EXPERIMENT_ID = p.EXPERIMENT_ID
where e.GATEWAY_ID = ?
and exists (select 1 from JOB_STATUS js where js.JOB_ID = j.JOB_ID and
js.STATE = ? and js.TIME_OF_STATE_CHANGE <= ?)
and exists (select 1 from JOB_STATUS js where js.JOB_ID = j.JOB_ID and
(js.STATE = ? or js.STATE = ? or js.STATE = ?) and js.TIME_OF_STATE_CHANGE >= ?)
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]