package de.otto.edison.jobs.configuration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;
/**
* Configuration properties used to configure the behaviour of module edison-jobs.
*
* @since 1.0.0
*/
@ConfigurationProperties(prefix = "edison.jobs")
@Validated
public class JobsProperties {
/** Enables / disabled the support for external triggers (->Edison JobTrigger). If false, the job controllers are not available. */
private boolean externalTrigger = true;
/** Number of threads available to run jobs. */
@Min(1)
private int threadCount = 10;
/** Properties used to configure clean-up strategies. */
@Valid
private Cleanup cleanup = new Cleanup();
/** Properties used to configure the reporting of job status using StatusDetailIndicators. */
@Valid
private Status status = new Status();
public boolean isExternalTrigger() {
return externalTrigger;
}
public void setExternalTrigger(boolean externalTrigger) {
this.externalTrigger = externalTrigger;
}
public int getThreadCount() {
return threadCount;
}
public void setThreadCount(int threadCount) {
this.threadCount = threadCount;
}
public Cleanup getCleanup() {
return cleanup;
}
public void setCleanup(Cleanup cleanup) {
this.cleanup = cleanup;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public static class Cleanup {
/**
* The number of jobs to keep by strategies like KeepLastJobs to clean up old jobs.
*/
@Min(1)
private int numberOfJobsToKeep = 100;
/**
* The number of skipped jobs to keep by strategies like DeleteSkippedJobs to clean up old jobs.
*/
@Min(1)
private int numberOfSkippedJobsToKeep = 10;
/**
* Number of seconds without update after which a job is considered to be dead.
*/
@Min(1)
private int markDeadAfter = 30;
public int getNumberOfJobsToKeep() {
return numberOfJobsToKeep;
}
public void setNumberOfJobsToKeep(int numberOfJobsToKeep) {
this.numberOfJobsToKeep = numberOfJobsToKeep;
}
public int getNumberOfSkippedJobsToKeep() {
return numberOfSkippedJobsToKeep;
}
public void setNumberOfSkippedJobsToKeep(int numberOfSkippedJobsToKeep) {
this.numberOfSkippedJobsToKeep = numberOfSkippedJobsToKeep;
}
public int getMarkDeadAfter() {
return markDeadAfter;
}
public void setMarkDeadAfter(int markDeadAfter) {
this.markDeadAfter = markDeadAfter;
}
}
public static class Status {
/** Enable / disable StatusDetailIndicators for jobs. */
private boolean enabled = true;
/** Configuration of the strategy used to map job state to StatusDetails. edison.jobs.status.calculator.default
* is used to configure the default strategy. */
@NotNull
private Map<String,String> calculator = new HashMap<>();
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public Map<String, String> getCalculator() {
return calculator;
}
public void setCalculator(final Map<String, String> calculator) {
final Map<String, String> normalized = new HashMap<>();
calculator.entrySet().forEach(entry -> {
String key = entry.getKey().toLowerCase().replace(" ", "-");
normalized.put(key, entry.getValue());
});
this.calculator = normalized;
}
}
}