use of org.hisp.dhis.scheduling.JobConfiguration in project dhis2-core by dhis2.
the class SchedulerStart method addDefaultJob.
private void addDefaultJob(SystemJob job, List<JobConfiguration> jobConfigurations, Consumer<JobConfiguration> init) {
if (verifyNoJobExist(job.name, jobConfigurations)) {
JobConfiguration configuration = new JobConfiguration(job.name, job.type, job.cron, null);
if (init != null)
init.accept(configuration);
configuration.setUid(job.uid);
configuration.setLeaderOnlyJob(true);
addAndScheduleJob(configuration);
}
}
use of org.hisp.dhis.scheduling.JobConfiguration in project dhis2-core by dhis2.
the class TrackerTrigramIndexingJobTest method testRunJobWithoutAnyAttributesInJobParametersButWithObsoleteIndexes.
@Test
public void testRunJobWithoutAnyAttributesInJobParametersButWithObsoleteIndexes() {
when(trackedEntityAttributeTableManager.getAttributeIdsWithTrigramIndexCreated()).thenReturn(Arrays.asList(12l, 13l));
JobConfiguration jobConfiguration = new JobConfiguration();
TrackerTrigramIndexJobParameters jp = new TrackerTrigramIndexJobParameters();
jobConfiguration.setJobParameters(jp);
job.execute(jobConfiguration, NoopJobProgress.INSTANCE);
verify(trackedEntityAttributeTableManager, never()).createTrigramIndex(any());
verify(trackedEntityAttributeTableManager, times(2)).dropTrigramIndex(any());
}
use of org.hisp.dhis.scheduling.JobConfiguration in project dhis2-core by dhis2.
the class JobConfigurationObjectBundleHook method validateNoErrors.
private void validateNoErrors(final JobConfiguration jobConfiguration, Consumer<ErrorReport> addReports) {
// Check whether jobConfiguration already exists
JobConfiguration persistedJobConfiguration = jobConfigurationService.getJobConfigurationByUid(jobConfiguration.getUid());
final JobConfiguration tempJobConfiguration = validatePersistedAndPrepareTempJobConfiguration(addReports, jobConfiguration, persistedJobConfiguration);
setDefaultJobParameters(tempJobConfiguration);
validateJobConfigurationCronOrFixedDelay(addReports, tempJobConfiguration);
validateCronExpressionWithinJobType(addReports, tempJobConfiguration);
if (tempJobConfiguration.getJobParameters() != null) {
tempJobConfiguration.getJobParameters().validate().ifPresent(addReports);
} else {
if (tempJobConfiguration.getJobType().hasJobParameters()) {
addReports.accept(new ErrorReport(this.getClass(), ErrorCode.E4029, tempJobConfiguration.getJobType()));
}
}
validateJob(addReports, tempJobConfiguration, persistedJobConfiguration);
}
use of org.hisp.dhis.scheduling.JobConfiguration in project dhis2-core by dhis2.
the class SchedulerStart method execute.
@Override
public void execute() throws Exception {
Date now = new Date();
List<String> unexecutedJobs = new ArrayList<>();
List<JobConfiguration> jobConfigurations = jobConfigurationService.getAllJobConfigurations();
addDefaultJobs(jobConfigurations);
jobConfigurations.forEach((jobConfig -> {
if (jobConfig.isEnabled()) {
Date oldExecutionTime = jobConfig.getNextExecutionTime();
jobConfig.setNextExecutionTime(null);
jobConfig.setJobStatus(SCHEDULED);
jobConfigurationService.updateJobConfiguration(jobConfig);
if (jobConfig.getLastExecutedStatus() == FAILED || (oldExecutionTime != null && oldExecutionTime.compareTo(now) < 0)) {
unexecutedJobs.add("\nJob [" + jobConfig.getUid() + ", " + jobConfig.getName() + "] has status failed or was scheduled in server downtime. Actual execution time was supposed to be: " + oldExecutionTime);
}
schedulingManager.schedule(jobConfig);
}
}));
if (!unexecutedJobs.isEmpty()) {
StringBuilder jobs = new StringBuilder();
for (String unexecutedJob : unexecutedJobs) {
jobs.append(unexecutedJob).append("\n");
}
messageService.sendSystemErrorNotification("Scheduler startup", new Exception("Scheduler started with one or more unexecuted jobs:\n" + jobs));
}
}
use of org.hisp.dhis.scheduling.JobConfiguration in project dhis2-core by dhis2.
the class DefaultMetadataImportService method getParamsFromMap.
@Override
@Transactional(readOnly = true)
public MetadataImportParams getParamsFromMap(Map<String, List<String>> parameters) {
MetadataImportParams params = new MetadataImportParams();
if (params.getUser() == null) {
params.setUser(currentUserService.getCurrentUser());
}
params.setSkipSharing(getBooleanWithDefault(parameters, "skipSharing", false));
params.setSkipTranslation(getBooleanWithDefault(parameters, "skipTranslation", false));
params.setSkipValidation(getBooleanWithDefault(parameters, "skipValidation", false));
params.setUserOverrideMode(getEnumWithDefault(UserOverrideMode.class, parameters, "userOverrideMode", UserOverrideMode.NONE));
params.setImportMode(getEnumWithDefault(ObjectBundleMode.class, parameters, "importMode", ObjectBundleMode.COMMIT));
params.setPreheatMode(getEnumWithDefault(PreheatMode.class, parameters, "preheatMode", PreheatMode.REFERENCE));
params.setIdentifier(getEnumWithDefault(PreheatIdentifier.class, parameters, "identifier", PreheatIdentifier.UID));
params.setImportStrategy(getEnumWithDefault(ImportStrategy.class, parameters, "importStrategy", ImportStrategy.CREATE_AND_UPDATE));
params.setAtomicMode(getEnumWithDefault(AtomicMode.class, parameters, "atomicMode", AtomicMode.ALL));
params.setMergeMode(getEnumWithDefault(MergeMode.class, parameters, "mergeMode", MergeMode.REPLACE));
params.setFlushMode(getEnumWithDefault(FlushMode.class, parameters, "flushMode", FlushMode.AUTO));
params.setImportReportMode(getEnumWithDefault(ImportReportMode.class, parameters, "importReportMode", ImportReportMode.ERRORS));
params.setFirstRowIsHeader(getBooleanWithDefault(parameters, "firstRowIsHeader", true));
if (getBooleanWithDefault(parameters, "async", false)) {
JobConfiguration jobId = new JobConfiguration("metadataImport", JobType.METADATA_IMPORT, params.getUser().getUid(), true);
notifier.clear(jobId);
params.setId(jobId);
}
if (params.getUserOverrideMode() == UserOverrideMode.SELECTED) {
User overrideUser = null;
if (parameters.containsKey("overrideUser")) {
List<String> overrideUsers = parameters.get("overrideUser");
overrideUser = manager.get(User.class, overrideUsers.get(0));
}
if (overrideUser == null) {
throw new MetadataImportException("UserOverrideMode.SELECTED is enabled, but overrideUser parameter does not point to a valid user.");
} else {
params.setOverrideUser(overrideUser);
}
}
return params;
}
Aggregations