package com.hubspot.blazar.config;
import java.util.concurrent.TimeUnit;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.base.Optional;
import com.hubspot.blazar.external.models.singularity.BuildCGroupResources;
public class ExecutorConfiguration {
@NotNull
private final String defaultBuildUser;
@Min(0)
private final long buildTimeoutMillis;
@Min(0)
private final long containerStartTimeoutMillis;
// This is left as optional because the request that you configure in
// is the last set of default options
private final Optional<BuildCGroupResources> defaultBuildResources;
/**
* @param defaultBuildUser The default user for builds to run as
* @param buildTimeoutMillis The time to wait before considering a running build to be stuck and for it to be killed.
* @param containerStartTimeoutMillis The time to wait before considering the container launch to have failed. Hitting this limit fails the module build.
*/
@JsonCreator
public ExecutorConfiguration(@JsonProperty("defaultBuildUser") Optional<String> defaultBuildUser,
@JsonProperty("defaultBuildResources") Optional<BuildCGroupResources> defaultBuildResources,
@JsonProperty("buildTimeoutMillis") Optional<Long> buildTimeoutMillis,
@JsonProperty("containerStartTimeoutMillis") Optional<Long> containerStartTimeoutMillis) {
this.defaultBuildResources = MoreObjects.firstNonNull(defaultBuildResources, Optional.<BuildCGroupResources>absent());
this.defaultBuildUser = MoreObjects.firstNonNull(defaultBuildUser, Optional.<String>absent()).or("root");
this.buildTimeoutMillis = MoreObjects.firstNonNull(buildTimeoutMillis, Optional.<Long>absent()).or(TimeUnit.MINUTES.toMillis(20));
this.containerStartTimeoutMillis = MoreObjects.firstNonNull(containerStartTimeoutMillis, Optional.<Long>absent()).or(TimeUnit.MINUTES.toMillis(5));
}
public static ExecutorConfiguration defaultConfiguration() {
return new ExecutorConfiguration(Optional.absent(), Optional.absent(), Optional.absent(), Optional.absent());
}
public String getDefaultBuildUser() {
return defaultBuildUser;
}
public long getBuildTimeoutMillis() {
return buildTimeoutMillis;
}
public Optional<BuildCGroupResources> getDefaultBuildResources() {
return defaultBuildResources;
}
public long getContainerStartTimeoutMillis() {
return containerStartTimeoutMillis;
}
}