package com.hubspot.singularity.executor.cleanup.config;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import com.hubspot.singularity.SingularityClientCredentials;
import com.hubspot.singularity.SingularityS3UploaderFile;
import com.hubspot.singularity.runner.base.configuration.BaseRunnerConfiguration;
import com.hubspot.singularity.runner.base.configuration.Configuration;
import com.hubspot.singularity.runner.base.constraints.DirectoryExists;
import com.hubspot.singularity.runner.base.shared.CompressionType;
@Configuration(filename = "/etc/singularity.executor.cleanup.yaml", consolidatedField = "executorCleanup")
public class SingularityExecutorCleanupConfiguration extends BaseRunnerConfiguration {
@JsonProperty
private boolean safeModeWontRunWithNoTasks = true;
@DirectoryExists
@JsonProperty
private String executorCleanupResultsDirectory;
@NotEmpty
@JsonProperty
private String executorCleanupResultsSuffix = ".cleanup.json";
@Min(1)
@JsonProperty
private long cleanupAppDirectoryOfFailedTasksAfterMillis = TimeUnit.DAYS.toMillis(1);
@NotEmpty
@JsonProperty
private List<String> singularityHosts = Collections.emptyList();
@NotEmpty
@JsonProperty
private String singularityContextPath = "";
@JsonProperty
private boolean runDockerCleanup = false;
@JsonProperty
private Optional<SingularityClientCredentials> singularityClientCredentials = Optional.absent();
@JsonProperty
private boolean cleanTasksWhenDecommissioned = true;
@NotNull
@JsonProperty
private CompressionType compressionType = CompressionType.GZIP;
@NotEmpty
private String defaultServiceLog = "service.log";
@NotEmpty
private String defaultServiceFinishedTailLog = "tail_of_finished_service.log";
@NotNull
private List<SingularityS3UploaderFile> s3UploaderAdditionalFiles = Collections.singletonList(SingularityS3UploaderFile.fromString("service.log"));
@NotNull
private String defaultS3Bucket = "";
/**
* S3 Key format for finding logs. Should be the same as
* configuration set for SingularityService
*/
@NotNull
private String s3KeyFormat = "%requestId/%Y/%m/%taskId_%index-%s-%filename";
public SingularityExecutorCleanupConfiguration() {
super(Optional.of("singularity-executor-cleanup.log"));
}
public boolean isSafeModeWontRunWithNoTasks() {
return safeModeWontRunWithNoTasks;
}
public void setSafeModeWontRunWithNoTasks(boolean safeModeWontRunWithNoTasks) {
this.safeModeWontRunWithNoTasks = safeModeWontRunWithNoTasks;
}
public String getExecutorCleanupResultsDirectory() {
return executorCleanupResultsDirectory;
}
public void setExecutorCleanupResultsDirectory(String executorCleanupResultsDirectory) {
this.executorCleanupResultsDirectory = executorCleanupResultsDirectory;
}
public String getExecutorCleanupResultsSuffix() {
return executorCleanupResultsSuffix;
}
public void setExecutorCleanupResultsSuffix(String executorCleanupResultsSuffix) {
this.executorCleanupResultsSuffix = executorCleanupResultsSuffix;
}
public long getCleanupAppDirectoryOfFailedTasksAfterMillis() {
return cleanupAppDirectoryOfFailedTasksAfterMillis;
}
public void setCleanupAppDirectoryOfFailedTasksAfterMillis(long cleanupAppDirectoryOfFailedTasksAfterMillis) {
this.cleanupAppDirectoryOfFailedTasksAfterMillis = cleanupAppDirectoryOfFailedTasksAfterMillis;
}
public List<String> getSingularityHosts() {
return singularityHosts;
}
public void setSingularityHosts(List<String> singularityHosts) {
this.singularityHosts = singularityHosts;
}
public String getSingularityContextPath() {
return singularityContextPath;
}
public void setSingularityContextPath(String singularityContextPath) {
this.singularityContextPath = singularityContextPath;
}
public boolean isRunDockerCleanup() {
return runDockerCleanup;
}
public void setRunDockerCleanup(boolean runDockerCleanup) {
this.runDockerCleanup = runDockerCleanup;
}
public Optional<SingularityClientCredentials> getSingularityClientCredentials() {
return singularityClientCredentials;
}
public void setSingularityClientCredentials(Optional<SingularityClientCredentials> singularityClientCredentials) {
this.singularityClientCredentials = singularityClientCredentials;
}
public boolean isCleanTasksWhenDecommissioned() {
return cleanTasksWhenDecommissioned;
}
public void setCleanTasksWhenDecommissioned(boolean cleanTasksWhenDecommissioned) {
this.cleanTasksWhenDecommissioned = cleanTasksWhenDecommissioned;
}
public CompressionType getCompressionType() {
return compressionType;
}
public void setCompressionType(CompressionType compressionType) {
this.compressionType = compressionType;
}
public String getDefaultServiceLog() {
return defaultServiceLog;
}
public SingularityExecutorCleanupConfiguration setDefaultServiceLog(String defaultServiceLog) {
this.defaultServiceLog = defaultServiceLog;
return this;
}
public String getDefaultServiceFinishedTailLog() {
return defaultServiceFinishedTailLog;
}
public SingularityExecutorCleanupConfiguration setDefaultServiceFinishedTailLog(String defaultServiceFinishedTailLog) {
this.defaultServiceFinishedTailLog = defaultServiceFinishedTailLog;
return this;
}
public List<SingularityS3UploaderFile> getS3UploaderAdditionalFiles() {
return s3UploaderAdditionalFiles;
}
public SingularityExecutorCleanupConfiguration setS3UploaderAdditionalFiles(List<SingularityS3UploaderFile> s3UploaderAdditionalFiles) {
this.s3UploaderAdditionalFiles = s3UploaderAdditionalFiles;
return this;
}
public String getDefaultS3Bucket() {
return defaultS3Bucket;
}
public SingularityExecutorCleanupConfiguration setDefaultS3Bucket(String defaultS3Bucket) {
this.defaultS3Bucket = defaultS3Bucket;
return this;
}
public String getS3KeyFormat() {
return s3KeyFormat;
}
public SingularityExecutorCleanupConfiguration setS3KeyFormat(String s3KeyFormat) {
this.s3KeyFormat = s3KeyFormat;
return this;
}
@Override
public String toString() {
return "SingularityExecutorCleanupConfiguration{" +
"safeModeWontRunWithNoTasks=" + safeModeWontRunWithNoTasks +
", executorCleanupResultsDirectory='" + executorCleanupResultsDirectory + '\'' +
", executorCleanupResultsSuffix='" + executorCleanupResultsSuffix + '\'' +
", cleanupAppDirectoryOfFailedTasksAfterMillis=" + cleanupAppDirectoryOfFailedTasksAfterMillis +
", singularityHosts=" + singularityHosts +
", singularityContextPath='" + singularityContextPath + '\'' +
", runDockerCleanup=" + runDockerCleanup +
", singularityClientCredentials=" + singularityClientCredentials +
", cleanTasksWhenDecommissioned=" + cleanTasksWhenDecommissioned +
", compressionType=" + compressionType +
", defaultServiceLog='" + defaultServiceLog + '\'' +
", defaultServiceFinishedTailLog='" + defaultServiceFinishedTailLog + '\'' +
", s3UploaderAdditionalFiles=" + s3UploaderAdditionalFiles +
", defaultS3Bucket='" + defaultS3Bucket + '\'' +
", s3KeyFormat='" + s3KeyFormat + '\'' +
"} " + super.toString();
}
}