package com.netflix.appinfo;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import com.google.common.collect.Sets;
import com.netflix.archaius.api.Config;
import com.netflix.archaius.api.annotations.ConfigurationSource;
import com.netflix.discovery.CommonConstants;
import com.netflix.discovery.internal.util.InternalPrefixedConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.netflix.appinfo.PropertyBasedInstanceConfigConstants.*;
@Singleton
@ConfigurationSource(CommonConstants.CONFIG_FILE_NAME)
public class EurekaArchaius2InstanceConfig extends AbstractInstanceConfig {
private static final Logger logger = LoggerFactory.getLogger(EurekaArchaius2InstanceConfig.class);
protected String namespace;
private final Config configInstance;
private final InternalPrefixedConfig prefixedConfig;
private final DataCenterInfo dcInfo;
private final String defaultAppGroup;
@Inject
public EurekaArchaius2InstanceConfig(Config configInstance) {
this(configInstance, CommonConstants.DEFAULT_CONFIG_NAMESPACE);
}
public EurekaArchaius2InstanceConfig(Config configInstance, String namespace) {
this(configInstance, namespace, new DataCenterInfo() {
@Override
public Name getName() {
return Name.MyOwn;
}
});
}
public EurekaArchaius2InstanceConfig(Config configInstance, String namespace, DataCenterInfo dcInfo) {
this.defaultAppGroup = configInstance.getString(FALLBACK_APP_GROUP_KEY, Values.UNKNOWN_APPLICATION);
this.namespace = namespace;
this.configInstance = configInstance;
this.prefixedConfig = new InternalPrefixedConfig(configInstance, namespace);
this.dcInfo = dcInfo;
}
@Override
public String getInstanceId() {
String result = prefixedConfig.getString(INSTANCE_ID_KEY, null);
return result == null ? null : result.trim();
}
@Override
public String getAppname() {
return prefixedConfig.getString(APP_NAME_KEY, Values.UNKNOWN_APPLICATION).trim();
}
@Override
public String getAppGroupName() {
return prefixedConfig.getString(APP_GROUP_KEY, defaultAppGroup).trim();
}
@Override
public boolean isInstanceEnabledOnit() {
return prefixedConfig.getBoolean(TRAFFIC_ENABLED_ON_INIT_KEY, super.isInstanceEnabledOnit());
}
@Override
public int getNonSecurePort() {
return prefixedConfig.getInteger(PORT_KEY, super.getNonSecurePort());
}
@Override
public int getSecurePort() {
return prefixedConfig.getInteger(SECURE_PORT_KEY, super.getSecurePort());
}
@Override
public boolean isNonSecurePortEnabled() {
return prefixedConfig.getBoolean(PORT_ENABLED_KEY, super.isNonSecurePortEnabled());
}
@Override
public boolean getSecurePortEnabled() {
return prefixedConfig.getBoolean(SECURE_PORT_ENABLED_KEY, super.getSecurePortEnabled());
}
@Override
public int getLeaseRenewalIntervalInSeconds() {
return prefixedConfig.getInteger(LEASE_RENEWAL_INTERVAL_KEY, super.getLeaseRenewalIntervalInSeconds());
}
@Override
public int getLeaseExpirationDurationInSeconds() {
return prefixedConfig.getInteger(LEASE_EXPIRATION_DURATION_KEY, super.getLeaseExpirationDurationInSeconds());
}
@Override
public String getVirtualHostName() {
return this.isNonSecurePortEnabled()
? prefixedConfig.getString(VIRTUAL_HOSTNAME_KEY, super.getVirtualHostName())
: null;
}
@Override
public String getSecureVirtualHostName() {
return this.getSecurePortEnabled()
? prefixedConfig.getString(SECURE_VIRTUAL_HOSTNAME_KEY, super.getSecureVirtualHostName())
: null;
}
@Override
public String getASGName() {
return prefixedConfig.getString(ASG_NAME_KEY, super.getASGName());
}
@Override
public Map<String, String> getMetadataMap() {
Map<String, String> meta = new HashMap<>();
InternalPrefixedConfig metadataConfig = new InternalPrefixedConfig(configInstance, namespace, INSTANCE_METADATA_PREFIX);
for (String key : Sets.newHashSet(metadataConfig.getKeys())) {
String value = metadataConfig.getString(key, null);
// only add the metadata if the value is present
if (value != null && !value.isEmpty()) {
meta.put(key, value);
} else {
logger.warn("Not adding metadata with key \"{}\" as it has null or empty value", key);
}
}
return meta;
}
@Override
public DataCenterInfo getDataCenterInfo() {
return dcInfo;
}
@Override
public String getStatusPageUrlPath() {
return prefixedConfig.getString(STATUS_PAGE_URL_PATH_KEY, Values.DEFAULT_STATUSPAGE_URLPATH);
}
@Override
public String getStatusPageUrl() {
return prefixedConfig.getString(STATUS_PAGE_URL_KEY, null);
}
@Override
public String getHomePageUrlPath() {
return prefixedConfig.getString(HOME_PAGE_URL_PATH_KEY, Values.DEFAULT_HOMEPAGE_URLPATH);
}
@Override
public String getHomePageUrl() {
return prefixedConfig.getString(HOME_PAGE_URL_KEY, null);
}
@Override
public String getHealthCheckUrlPath() {
return prefixedConfig.getString(HEALTHCHECK_URL_PATH_KEY, Values.DEFAULT_HEALTHCHECK_URLPATH);
}
@Override
public String getHealthCheckUrl() {
return prefixedConfig.getString(HEALTHCHECK_URL_KEY, null);
}
@Override
public String getSecureHealthCheckUrl() {
return prefixedConfig.getString(SECURE_HEALTHCHECK_URL_KEY, null);
}
@Override
public String[] getDefaultAddressResolutionOrder() {
String result = prefixedConfig.getString(DEFAULT_ADDRESS_RESOLUTION_ORDER_KEY, null);
return result == null ? new String[0] : result.split(",");
}
@Override
public String getNamespace() {
return namespace;
}
}