Project

General

Profile

1 54525 panagiotis
package eu.dnetlib.repo.manager.service;
2 49236 panagiotis
3
import eu.dnetlib.api.functionality.ValidatorService;
4
import eu.dnetlib.api.functionality.ValidatorServiceException;
5
import eu.dnetlib.domain.functionality.validator.StoredJob;
6 57741 ioannis.di
import eu.dnetlib.repo.manager.domain.Constants;
7
import eu.dnetlib.repo.manager.domain.JobsOfUser;
8 58301 spyroukon
import eu.dnetlib.repo.manager.utils.CrisValidatorUtils;
9 49236 panagiotis
import gr.uoa.di.driver.util.ServiceLocator;
10 49410 panagiotis
import org.apache.log4j.Logger;
11 57648 antonis.le
import org.eurocris.openaire.cris.validator.model.Job;
12
import org.eurocris.openaire.cris.validator.service.MapJobDao;
13 49362 panagiotis
import org.json.JSONException;
14 57648 antonis.le
import org.springframework.beans.factory.annotation.Autowired;
15 54525 panagiotis
import org.springframework.stereotype.Service;
16 50631 panagiotis
17 49410 panagiotis
import javax.annotation.Resource;
18 57648 antonis.le
import java.util.ArrayList;
19
import java.util.List;
20
import java.util.stream.Collectors;
21 49236 panagiotis
22 54525 panagiotis
@Service("monitorService")
23 54690 panagiotis
public class MonitorServiceImpl implements MonitorService {
24 49236 panagiotis
25 57648 antonis.le
    @Autowired
26
    private MapJobDao crisJobs;
27
28 49410 panagiotis
    @Resource(name = "validatorServiceLocator")
29 49236 panagiotis
    private ServiceLocator<ValidatorService> validatorServiceLocator;
30
31
    private ValidatorService getValidationService() {
32
        return this.validatorServiceLocator.getService();
33
    }
34
35
    public ServiceLocator<ValidatorService> getValidatorServiceLocator() {
36
        return validatorServiceLocator;
37
    }
38
39
    public void setValidatorServiceLocator(ServiceLocator<ValidatorService> validatorServiceLocator) {
40
        this.validatorServiceLocator = validatorServiceLocator;
41
    }
42
43 49410 panagiotis
44
    private static final Logger LOGGER = Logger
45 54690 panagiotis
            .getLogger(MonitorServiceImpl.class);
46 49410 panagiotis
47 49236 panagiotis
    @Override
48 54525 panagiotis
    public JobsOfUser getJobsOfUser(String user,
49
                                    String jobType,
50
                                    String offset,
51
                                    String limit,
52
                                    String dateFrom,
53
                                    String dateTo,
54
                                    String validationStatus,
55
                                    String includeJobsTotal) throws JSONException, ValidatorServiceException {
56 49236 panagiotis
57 49813 panagiotis
        LOGGER.debug("Getting jobs of user : " + user);
58 50570 panagiotis
        LOGGER.debug(user + "/" + jobType + "/" + offset + "/" + dateFrom + "/" + dateTo + "/" + validationStatus + "/" + includeJobsTotal);
59 58301 spyroukon
60
        /////////////////////////////////////////////////////////////////////////////////////////
61
        // FIXME: this is a hack for CRIS Jan Dvorak Validator, should be implemented properly //
62
        /////////////////////////////////////////////////////////////////////////////////////////
63
        int crisOffset = 0;
64
        int limitWithCris = 0;
65
        if (offset.equals("0")) {
66
            limitWithCris = crisJobs.getJobs(user, validationStatus).size();
67
        } else {
68
            crisOffset = crisJobs.getJobs(user, validationStatus).size();
69
        }
70
71
        offset = String.valueOf(Math.max(Integer.parseInt(offset) - crisOffset, 0));
72
        limit = String.valueOf(Math.max(Integer.parseInt(limit) - limitWithCris, 0));
73
        /////////////////////////////////////////////////////////////////////////////////////////
74
        /////////////////////////////////////////////////////////////////////////////////////////
75
76 49431 panagiotis
        JobsOfUser retJobs = new JobsOfUser();
77
        retJobs.setJobs(getValidationService().getStoredJobsNew(user, jobType, Integer.parseInt(offset),
78
                Integer.parseInt(limit), dateFrom, dateTo, validationStatus));
79 57648 antonis.le
80 49431 panagiotis
        if (Boolean.parseBoolean(includeJobsTotal)) {
81
            retJobs.setTotalJobs(this.getJobsTotalNumberOfUser(user, jobType, null));
82
            retJobs.setTotalJobsSuccessful(this.getJobsTotalNumberOfUser(user, jobType, Constants.VALIDATION_JOB_STATUS_SUCCESSFUL));
83
            retJobs.setTotalJobsFailed(this.getJobsTotalNumberOfUser(user, jobType, Constants.VALIDATION_JOB_STATUS_FAILED));
84 58301 spyroukon
            retJobs.setTotalJobsOngoing(this.getJobsTotalNumberOfUser(user, jobType, Constants.VALIDATION_JOB_STATUS_ONGOING));
85 49236 panagiotis
        }
86 51330 panagiotis
87
        //TODO fix status with new validator version
88 58301 spyroukon
        if (retJobs.getJobs() != null) {
89
            for (StoredJob job : retJobs.getJobs()) {
90 51525 panagiotis
                if (job.getContentJobStatus().equals("ongoing") || job.getUsageJobStatus().equals("ongoing")) {
91
                    job.setValidationStatus("ongoing");
92
                } else if ((job.getValidationType().equals("CU") && job.getContentJobStatus().equals("finished") && job.getUsageJobStatus().equals("finished") && job.getContentJobScore() > 50 && job.getUsageJobScore() > 50)
93
                        || (job.getValidationType().equals("C") && job.getContentJobStatus().equals("finished") && job.getUsageJobStatus().equals("none") && job.getContentJobScore() > 50)
94
                        || (job.getValidationType().equals("U") && job.getContentJobStatus().equals("none") && job.getUsageJobStatus().equals("finished") && job.getUsageJobScore() > 50)) {
95
                    job.setValidationStatus("successful");
96
                } else if ((job.getValidationType().equals("CU") && job.getContentJobStatus().equals("finished") && job.getUsageJobStatus().equals("finished") && (job.getContentJobScore() <= 50 || job.getUsageJobScore() <= 50))
97
                        || (job.getValidationType().equals("C") && job.getContentJobStatus().equals("finished") && job.getUsageJobStatus().equals("none") && job.getContentJobScore() <= 50)
98 58301 spyroukon
                        || (job.getValidationType().equals("U") && job.getContentJobStatus().equals("none") && job.getUsageJobStatus().equals("finished") && job.getUsageJobScore() <= 50)) {
99 51525 panagiotis
                    job.setValidationStatus("failed");
100
                }
101
102 51330 panagiotis
            }
103
        }
104 58301 spyroukon
105
106 57648 antonis.le
        /////////////////////////////////////////////////////////////////////////////////////////
107
        // FIXME: this is a hack for CRIS Jan Dvorak Validator, should be implemented properly //
108
        /////////////////////////////////////////////////////////////////////////////////////////
109 58301 spyroukon
        if (crisOffset == 0) {
110
            List<StoredJob> jobs = new ArrayList<>();
111 51330 panagiotis
112 58301 spyroukon
            List<Job> cj = crisJobs.getJobs(user, validationStatus);
113
            for (Job job : cj) {
114
                StoredJob sj = CrisValidatorUtils.convertJobToStoredJob(job);
115
                jobs.add(sj);
116 51525 panagiotis
117 58301 spyroukon
//                // filter out entries based on 'validationStatus'
118
//                if ("all".equals(validationStatus)) {
119
//                    jobs.add(sj);
120
//                } else {
121
//                    if (sj.getValidationStatus().equals(validationStatus)) {
122
//                        jobs.add(sj);
123
//                    }
124
//                }
125
            }
126 57648 antonis.le
127 58301 spyroukon
            // add to CRIS Jan jobs all other jobs
128
            if (retJobs.getJobs() != null) {
129
                jobs.addAll(retJobs.getJobs());
130 57648 antonis.le
            }
131 58301 spyroukon
            // set all jobs back to retJobs
132
            retJobs.setJobs(jobs);
133 57648 antonis.le
        }
134
135
        // fix number of jobs
136
        if (Boolean.parseBoolean(includeJobsTotal)) {
137
            retJobs.setTotalJobs(retJobs.getTotalJobs() + crisJobs.getJobs(user).size());
138
            retJobs.setTotalJobsSuccessful(retJobs.getTotalJobsSuccessful() + crisJobs.getJobs(user, Job.Status.SUCCESSFUL.getKey()).size());
139
            retJobs.setTotalJobsFailed(retJobs.getTotalJobsFailed() + crisJobs.getJobs(user, Job.Status.FAILED.getKey()).size());
140
            retJobs.setTotalJobsOngoing(retJobs.getTotalJobsOngoing() + crisJobs.getJobs(user, Job.Status.ONGOING.getKey()).size());
141
        }
142
        /////////////////////////////////////////////////////////////////////////////////////////
143
        /////////////////////////////////////////////////////////////////////////////////////////
144
145 49431 panagiotis
        return retJobs;
146 49236 panagiotis
147
    }
148
149 49431 panagiotis
    private int getJobsTotalNumberOfUser(String user, String jobType, String validationStatus) throws ValidatorServiceException {
150 58301 spyroukon
        return getValidationService().getStoredJobsTotalNumberNew(user, jobType, validationStatus);
151 49431 panagiotis
    }
152
153 49236 panagiotis
    @Override
154 49410 panagiotis
    public int getJobsOfUserPerValidationStatus(String user,
155
                                                String jobType,
156
                                                String validationStatus) throws JSONException {
157 49813 panagiotis
        LOGGER.debug("Getting job with validation status : " + validationStatus);
158 58301 spyroukon
159
        if (jobType.equalsIgnoreCase("cris")) {
160
            return crisJobs.getJobs(user, validationStatus).size();
161
        }
162
163 49236 panagiotis
        try {
164
            return getValidationService().getStoredJobsTotalNumberNew(user, jobType, validationStatus);
165
        } catch (ValidatorServiceException e) {
166 56766 ioannis.di
            LOGGER.error(e);
167 49236 panagiotis
        }
168
        return 0;
169
    }
170
171
    @Override
172 49410 panagiotis
    public StoredJob getJobSummary(String jobId,
173
                                   String groupBy) throws JSONException {
174 49813 panagiotis
        LOGGER.debug("Getting job summary with id : " + jobId);
175 57648 antonis.le
        StoredJob job = null;
176 49236 panagiotis
        try {
177 57648 antonis.le
            job = getValidationService().getStoredJob(Integer.parseInt(jobId), groupBy);
178 49236 panagiotis
        } catch (ValidatorServiceException e) {
179 56766 ioannis.di
            LOGGER.error(e);
180 49236 panagiotis
        }
181 57648 antonis.le
        /////////////////////////////////////////////////////////////////////////////////////////
182
        // FIXME: this is a hack for CRIS Jan Dvorak Validator, should be implemented properly //
183
        /////////////////////////////////////////////////////////////////////////////////////////
184
        if (job == null) {
185
            // not a good way to do it but Job id field is string
186
            List<Job> cJobs = crisJobs.getAll().stream().filter(j -> j.getId().hashCode() == Integer.parseInt(jobId)).collect(Collectors.toList());
187
            if (!cJobs.isEmpty()) {
188 58301 spyroukon
                job = CrisValidatorUtils.convertJobToStoredJob(cJobs.get(0));
189 57648 antonis.le
            }
190
        }
191
        /////////////////////////////////////////////////////////////////////////////////////////
192
        /////////////////////////////////////////////////////////////////////////////////////////
193
        return job;
194 49236 panagiotis
    }
195
}