blob: b31e7f92e91aa43a0d8f72669f6c7477a0259124 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package org.onap.vid.job.command
import org.apache.commons.lang3.StringUtils
import org.onap.portalsdk.core.service.DataAccessService
import org.onap.vid.job.Job
import org.onap.vid.job.Job.JobStatus.*
import org.onap.vid.job.impl.JobDaoImpl
import org.onap.vid.utils.DaoUtils
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.util.*
import java.util.stream.Collectors
import java.util.stream.Stream
@Service
class WatchChildrenJobsBL @Autowired
constructor(private val dataAccessService: DataAccessService) {
fun retrieveChildrenJobsStatus(childrenJobsIds: List<String>): Job.JobStatus {
val jobs = getAllChildrenJobs(childrenJobsIds)
val jobsStatuses = childrenJobsIds.stream()
.map<JobDaoImpl> { jobId -> jobs[UUID.fromString(jobId)] }
.map {when {
(it == null || it.status == null) -> Job.JobStatus.FAILED
else -> it.status
}}
return cumulateJobStatus(jobsStatuses)
}
fun cumulateJobStatus(childrenComulatedStatus: Job.JobStatus, fatherJobStatus: Job.JobStatus): Job.JobStatus {
return cumulateJobStatus(Stream.of(childrenComulatedStatus, fatherJobStatus))
}
private fun cumulateJobStatus(jobsStatuses: Stream<Job.JobStatus>): Job.JobStatus {
return jobsStatuses.reduce{ a, b ->
when {
!a.isFinal || !b.isFinal -> IN_PROGRESS
a == COMPLETED_WITH_ERRORS || b == COMPLETED_WITH_ERRORS-> COMPLETED_WITH_ERRORS
a == COMPLETED && b.isFailure -> COMPLETED_WITH_ERRORS
b == COMPLETED && a.isFailure -> COMPLETED_WITH_ERRORS
a == COMPLETED || b == COMPLETED -> COMPLETED
a.isFailure || b.isFailure -> FAILED
else -> COMPLETED_WITH_NO_ACTION
}
} .orElse(COMPLETED_WITH_NO_ACTION)
}
private fun getAllChildrenJobs(childrenJobsIds: List<String>): Map<UUID, JobDaoImpl> {
val jobs:MutableList<JobDaoImpl> = dataAccessService.getList(JobDaoImpl::class.java, filterByJobIds(childrenJobsIds), null, DaoUtils.getPropsMap()) as MutableList<JobDaoImpl>
return jobs.stream().collect(Collectors.toMap( { it.uuid }, { it }))
}
private fun filterByJobIds(childrenJobsIds: List<String>): String {
return " WHERE JOB_ID IN('" + StringUtils.join(childrenJobsIds, "', '") + "')"
}
}
|