package com.netflix.evcache.util; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.netflix.config.ChainedDynamicProperty; import com.netflix.config.DynamicBooleanProperty; import com.netflix.config.DynamicIntProperty; import com.netflix.config.DynamicLongProperty; import com.netflix.config.DynamicPropertyFactory; import com.netflix.config.DynamicStringProperty; import com.netflix.config.Property; import com.netflix.servo.monitor.MonitorConfig; import com.netflix.servo.tag.Tag; import com.netflix.servo.tag.TagList; public class EVCacheConfig { private static final EVCacheConfig INSTANCE = new EVCacheConfig(); private final Map<String, Property<?>> fastPropMap = new ConcurrentHashMap<String, Property<?>>(); private final Map<String, MonitorConfig> monitorConfigMap = new HashMap<String, MonitorConfig>(); private EVCacheConfig() { } public static EVCacheConfig getInstance() { return INSTANCE; } public DynamicIntProperty getDynamicIntProperty(String name, int defaultValue) { DynamicIntProperty prop = (DynamicIntProperty) fastPropMap.get(name); if (prop != null) return prop; prop = DynamicPropertyFactory.getInstance().getIntProperty(name, defaultValue); fastPropMap.put(name, prop); return prop; } public DynamicLongProperty getDynamicLongProperty(String name, long defaultValue) { DynamicLongProperty prop = (DynamicLongProperty) fastPropMap.get(name); if (prop != null) return prop; prop = DynamicPropertyFactory.getInstance().getLongProperty(name, defaultValue); fastPropMap.put(name, prop); return prop; } public DynamicStringProperty getDynamicStringProperty(String name, String defaultValue) { DynamicStringProperty prop = (DynamicStringProperty) fastPropMap.get(name); if (prop != null) return prop; prop = DynamicPropertyFactory.getInstance().getStringProperty(name, defaultValue); fastPropMap.put(name, prop); return prop; } public DynamicBooleanProperty getDynamicBooleanProperty(String name, Boolean defaultValue) { DynamicBooleanProperty prop = (DynamicBooleanProperty) fastPropMap.get(name); if (prop != null) return prop; prop = DynamicPropertyFactory.getInstance().getBooleanProperty(name, defaultValue); fastPropMap.put(name, prop); return prop; } public ChainedDynamicProperty.BooleanProperty getChainedBooleanProperty(String overrideKey, String primaryKey, Boolean defaultValue) { final String mapKey = overrideKey + primaryKey; ChainedDynamicProperty.BooleanProperty prop = (ChainedDynamicProperty.BooleanProperty) fastPropMap.get(mapKey); if (prop != null) return prop; prop = new ChainedDynamicProperty.BooleanProperty(overrideKey, new ChainedDynamicProperty.DynamicBooleanPropertyThatSupportsNull(primaryKey, defaultValue)); fastPropMap.put(mapKey, prop); return prop; } public ChainedDynamicProperty.IntProperty getChainedIntProperty(String overrideKey, String primaryKey, int defaultValue) { final String mapKey = overrideKey + primaryKey; ChainedDynamicProperty.IntProperty prop = (ChainedDynamicProperty.IntProperty) fastPropMap.get(mapKey); if (prop != null) return prop; prop = new ChainedDynamicProperty.IntProperty(overrideKey, new DynamicIntProperty(primaryKey, defaultValue)); fastPropMap.put(mapKey, prop); return prop; } public ChainedDynamicProperty.StringProperty getChainedStringProperty(String overrideKey, String primaryKey, String defaultValue) { final String mapKey = overrideKey + primaryKey; ChainedDynamicProperty.StringProperty prop = (ChainedDynamicProperty.StringProperty) fastPropMap.get(mapKey); if (prop != null) return prop; prop = new ChainedDynamicProperty.StringProperty(overrideKey, new DynamicStringProperty(primaryKey, defaultValue)); fastPropMap.put(mapKey, prop); return prop; } public MonitorConfig getMonitorConfig(final String metricName, final Tag tag) { return this.getMonitorConfig(metricName, tag, null); } public MonitorConfig getMonitorConfig(final String metricName, final Tag tag, final TagList tagList) { MonitorConfig mc = monitorConfigMap.get(metricName); if (mc != null) return mc; final MonitorConfig.Builder monitorConfig = MonitorConfig.builder(metricName); if (tagList != null) monitorConfig.withTags(tagList); if (tag != null) monitorConfig.withTag(tag); mc = monitorConfig.build(); monitorConfigMap.put(metricName, mc); return mc; } // public DistributionSummary getDistributionSummary(String name) { // final Registry registry = Spectator.globalRegistry(); //_poolManager.getRegistry(); // if (registry != null) { // final DistributionSummary ds = registry.distributionSummary(name); // if (!Monitors.isObjectRegistered(ds)) Monitors.registerObject(ds); // return ds; // } // return null; // } }