package com.ctrip.framework.apollo.biz.config;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ctrip.framework.apollo.biz.service.BizDBPropertySource;
import com.ctrip.framework.apollo.common.config.RefreshableConfig;
import com.ctrip.framework.apollo.common.config.RefreshablePropertySource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Component
public class BizConfig extends RefreshableConfig {
private Gson gson = new Gson();
private static final Type namespaceValueLengthOverrideTypeReference =
new TypeToken<Map<Long, Integer>>() {
}.getType();
@Autowired
private BizDBPropertySource propertySource;
@Override
protected List<RefreshablePropertySource> getRefreshablePropertySources() {
return Collections.singletonList(propertySource);
}
public List<String> eurekaServiceUrls() {
String configuration = getValue("eureka.service.url", "");
if (Strings.isNullOrEmpty(configuration)) {
return Collections.emptyList();
}
return splitter.splitToList(configuration);
}
public int grayReleaseRuleScanInterval() {
int interval = getIntProperty("apollo.gray-release-rule-scan.interval", 60);
return checkInt(interval, 1, Integer.MAX_VALUE, 60);
}
public int itemKeyLengthLimit() {
int limit = getIntProperty("item.key.length.limit", 128);
return checkInt(limit, 5, Integer.MAX_VALUE, 128);
}
public int itemValueLengthLimit() {
int limit = getIntProperty("item.value.length.limit", 20000);
return checkInt(limit, 5, Integer.MAX_VALUE, 20000);
}
public Map<Long, Integer> namespaceValueLengthLimitOverride() {
String namespaceValueLengthOverrideString = getValue("namespace.value.length.limit.override");
Map<Long, Integer> namespaceValueLengthOverride = Maps.newHashMap();
if (!Strings.isNullOrEmpty(namespaceValueLengthOverrideString)) {
namespaceValueLengthOverride =
gson.fromJson(namespaceValueLengthOverrideString, namespaceValueLengthOverrideTypeReference);
}
return namespaceValueLengthOverride;
}
public boolean isNamespaceLockSwitchOff() {
return !getBooleanProperty("namespace.lock.switch", false);
}
/**
* ctrip config
**/
public String cloggingUrl() {
return getValue("clogging.server.url");
}
public String cloggingPort() {
return getValue("clogging.server.port");
}
public int appNamespaceCacheScanInterval() {
int interval = getIntProperty("apollo.app-namespace-cache-scan.interval", 1);
return checkInt(interval, 1, Integer.MAX_VALUE, 1);
}
public TimeUnit appNamespaceCacheScanIntervalTimeUnit() {
return TimeUnit.SECONDS;
}
public int appNamespaceCacheRebuildInterval() {
int interval = getIntProperty("apollo.app-namespace-cache-rebuild.interval", 60);
return checkInt(interval, 1, Integer.MAX_VALUE, 60);
}
public TimeUnit appNamespaceCacheRebuildIntervalTimeUnit() {
return TimeUnit.SECONDS;
}
public int releaseMessageCacheScanInterval() {
int interval = getIntProperty("apollo.release-message-cache-scan.interval", 1);
return checkInt(interval, 1, Integer.MAX_VALUE, 1);
}
public TimeUnit releaseMessageCacheScanIntervalTimeUnit() {
return TimeUnit.SECONDS;
}
public int releaseMessageNotificationBatch() {
int batch = getIntProperty("apollo.release-message.notification.batch", 100);
return checkInt(batch, 1, Integer.MAX_VALUE, 100);
}
public int releaseMessageNotificationBatchIntervalInMilli() {
int interval = getIntProperty("apollo.release-message.notification.batch.interval", 100);
return checkInt(interval, 1, Integer.MAX_VALUE, 100);
}
int checkInt(int value, int min, int max, int defaultValue) {
if (value >= min && value <= max) {
return value;
}
return defaultValue;
}
}