package jvmmonitor.agent; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import jvmmonitor.agent.module.*; import lombok.Getter; import java.util.Map; import java.util.Set; /** * Created by peiliping on 16-12-19. */ public class Config { @Getter private String remoteIp = ""; // metric monitor interval @Getter private int interval; @Getter private int multiple4SendData; // filter info private Set<Integer> targetPids; private Set<String> excludeKeyWords; private static final Set<String> EXCLUDEKEYWORDS_CONS = Sets.newHashSet(); static { EXCLUDEKEYWORDS_CONS.add("sun.tools.*"); EXCLUDEKEYWORDS_CONS.add(".*jvm-monitor-agent.jar"); EXCLUDEKEYWORDS_CONS.add(".*icesword-agent.jar"); EXCLUDEKEYWORDS_CONS.add(".*GreysConsole"); } @Getter private Set<String> modules; public static final Map<String, Class<? extends AbstractModule>> MODULES_CONS = Maps.newHashMap(); @Getter private boolean debug; @Getter private boolean parseFlagsWhenRestartAgent; @Getter private String mode; @Getter private String appName; @Getter private String roleName; static { MODULES_CONS.put("agetable", ModuleZAgetable.class); MODULES_CONS.put("class", ModuleZClass.class); MODULES_CONS.put("compiler", ModuleZCompiler.class); MODULES_CONS.put("gc", ModuleZGC.class); MODULES_CONS.put("gcextend", ModuleZGCExtend.class); MODULES_CONS.put("lock", ModuleZLock.class); MODULES_CONS.put("memory", ModuleZMemory.class); MODULES_CONS.put("thread", ModuleZThread.class); MODULES_CONS.put("threshold", ModuleZThreshold.class); MODULES_CONS.put("tlab", ModuleZTlab.class); MODULES_CONS.put("safepoint", ModuleZSafepoint.class); } public Config(int interval, Set<Integer> targetPids, Set<String> excludeKeyWords, Set<String> modules, int multiple, String remoteIp, boolean debug, boolean parseFlagsWhenRestartAgent, String mode, String appName, String roleName) { this.remoteIp = remoteIp; this.interval = interval; this.targetPids = targetPids; this.excludeKeyWords = excludeKeyWords; this.excludeKeyWords.addAll(EXCLUDEKEYWORDS_CONS); this.modules = modules; this.multiple4SendData = multiple; if (modules.size() == 0) { modules.addAll(MODULES_CONS.keySet()); } this.debug = debug; this.parseFlagsWhenRestartAgent = parseFlagsWhenRestartAgent; this.mode = mode; this.appName = appName; this.roleName = roleName; } public boolean filterPid(Integer id) { if (targetPids.isEmpty()) { return true; } else { return targetPids.contains(id); } } public boolean filterKeyWords(String mainClass) { for (String kw : excludeKeyWords) { if (mainClass.matches(kw)) { return true; } } return false; } public String getUrl() { return "http://" + this.remoteIp + "/agent/jvm"; } }