package com.hubspot.baragon.agent.config;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.hubspot.baragon.config.AuthConfiguration;
import com.hubspot.baragon.config.GraphiteConfiguration;
import com.hubspot.baragon.config.HttpClientConfiguration;
import com.hubspot.baragon.config.ZooKeeperConfiguration;
import io.dropwizard.Configuration;
@JsonIgnoreProperties(ignoreUnknown = true)
public class BaragonAgentConfiguration extends Configuration {
public static final long DEFAULT_AGENT_LOCK_TIMEOUT_MS = 5000;
public static final String DEFAULT_AGENT_BASE_URL_TEMPLATE = "http://%s:%d%s";
public static final String DEFAULT_DATE_FORAMT = "yyyy-MM-dd hh:mm a";
@JsonProperty("zookeeper")
@NotNull
private ZooKeeperConfiguration zooKeeperConfiguration;
@JsonProperty("loadBalancerConfig")
@NotNull
private LoadBalancerConfiguration loadBalancerConfiguration;
@JsonProperty("templates")
@NotNull
private List<TemplateConfiguration> templates = Collections.emptyList();
@JsonProperty("hostname")
private String hostname;
@JsonProperty("agentLockTimeoutMs")
@Min(0)
private long agentLockTimeoutMs = DEFAULT_AGENT_LOCK_TIMEOUT_MS;
@JsonProperty("baseUrlTemplate")
@NotEmpty
private String baseUrlTemplate = DEFAULT_AGENT_BASE_URL_TEMPLATE;
@JsonProperty("defaultDateFormat")
@NotEmpty
private String defaultDateFormat = DEFAULT_DATE_FORAMT;
@JsonProperty("testing")
private TestingConfiguration testingConfiguration;
@JsonProperty("auth")
@Valid
private AuthConfiguration authConfiguration = new AuthConfiguration();
@JsonProperty("enableCorsFilter")
private boolean enableCorsFilter = false;
@JsonProperty("heartbeatIntervalSeconds")
private int heartbeatIntervalSeconds = 15;
@JsonProperty("httpClient")
@NotNull
@Valid
private HttpClientConfiguration httpClientConfiguration = new HttpClientConfiguration();
@JsonProperty("registerOnStartup")
private boolean registerOnStartup = true;
@JsonProperty("deregisterOnGracefulShutdown")
private boolean deregisterOnGracefulShutdown = false;
@JsonProperty("exitOnStartupError")
private boolean exitOnStartupError = false;
@JsonProperty("extraAgentData")
private Map<String, String> extraAgentData = Collections.emptyMap();
@JsonProperty("maxNotifyServiceAttempts")
private int maxNotifyServiceAttempts = 3;
@JsonProperty("agentCheckInTimeoutMs")
private long agentCheckInTimeoutMs = 60000;
@JsonProperty("stateFile")
private Optional<String> stateFile = Optional.absent();
@JsonProperty("maxReapplyConfigAttempts")
private int maxReapplyConfigAttempts = 3;
@JsonProperty("configCheckIntervalSecs")
private int configCheckIntervalSecs = 60;
@JsonProperty("saveFailedConfigs")
private boolean saveFailedConfigs = false;
@JsonProperty("graphite")
private GraphiteConfiguration graphiteConfiguration = new GraphiteConfiguration();
@JsonProperty("maxGetGloablStateAttempts")
private int maxGetGloablStateAttempts = 3;
@JsonProperty("zeroWeightString")
private String zeroWeightString = "backup";
@JsonProperty("sameRackMultiplier")
private int sameRackMultiplier = 2;
@JsonProperty("weightingFormat")
private String weightingFormat = "weight=%s";
public HttpClientConfiguration getHttpClientConfiguration() {
return httpClientConfiguration;
}
public void setHttpClientConfiguration(HttpClientConfiguration httpClientConfiguration) {
this.httpClientConfiguration = httpClientConfiguration;
}
public boolean isEnableCorsFilter() {
return enableCorsFilter;
}
public AuthConfiguration getAuthConfiguration() {
return authConfiguration;
}
public void setAuthConfiguration(AuthConfiguration authConfiguration) {
this.authConfiguration = authConfiguration;
}
public ZooKeeperConfiguration getZooKeeperConfiguration() {
return zooKeeperConfiguration;
}
public void setZooKeeperConfiguration(ZooKeeperConfiguration zooKeeperConfiguration) {
this.zooKeeperConfiguration = zooKeeperConfiguration;
}
public LoadBalancerConfiguration getLoadBalancerConfiguration() {
return loadBalancerConfiguration;
}
public void setLoadBalancerConfiguration(LoadBalancerConfiguration loadBalancerConfiguration) {
this.loadBalancerConfiguration = loadBalancerConfiguration;
}
public List<TemplateConfiguration> getTemplates() {
return templates;
}
public void setTemplates(List<TemplateConfiguration> templates) {
this.templates = templates;
}
public Optional<String> getHostname() {
return Optional.fromNullable(Strings.emptyToNull(hostname));
}
public void setHostname(String hostname) {
this.hostname = hostname;
}
public long getAgentLockTimeoutMs() {
return agentLockTimeoutMs;
}
public void setAgentLockTimeoutMs(long agentLockTimeoutMs) {
this.agentLockTimeoutMs = agentLockTimeoutMs;
}
public TestingConfiguration getTestingConfiguration() {
return testingConfiguration;
}
public void setTestingConfiguration(TestingConfiguration testingConfiguration) {
this.testingConfiguration = testingConfiguration;
}
public String getBaseUrlTemplate() {
return baseUrlTemplate;
}
public void setBaseUrlTemplate(String baseUrlTemplate) {
this.baseUrlTemplate = baseUrlTemplate;
}
public String getDefaultDateFormat() {
return defaultDateFormat;
}
public void setDefaultDateFormat(String defaultDateFormat) {
this.defaultDateFormat = defaultDateFormat;
}
public int getHeartbeatIntervalSeconds() {
return heartbeatIntervalSeconds;
}
public void setHeartbeatIntervalSeconds(int heartbeatIntervalSeconds) {
this.heartbeatIntervalSeconds = heartbeatIntervalSeconds;
}
public boolean isRegisterOnStartup() {
return registerOnStartup;
}
public void setRegisterOnStartup(boolean registerOnStartup) {
this.registerOnStartup = registerOnStartup;
}
public boolean isDeregisterOnGracefulShutdown() {
return deregisterOnGracefulShutdown;
}
public void setDeregisterOnGracefulShutdown(boolean deregisterOnGracefulShutdown) {
this.deregisterOnGracefulShutdown = deregisterOnGracefulShutdown;
}
public boolean isExitOnStartupError() {
return exitOnStartupError;
}
public void setExitOnStartupError(boolean exitOnStartupError) {
this.exitOnStartupError = exitOnStartupError;
}
public Map<String, String> getExtraAgentData() {
return extraAgentData;
}
public void setExtraAgentData(Map<String, String> extraAgentData) {
this.extraAgentData = extraAgentData;
}
public int getMaxNotifyServiceAttempts() {
return maxNotifyServiceAttempts;
}
public void setMaxNotifyServiceAttempts(int maxNotifyServiceAttempts) {
this.maxNotifyServiceAttempts = maxNotifyServiceAttempts;
}
public Optional<String> getStateFile() {
return stateFile;
}
public void setStateFile(Optional<String> stateFile) {
this.stateFile = stateFile;
}
public int getMaxReapplyConfigAttempts() {
return maxReapplyConfigAttempts;
}
public void setMaxReapplyConfigAttempts(int maxReapplyConfigAttempts) {
this.maxReapplyConfigAttempts = maxReapplyConfigAttempts;
}
public int getConfigCheckIntervalSecs() {
return configCheckIntervalSecs;
}
public void setConfigCheckIntervalSecs(int configCheckIntervalSecs) {
this.configCheckIntervalSecs = configCheckIntervalSecs;
}
public boolean isSaveFailedConfigs() {
return saveFailedConfigs;
}
public void setSaveFailedConfigs(boolean saveFailedConfigs) {
this.saveFailedConfigs = saveFailedConfigs;
}
public GraphiteConfiguration getGraphiteConfiguration() {
return graphiteConfiguration;
}
public void setGraphiteConfiguration(GraphiteConfiguration graphiteConfiguration) {
this.graphiteConfiguration = graphiteConfiguration;
}
public int getMaxGetGloablStateAttempts() {
return maxGetGloablStateAttempts;
}
public void setMaxGetGloablStateAttempts(int maxGetGloablStateAttempts) {
this.maxGetGloablStateAttempts = maxGetGloablStateAttempts;
}
public String getZeroWeightString() {
return zeroWeightString;
}
public void setZeroWeightString(String zeroWeightString) {
this.zeroWeightString = zeroWeightString;
}
public int getSameRackMultiplier() {
return sameRackMultiplier;
}
public void setSameRackMultiplier(int sameRackMultiplier) {
this.sameRackMultiplier = sameRackMultiplier;
}
public String getWeightingFormat() {
return weightingFormat;
}
public void setWeightingFormat(String weightingFormat) {
this.weightingFormat = weightingFormat;
}
public long getAgentCheckInTimeoutMs() {
return agentCheckInTimeoutMs;
}
public void setAgentCheckInTimeoutMs(long agentCheckInTimeoutMs) {
this.agentCheckInTimeoutMs = agentCheckInTimeoutMs;
}
}