All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.appinfo.PropertiesInstanceConfig Maven / Gradle / Ivy

There is a newer version: 0.40.13
Show newest version
/*
 * Copyright 2012 Netflix, Inc.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package com.netflix.appinfo;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import com.netflix.config.ConfigurationManager;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.discovery.CommonConstants;
import com.netflix.discovery.internal.util.Archaius1Utils;
import org.apache.commons.configuration.Configuration;

import static com.netflix.appinfo.PropertyBasedInstanceConfigConstants.*;

/**
 * A properties based {@link InstanceInfo} configuration.
 *
 * 

* The information required for registration with eureka server is provided in a * configuration file.The configuration file is searched for in the classpath * with the name specified by the property eureka.client.props and with * the suffix .properties. If the property is not specified, * eureka-client.properties is assumed as the default.The properties * that are looked up uses the namespace passed on to this class. *

* *

* If the eureka.environment property is specified, additionally * eureka-client-.properties is loaded in addition * to eureka-client.properties. *

* * @author Karthik Ranganathan * */ public abstract class PropertiesInstanceConfig extends AbstractInstanceConfig implements EurekaInstanceConfig { protected final String namespace; protected final DynamicPropertyFactory configInstance; private String appGrpNameFromEnv; public PropertiesInstanceConfig() { this(CommonConstants.DEFAULT_CONFIG_NAMESPACE); } public PropertiesInstanceConfig(String namespace) { this(namespace, new DataCenterInfo() { @Override public Name getName() { return Name.MyOwn; } }); } public PropertiesInstanceConfig(String namespace, DataCenterInfo info) { super(info); this.namespace = namespace.endsWith(".") ? namespace : namespace + "."; appGrpNameFromEnv = ConfigurationManager.getConfigInstance() .getString(FALLBACK_APP_GROUP_KEY, Values.UNKNOWN_APPLICATION); this.configInstance = Archaius1Utils.initConfig(CommonConstants.CONFIG_FILE_NAME); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#isInstanceEnabledOnit() */ @Override public boolean isInstanceEnabledOnit() { return configInstance.getBooleanProperty(namespace + TRAFFIC_ENABLED_ON_INIT_KEY, super.isInstanceEnabledOnit()).get(); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#getNonSecurePort() */ @Override public int getNonSecurePort() { return configInstance.getIntProperty(namespace + PORT_KEY, super.getNonSecurePort()).get(); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#getSecurePort() */ @Override public int getSecurePort() { return configInstance.getIntProperty(namespace + SECURE_PORT_KEY, super.getSecurePort()).get(); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#isNonSecurePortEnabled() */ @Override public boolean isNonSecurePortEnabled() { return configInstance.getBooleanProperty(namespace + PORT_ENABLED_KEY, super.isNonSecurePortEnabled()).get(); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#getSecurePortEnabled() */ @Override public boolean getSecurePortEnabled() { return configInstance.getBooleanProperty(namespace + SECURE_PORT_ENABLED_KEY, super.getSecurePortEnabled()).get(); } /* * (non-Javadoc) * * @see * com.netflix.appinfo.AbstractInstanceConfig#getLeaseRenewalIntervalInSeconds * () */ @Override public int getLeaseRenewalIntervalInSeconds() { return configInstance.getIntProperty(namespace + LEASE_RENEWAL_INTERVAL_KEY, super.getLeaseRenewalIntervalInSeconds()).get(); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig# * getLeaseExpirationDurationInSeconds() */ @Override public int getLeaseExpirationDurationInSeconds() { return configInstance.getIntProperty(namespace + LEASE_EXPIRATION_DURATION_KEY, super.getLeaseExpirationDurationInSeconds()).get(); } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#getVirtualHostName() */ @Override public String getVirtualHostName() { if (this.isNonSecurePortEnabled()) { return configInstance.getStringProperty(namespace + VIRTUAL_HOSTNAME_KEY, super.getVirtualHostName()).get(); } else { return null; } } /* * (non-Javadoc) * * @see * com.netflix.appinfo.AbstractInstanceConfig#getSecureVirtualHostName() */ @Override public String getSecureVirtualHostName() { if (this.getSecurePortEnabled()) { return configInstance.getStringProperty(namespace + SECURE_VIRTUAL_HOSTNAME_KEY, super.getSecureVirtualHostName()).get(); } else { return null; } } /* * (non-Javadoc) * * @see com.netflix.appinfo.AbstractInstanceConfig#getASGName() */ @Override public String getASGName() { return configInstance.getStringProperty(namespace + ASG_NAME_KEY, super.getASGName()).get(); } /** * Gets the metadata map associated with the instance. The properties that * will be looked up for this will be namespace + ".metadata". * *

* For instance, if the given namespace is eureka.appinfo, the * metadata keys are searched under the namespace * eureka.appinfo.metadata. *

*/ @Override public Map getMetadataMap() { String metadataNamespace = namespace + INSTANCE_METADATA_PREFIX + "."; Map metadataMap = new LinkedHashMap(); Configuration config = (Configuration) configInstance.getBackingConfigurationSource(); String subsetPrefix = metadataNamespace.charAt(metadataNamespace.length() - 1) == '.' ? metadataNamespace.substring(0, metadataNamespace.length() - 1) : metadataNamespace; for (Iterator iter = config.subset(subsetPrefix).getKeys(); iter.hasNext(); ) { String key = iter.next(); String value = config.getString(subsetPrefix + "." + key); metadataMap.put(key, value); } return metadataMap; } @Override public String getInstanceId() { String result = configInstance.getStringProperty(namespace + INSTANCE_ID_KEY, null).get(); return result == null ? null : result.trim(); } @Override public String getAppname() { return configInstance.getStringProperty(namespace + APP_NAME_KEY, Values.UNKNOWN_APPLICATION).get().trim(); } @Override public String getAppGroupName() { return configInstance.getStringProperty(namespace + APP_GROUP_KEY, appGrpNameFromEnv).get().trim(); } public String getIpAddress() { return super.getIpAddress(); } @Override public String getStatusPageUrlPath() { return configInstance.getStringProperty(namespace + STATUS_PAGE_URL_PATH_KEY, Values.DEFAULT_STATUSPAGE_URLPATH).get(); } @Override public String getStatusPageUrl() { return configInstance.getStringProperty(namespace + STATUS_PAGE_URL_KEY, null) .get(); } @Override public String getHomePageUrlPath() { return configInstance.getStringProperty(namespace + HOME_PAGE_URL_PATH_KEY, Values.DEFAULT_HOMEPAGE_URLPATH).get(); } @Override public String getHomePageUrl() { return configInstance.getStringProperty(namespace + HOME_PAGE_URL_KEY, null) .get(); } @Override public String getHealthCheckUrlPath() { return configInstance.getStringProperty(namespace + HEALTHCHECK_URL_PATH_KEY, Values.DEFAULT_HEALTHCHECK_URLPATH).get(); } @Override public String getHealthCheckUrl() { return configInstance.getStringProperty(namespace + HEALTHCHECK_URL_KEY, null) .get(); } @Override public String getSecureHealthCheckUrl() { return configInstance.getStringProperty(namespace + SECURE_HEALTHCHECK_URL_KEY, null).get(); } @Override public String[] getDefaultAddressResolutionOrder() { String result = configInstance.getStringProperty(namespace + DEFAULT_ADDRESS_RESOLUTION_ORDER_KEY, null).get(); return result == null ? new String[0] : result.split(","); } @Override public String getNamespace() { return this.namespace; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy