package io.cattle.platform.configitem.server.agentinclude.impl;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.configitem.server.agentinclude.AgentIncludeMap;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.codec.binary.Hex;
import com.netflix.config.DynamicListProperty;
import com.netflix.config.DynamicStringProperty;
public class AgentIncludeMapImpl implements AgentIncludeMap {
private static final DynamicListProperty<String> KEYS = ArchaiusUtil.getList("agent.packages.types");
Map<String, DynamicStringProperty> values = new ConcurrentHashMap<String, DynamicStringProperty>();
@Override
public List<String> getNamedMaps() {
return KEYS.get();
}
protected String sanitize(String s) {
if (s == null) {
return s;
}
return s.replaceAll("-", ".").toLowerCase();
}
@Override
public Map<String, String> getMap(String name) {
Map<String, String> result = new LinkedHashMap<String, String>();
if (name == null) {
return result;
}
for (String item : ArchaiusUtil.getList("agent.packages." + sanitize(name)).get()) {
String key = String.format("agent.package.%s.url", sanitize(item));
DynamicStringProperty prop = values.get(key);
if (prop == null) {
prop = ArchaiusUtil.getString(key);
values.put(key, prop);
}
String value = prop.get();
if (value != null) {
result.put(item, value);
}
}
return result;
}
@Override
public String getSourceRevision(String name) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
for (Map.Entry<String, String> entry : getMap(name).entrySet()) {
md.update(entry.getKey().getBytes("UTF-8"));
md.update(entry.getValue().getBytes("UTF-8"));
}
return Hex.encodeHexString(md.digest());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}