diff --git a/cat-agent/src/main/java/com/dianping/cat/agent/build/ComponentsConfigurator.java b/cat-agent/src/main/java/com/dianping/cat/agent/build/ComponentsConfigurator.java index fac177e41eb15497c1562dd878ea979bad8aff44..180960c5af03bdc861a747aefa6f49a9c40e718b 100644 --- a/cat-agent/src/main/java/com/dianping/cat/agent/build/ComponentsConfigurator.java +++ b/cat-agent/src/main/java/com/dianping/cat/agent/build/ComponentsConfigurator.java @@ -45,7 +45,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(Executor.class, SystemStateExecutor.ID, SystemStateExecutor.class).req(EnvConfig.class, CommandUtils.class)); - all.add(C(TaskExecutors.class).req(DataSender.class)); + all.add(C(TaskExecutors.class).req(DataSender.class, EnvConfig.class)); all.add(C(PaasTask.class).req(DataSender.class, DataBuilder.class)); diff --git a/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/EnvConfig.java b/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/EnvConfig.java index 81b22e9264dfad7645c452d9af3db99baa99186d..fbf8c75175c9089eac2f086dc43acd2c83219f29 100644 --- a/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/EnvConfig.java +++ b/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/EnvConfig.java @@ -1,15 +1,19 @@ package com.dianping.cat.agent.monitor.executors; import java.io.BufferedInputStream; +import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; +import org.codehaus.plexus.util.StringUtils; +import com.dianping.cat.Cat; import com.dianping.cat.configuration.NetworkInterfaceManager; public class EnvConfig implements Initializable { @@ -20,6 +24,8 @@ public class EnvConfig implements Initializable { private String m_hostName; + private String m_monitors; + private String MD5_PATH = "/usr/sbin/sshd"; private String PACKAGE_INTERFACE = "eth0"; @@ -28,9 +34,9 @@ public class EnvConfig implements Initializable { private String CATALINA_PATH = "/data/applogs/tomcat/catalina.out"; - private List TRAFFIC_INTERFACE_LIST = new ArrayList(Arrays.asList("eth0", "lo")); + private List TRAFFIC_INTERFACE_LIST = Arrays.asList("eth0", "lo"); - private List DISK_LIST = new ArrayList(Arrays.asList("/", "/data", "/usr", "/var")); + private List DISK_LIST = Arrays.asList("/", "/data", "/usr", "/var"); public String getDomain() { return m_domain; @@ -48,6 +54,10 @@ public class EnvConfig implements Initializable { return m_hostName; } + public String getMonitors() { + return m_monitors; + } + public String getConfig() { return CONFIG_FILE; } @@ -91,31 +101,63 @@ public class EnvConfig implements Initializable { return domain; } - @Override - public void initialize() { + private void loadFromConfig(String defaultMonitors) { + Properties properties = new Properties(); + InputStream in = null; + try { - String agent = System.getProperty("agent", "executors"); + in = new BufferedInputStream(new FileInputStream(getConfig())); + properties.load(in); - if ("executors".equals(agent)) { - Properties properties = new Properties(); - InputStream in = new BufferedInputStream(new FileInputStream(getConfig())); - properties.load(in); + m_hostName = properties.getProperty("host.name"); - m_hostName = properties.getProperty("host.name"); + if (m_hostName == null) { + m_hostName = NetworkInterfaceManager.INSTANCE.getLocalHostName(); + m_domain = "unset"; + } else { + m_domain = buildDomain(m_hostName); + } + m_ip = properties.getProperty("host.ip"); - if (m_hostName == null) { - m_hostName = NetworkInterfaceManager.INSTANCE.getLocalHostName(); - } + if (m_ip == null) { + m_ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress(); + } - m_domain = buildDomain(m_hostName); - m_ip = properties.getProperty("host.ip"); + m_monitors = properties.getProperty("host.monitors"); - if (m_ip == null) { - m_ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress(); - } + if (m_monitors == null) { + m_monitors = defaultMonitors; } } catch (Exception e) { throw new RuntimeException("Error when init environment info ", e); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + Cat.logError(e); + } + } + } + } + + @Override + public void initialize() throws InitializationException { + String agent = System.getProperty("agent", "executors"); + + if ("executors".equals(agent)) { + File configFile = new File(getConfig()); + String envMoniotors = System.getenv("MONITORS"); + String defaultMonitors = StringUtils.isEmpty(envMoniotors) ? "system" : envMoniotors; + + if (configFile.exists()) { + loadFromConfig(defaultMonitors); + } else { + m_domain = "unset"; + m_monitors = defaultMonitors; + m_ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress(); + m_hostName = NetworkInterfaceManager.INSTANCE.getLocalHostName(); + } } } } diff --git a/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/TaskExecutors.java b/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/TaskExecutors.java index 944e22c92f6c1285045efd1c2def49cb6c953413..3e069bf65656243d6daedb67ab7d4dc70e316a28 100644 --- a/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/TaskExecutors.java +++ b/cat-agent/src/main/java/com/dianping/cat/agent/monitor/executors/TaskExecutors.java @@ -1,5 +1,6 @@ package com.dianping.cat.agent.monitor.executors; +import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; @@ -14,15 +15,22 @@ import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; import com.dianping.cat.agent.monitor.DataEntity; import com.dianping.cat.agent.monitor.DataSender; +import com.dianping.cat.agent.monitor.executors.jvm.JVMMemoryExecutor; +import com.dianping.cat.agent.monitor.executors.jvm.JVMStateExecutor; +import com.dianping.cat.agent.monitor.executors.system.SystemPerformanceExecutor; +import com.dianping.cat.agent.monitor.executors.system.SystemStateExecutor; import com.dianping.cat.message.Transaction; public class TaskExecutors extends ContainerHolder implements Task, Initializable { - private Collection m_executors; - @Inject private DataSender m_sender; + @Inject + private EnvConfig m_config; + + private Collection m_executors = new ArrayList(); + private static final long DURATION = 5 * 1000; @Override @@ -36,8 +44,17 @@ public class TaskExecutors extends ContainerHolder implements Task, Initializabl if ("executors".equalsIgnoreCase(agent)) { Map map = lookupMap(Executor.class); - m_executors = map.values(); + String monitors = m_config.getMonitors(); + if (monitors.toLowerCase().contains("system")) { + m_executors.add(map.get(SystemPerformanceExecutor.ID)); + m_executors.add(map.get(SystemStateExecutor.ID)); + } + + if (monitors.toLowerCase().contains("tomcat")) { + m_executors.add(map.get(JVMMemoryExecutor.ID)); + m_executors.add(map.get(JVMStateExecutor.ID)); + } Threads.forGroup("Cat").start(this); } } diff --git a/cat-agent/src/main/java/com/dianping/cat/agent/monitor/paas/DataBuilder.java b/cat-agent/src/main/java/com/dianping/cat/agent/monitor/paas/DataBuilder.java index b607e76e0ea0539a836722d58ba257dee1cd18e6..14546274fc7a9304de9124c792bb29d97c622a84 100644 --- a/cat-agent/src/main/java/com/dianping/cat/agent/monitor/paas/DataBuilder.java +++ b/cat-agent/src/main/java/com/dianping/cat/agent/monitor/paas/DataBuilder.java @@ -7,7 +7,6 @@ import java.util.Map; import org.codehaus.plexus.util.StringUtils; import org.unidal.lookup.annotation.Inject; -import org.unidal.tuple.Pair; import com.dianping.cat.Cat; import com.dianping.cat.agent.monitor.CommandUtils; @@ -18,40 +17,38 @@ public class DataBuilder { @Inject private CommandUtils m_commandUtils; - private Map m_ip2Md5 = new HashMap(); + private Map m_lastValues = new HashMap(); - private Map> m_lastFlow = new HashMap>(); + private Map m_ip2Md5 = new HashMap(); public String getPaasMonintor() { return System.getProperty("user.dir") + "/paas-monitor.py"; } - private Pair findOrCreateFlow(String ip) { - Pair flow = m_lastFlow.get(ip); + private double findOrCreateSumValue(String key) { + Double value = m_lastValues.get(key); - if (flow == null) { - flow = new Pair(-1D, -1D); - m_lastFlow.put(ip, flow); + if (value == null) { + value = new Double(-1D); + m_lastValues.put(key, value); } - return flow; + return value; } - private String findOrCreateMd5Info(String ip) { - String md5Info = m_ip2Md5.get(ip); + private String findOrCreateMd5Info(String key) { + String md5Info = m_ip2Md5.get(key); if (md5Info == null) { md5Info = ""; - m_ip2Md5.put(ip, md5Info); + m_ip2Md5.put(key, md5Info); } return md5Info; } private List convert2DataEntities(List lines) { List dataEntities = new ArrayList(); - Pair flow = null; String domain = null; - String ip = null; for (String line : lines) { try { @@ -64,21 +61,15 @@ public class DataBuilder { if (line.startsWith("domain")) { domain = value; - ip = key.substring(key.lastIndexOf("_")); - flow = findOrCreateFlow(ip); - } else if (line.startsWith("system_eth0-in-flow")) { - DataEntity inFlow = buildInFlowData(domain, type, realKey, flow, value); + } else if ("sum".equals(type)) { + DataEntity inFlow = buildSumEntity(domain, type, realKey, key, value); add2Entities(dataEntities, inFlow); - } else if (line.startsWith("system_eth0-out-flow")) { - DataEntity outFlow = buildOutFlowData(domain, type, realKey, flow, value); - - add2Entities(dataEntities, outFlow); } else if (line.startsWith("system_md5Change")) { - DataEntity md5Info = buildMd5Info(domain, type, realKey, ip, value); + DataEntity md5Info = buildMd5Info(domain, type, realKey, key, value); add2Entities(dataEntities, md5Info); - } else { + } else if ("avg".equals(type)) { DataEntity entity = new DataEntity(); entity.setGroup("system-" + domain).setDomain(domain).setId(realKey).setTime(System.currentTimeMillis()) @@ -98,21 +89,21 @@ public class DataBuilder { } } - private DataEntity buildInFlowData(String domain, String type, String key, Pair flow, String value) { + private DataEntity buildSumEntity(String domain, String type, String realKey, String key, String value) { DataEntity entity = null; try { - double flowValue = Double.parseDouble(value); - double lastInFlow = flow.getKey(); + double currentValue = Double.parseDouble(value); + double lastValue = findOrCreateSumValue(key); - if (lastInFlow >= 0) { - double gap = flowValue - lastInFlow; + if (lastValue >= 0) { + double gap = currentValue - lastValue; entity = new DataEntity(); - entity.setGroup(buildGroup(domain)).setDomain(domain).setId(key).setTime(System.currentTimeMillis()) + entity.setGroup(buildGroup(domain)).setDomain(domain).setId(realKey).setTime(System.currentTimeMillis()) .setType(type).setValue(gap); } - flow.setKey(flowValue); + m_lastValues.put(key, currentValue); } catch (Exception e) { Cat.logError(e); } @@ -120,29 +111,13 @@ public class DataBuilder { return entity; } - private DataEntity buildOutFlowData(String domain, String type, String key, Pair flow, String value) { - DataEntity entity = null; - double flowValue = Double.parseDouble(value); - double lastFlow = flow.getValue(); - - if (lastFlow >= 0) { - double gap = flowValue - lastFlow; - entity = new DataEntity(); - - entity.setGroup(buildGroup(domain)).setDomain(domain).setId(key).setTime(System.currentTimeMillis()) - .setType(type).setValue(gap); - } - flow.setValue(flowValue); - return entity; - } - - private DataEntity buildMd5Info(String domain, String type, String key, String ip, String value) { - String md5Info = findOrCreateMd5Info(ip); + private DataEntity buildMd5Info(String domain, String type, String realKey, String key, String value) { + String md5Info = findOrCreateMd5Info(key); DataEntity entity = null; if (StringUtils.isNotEmpty(md5Info)) { entity = new DataEntity(); - entity.setGroup(buildGroup(domain)).setDomain(domain).setId(key).setTime(System.currentTimeMillis()) + entity.setGroup(buildGroup(domain)).setDomain(domain).setId(realKey).setTime(System.currentTimeMillis()) .setType(type); if (md5Info.equals(value)) { entity.setValue(1); @@ -150,7 +125,7 @@ public class DataBuilder { entity.setValue(0); } } else { - m_ip2Md5.put(ip, value); + m_ip2Md5.put(key, value); } return entity; } diff --git a/cat-agent/src/main/resources/META-INF/plexus/components.xml b/cat-agent/src/main/resources/META-INF/plexus/components.xml index 463bec5ac5300362a684177c03637f8a54350489..70ed44898cb4431e830d7be80359cea727d9fbb6 100644 --- a/cat-agent/src/main/resources/META-INF/plexus/components.xml +++ b/cat-agent/src/main/resources/META-INF/plexus/components.xml @@ -101,6 +101,9 @@ com.dianping.cat.agent.monitor.DataSender + + com.dianping.cat.agent.monitor.executors.EnvConfig + @@ -175,8 +178,15 @@ com.dianping.cat.agent.monitor.DataSender + + com.dianping.cat.agent.monitor.executors.EnvConfig + + + com.dianping.cat.agent.monitor.executors.EnvConfig + com.dianping.cat.agent.monitor.executors.EnvConfig + com.dianping.cat.agent.monitor.paas.PaasTask com.dianping.cat.agent.monitor.paas.PaasTask diff --git a/cat-agent/src/main/webapp/paas-monitor.py b/cat-agent/src/main/webapp/paas-monitor.py index 795935641060f9373d2a2ac84c411cd2e3949b11..d989885e96e8bd0a14731e693990fde79bc628c5 100644 --- a/cat-agent/src/main/webapp/paas-monitor.py +++ b/cat-agent/src/main/webapp/paas-monitor.py @@ -15,6 +15,11 @@ def execute(command): return p.returncode, p.stdout.read(), p.stderr.read() +def docker_command(pid, command): + _, result, _ = execute(COMMAND_PATTERN % (pid, command)) + return result.strip() + + def get_instance_ids(): return [ele['Id'] for ele in json.loads(urllib2.urlopen('http://0.0.0.0:8090/containers/ps').read())] @@ -49,12 +54,12 @@ def get_name(inspect_info): def get_cpu_usage(metric_info): if 'current_usage' in metric_info['cpu_stats']['cpu_usage']: - return metric_info['cpu_stats']['cpu_usage']['current_usage'] + return metric_info['cpu_stats']['cpu_usage']['cpu_usage'] return 0 def get_network_info(pid, network_name): - _, flow, _ = execute(COMMAND_PATTERN % (pid, 'ifconfig %s' % network_name)) + flow = docker_command(pid, 'ifconfig %s' % network_name) total_error, total_dropped, total_collision = [0] * 3 m = re.search(r'RX bytes:\s*(\d+).*?TX bytes:\s*(\d+)', flow, re.IGNORECASE) @@ -77,12 +82,11 @@ def get_network_info(pid, network_name): return rx, tx, total_error, total_dropped, total_collision -def get_container_info(inspect_info): - pid = inspect_info['State']['Pid'] - _, disk_usage, _ = execute(COMMAND_PATTERN % (pid, 'df -h | grep "rootfs"')) +def get_container_info(pid): + disk_usage = docker_command(pid, 'df -h | grep "rootfs"') disk_usage = re.split(r'\s+', disk_usage.strip())[-2][:-1] disk_usage = int(disk_usage) * 1.0 / 100 - _, ssh_md5, _ = execute(COMMAND_PATTERN % (pid, 'md5sum /usr/sbin/sshd')) + ssh_md5 = docker_command(pid, 'md5sum /usr/sbin/sshd') ssh_md5 = re.split(r'\s+', ssh_md5.strip())[0] eth0_rx, eth0_tx, eth0_errors, eth0_dropped, eth0_collision = get_network_info(pid, 'eth0') @@ -97,7 +101,8 @@ def get_swap_usage(metric_info): def get_memory_info(metric_info, instance_id): - used, cached = metric_info['memory_stats']['usage'], metric_info['memory_stats']['stats']['cache'] + used, cached = metric_info['memory_stats']['stats']['rss'], metric_info['memory_stats']['stats']['cache'] + shared, buffered = [0, 0] total = -1 try: result = json.loads(post('http://localhost:8090/containers/%s/cgroup' % instance_id, @@ -109,7 +114,29 @@ def get_memory_info(metric_info, instance_id): except Exception, e: pass - return total, used, cached + free = int(total) - int(used) - int(cached) + + return total, used, cached, free, shared, buffered + + +def get_process_info(pid): + result = docker_command(pid, "top -b -n1 | grep Tasks | awk '{print $2,$4}'") + return re.split(r'\s+', result.strip()) + + +def get_number_of_user_connected(pid): + result = docker_command(pid, "who | awk '{ print $1 }' | sort | uniq | wc -l") + return result.strip() + + +def get_tcp_established(pid): + result = docker_command(pid, 'netstat -anot | grep ESTABLISHED | wc -l') + return result.strip() + + +def get_inodes_info(pid): + result = docker_command(pid, "df -i | grep rootfs | awk '{print $2,$4}'") + return re.split(r'\s+', result.strip()) def post(url, data, headers={}): @@ -130,10 +157,16 @@ def get_all_info(current_instance=None): inspect_info = instance_inspect(instance_id) metric_info = instance_metric(instance_id) + pid = inspect_info['State']['Pid'] + disk_usage, ssh_md5, eth0_rx, eth0_tx, eth0_errors, eth0_dropped, eth0_collision, lo_rx, lo_tx, \ - lo_errors, lo_dropped, lo_collision = get_container_info(inspect_info) + lo_errors, lo_dropped, lo_collision = get_container_info(pid) ip = get_ip(inspect_info) - mem_total, mem_used, mem_cached = get_memory_info(metric_info, instance_id) + mem_total, mem_used, mem_cached, mem_free, mem_shared, mem_buffered = get_memory_info(metric_info, instance_id) + process_total, process_running = get_process_info(pid) + number_of_user_connected = get_number_of_user_connected(pid) + tcp_established_num = get_tcp_established(pid) + inodes_total, inodes_free = get_inodes_info(pid) m = [ ('domain', '', get_name(inspect_info)), @@ -141,6 +174,9 @@ def get_all_info(current_instance=None): ('system_cachedMem', 'avg', mem_cached), ('system_totalMem', 'avg', mem_total), ('system_usedMem', 'avg', mem_used), + ('system_freeMem', 'avg', mem_free), + ('system_sharedMem', 'avg', mem_shared), + ('system_buffersMem', 'avg', mem_buffered), ('system_/-usage', 'avg', disk_usage), ('system_swapUsage', 'avg', get_swap_usage(metric_info)), ('system_md5Change', 'avg', ssh_md5), @@ -152,9 +188,12 @@ def get_all_info(current_instance=None): ('system_eth0-collisions', 'sum', eth0_collision), ('system_lo-outFlow', 'sum', lo_tx), ('system_lo-inFlow', 'sum', lo_rx), - ('system_lo-dropped', 'sum', lo_dropped), - ('system_lo-errors', 'sum', lo_errors), - ('system_lo-collisions', 'sum', lo_collision), + ('system_totalProcess', 'avg', process_total), + ('system_runningProcess', 'avg', process_running), + ('system_establishedTcp', 'avg', tcp_established_num), + ('system_loginUsers', 'avg', number_of_user_connected), + ('system_/-freeInodes', 'avg', "%.3f" % (float(inodes_free) / int(inodes_total))), + ] print '\n'.join(['%s_%s%s=%s' % (k, ip, t and ':' + t, v) for k, t, v in m]) diff --git a/cat-agent/src/main/webapp/rmp/cat-agent-makerpm.sh b/cat-agent/src/main/webapp/rmp/cat-agent-makerpm.sh new file mode 100644 index 0000000000000000000000000000000000000000..f4e7ba5e4c0164ae1c357f5cb47e08cb3d5eac4e --- /dev/null +++ b/cat-agent/src/main/webapp/rmp/cat-agent-makerpm.sh @@ -0,0 +1,59 @@ +# pull cat-agent source and packge to RPM +# yum install rpm-build +# yum install rpmdevtools + +set -e +set -u + +if [ ! $# -eq 2 ];then + echo "Usage: makerpm.sh tomcat/jboss version." + exit 1 +fi + +container=$1 +version=$2 + +if [ ! "$1" = "tomcat" ] && [ ! "$1" = "jboss" ]; then + echo "Usage: makerpm.sh tomcat/jboss version." + echo "Container can only be tomcat or jboss." + exit 1 +fi + +CAT_ROOT=~/cat +CAT_DIR=~/cat/cat +TMP_DIR=~/tmp +RPM_SOURCE_NAME=cat-agent-$container-$version +CAT_AGENT_INSTALL_DIR_NAME=cat-agent + +mkdir -p $CAT_ROOT +cd $CAT_ROOT +if [ ! -e $CAT_DIR ]; then + git clone https://github.com/dianping/cat.git +fi +cd - + +# pull lastest cat code +cd $CAT_DIR/cat-agent +git pull + +# package it +mvn -Dmaven.test.skip clean package +cd - + +# prepare agent code +mkdir -p $TMP_DIR +cd $TMP_DIR +rm -rf * +mkdir -p $RPM_SOURCE_NAME/$CAT_AGENT_INSTALL_DIR_NAME +unzip -d $RPM_SOURCE_NAME/$CAT_AGENT_INSTALL_DIR_NAME $CAT_DIR/cat-agent/target/cat-agent-*.war + +tar czf $RPM_SOURCE_NAME.tar.gz $RPM_SOURCE_NAME + + +rpmdev-setuptree +cp $RPM_SOURCE_NAME.tar.gz ~/rpmbuild/SOURCES/ +cp $CAT_DIR/cat-agent/src/main/rpm/cat-agent-$container.spec ~/rpmbuild/SPECS/ + +cd - + +rpmbuild -bb ~/rpmbuild/SPECS/cat-agent-$container.spec diff --git a/cat-agent/src/main/webapp/rmp/cat-agent-tomcat.spec b/cat-agent/src/main/webapp/rmp/cat-agent-tomcat.spec new file mode 100644 index 0000000000000000000000000000000000000000..8b4c794e358f822fcb7ad9939f180fa4216b117c --- /dev/null +++ b/cat-agent/src/main/webapp/rmp/cat-agent-tomcat.spec @@ -0,0 +1,84 @@ +#%define name value +%define __jar_repack 0 + + +Name: cat-agent-tomcat +Version: 1.0.5 +Release: 1 +Summary: cat-agent-tomcat +Requires: git +Requires(pre): /usr/sbin/useradd, /usr/bin/getent, /usr/sbin/usermod + +Group: Development/Tools +License: GPL +Source0: %{name}-%{version}.tar.gz +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-XXXXXXXXXX) + + +%description +A powerful customized J2EE web container (JBoss, Jetty, Tomcat) + +%pre +# add user cat +/usr/bin/getent passwd cat || /usr/sbin/useradd -u 2200 cat +/usr/sbin/usermod -a -G nobody cat || true + +%prep +%setup -q + + +%build + + +%install +[ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT/* + +# where to install agent files +AGENT_INSTALL_DIR=$RPM_BUILD_ROOT/data/webapps/cat/cat-agent + + +# create agent directories +[ -d $AGENT_INSTALL_DIR ] || mkdir -p $AGENT_INSTALL_DIR + +# copy agent files to corresponding directories +cp -r cat-agent/* $AGENT_INSTALL_DIR/ +chmod +x $AGENT_INSTALL_DIR/startup.sh +/bin/bash $AGENT_INSTALL_DIR/startup.sh + + +%post +# change required file permissions + +APPLOGS_DIR=/data/applogs +APPDATAS_DIR=/data/appdatas +CAT_ROOT_DIR=/data/webapps/cat/ +[ -d $APPLOGS_DIR ] && chown nobody:nobody $APPLOGS_DIR && chmod 775 $APPLOGS_DIR +[ -d $APPDATAS_DIR ] && chown nobody:nobody $APPDATAS_DIR && chmod 775 $APPDATAS_DIR +[ -d $CAT_ROOT_DIR ] && chown -R cat:cat $CAT_ROOT_DIR + +# comment out Defaults requiretty to enabel sudo in scripts +awk 'BEGIN{result=""}{if(match($0, "^[^#]*Defaults[[:space:]]+requiretty")>0){result=sprintf("%s#%s\n",result,$0);}else{result=sprintf("%s%s\n",result,$0);}}END{print result > "/etc/sudoers"}' /etc/sudoers + +AGENT_INSTALL_DIR=$RPM_BUILD_ROOT/data/webapps/cat/cat-agent +/bin/bash $AGENT_INSTALL_DIR/startup.sh + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%defattr(-,cat,cat,-) +/data/webapps/cat/cat-agent +%doc + + +%changelog + + +%preun +/usr/local/jdk/bin/jps -lvm | awk '$2=="com.dianping.cat.agent.monitor.CatAgent"{cmd=sprintf("kill -9 %s", $1);system(cmd)}' + + +%postun +/usr/local/jdk/bin/jps -lvm | awk '$2=="com.dianping.cat.agent.monitor.CatAgent"{cmd=sprintf("kill -9 %s", $1);system(cmd)}' +rm -rf /data/webapps/cat/cat-agent diff --git a/cat-agent/src/main/webapp/startup.sh b/cat-agent/src/main/webapp/startup.sh index f9812912f00027a7253b7d903e21bed2f22cc45f..93d1d63391ca765e4ddac77fad733d9f57986e45 100755 --- a/cat-agent/src/main/webapp/startup.sh +++ b/cat-agent/src/main/webapp/startup.sh @@ -5,7 +5,13 @@ cd `dirname $0` function kill_by_javaclass { local javaclass=$1 -/usr/local/jdk/bin/jps -lvm | awk -v javaclass=$javaclass '$2==javaclass{cmd=sprintf("kill -s TERM %s; sleep 1; kill -9 %s", $1, $1);system(cmd)}' +jps=/usr/local/jdk/bin/jps + +if [ ! -x $jps ];then +jps=jps +fi + +$jps -lvm | awk -v javaclass=$javaclass '$2==javaclass{cmd=sprintf("kill -s TERM %s; sleep 1; kill -9 %s", $1, $1);system(cmd)}' } agent_class="com.dianping.cat.agent.monitor.CatAgent" @@ -35,5 +41,12 @@ java=java fi echo "Starting cat-agent $agent_class $port `pwd`" -nohup $java -Xms128m -Xmx128m -classpath classes:"lib/*" -Dagent=$agent $agent_class $port /agent `pwd` >>/data/applogs/cat/agent-startup.log 2>&1 & + +para="" +if [ "$agent" = "paas" ];then +ip=$(sh -c "ifconfig br0 | awk -v FS='[ \t:]+' 'NR == 2 {print \$4}'") +para="-Dhost.ip=$ip" +fi + +nohup $java -Xms128m -Xmx128m -classpath classes:"lib/*" -Dagent=$agent $para $agent_class $port /agent `pwd` >>/data/applogs/cat/agent-startup.log 2>&1 & echo "Started" \ No newline at end of file diff --git a/cat-broker/pom.xml b/cat-broker/pom.xml index ccc4c6ae7ff7aad2ec17392a83977c41aef4eed7..87c19b4ff3e81b5fd3678c2321f70111031e7e1a 100755 --- a/cat-broker/pom.xml +++ b/cat-broker/pom.xml @@ -1,184 +1,195 @@ - - - com.dianping.cat - parent - 1.0.5 - - 4.0.0 - broker-service - broker-service - war - - - org.unidal.eunit - EunitTestFwk - 1.2.1 - test - - - org.unidal.framework - foundation-service - 2.0.5 - - - com.dianping.cat - cat-core - - - com.google.code.gson - gson - 1.6 - - - org.unidal.webres - WebResServer - 1.2.1 - - - org.unidal.framework - web-framework - 2.0.5 - - - javax.servlet - servlet-api - provided - - - javax.servlet - jstl - 1.2 - - - org.mortbay.jetty - jsp-api-2.1 - 6.1.14 - provided - - - org.mortbay.jetty - jsp-2.1 - provided - - - mysql - mysql-connector-java - runtime - - - org.freemarker - freemarker - 2.3.9 - - - junit - junit - test - - - org.mortbay.jetty - jetty - test - - - org.unidal.framework - test-framework - 2.0.4 - test - - - org.unidal.framework - dal-jdbc - 2.0.4 - - - org.apache.commons - commons-email - 1.1 - - - javax.mail - mail - 1.4.4 - - - com.google.code.javaparser - javaparser - 1.0.8 - - - - - - ${basedir}/src/main/resources - true - - - - - org.unidal.maven.plugins - codegen-maven-plugin - 2.0.9 - - - generate plexus component descriptor - process-classes - - plexus - - - com.dianping.cat.broker.build.ComponentsConfigurator - dev - - - - - - org.apache.maven.plugins - maven-war-plugin - 2.1.1 - - broker-service-${env}-${version} - - - src/main/resources - false - WEB-INF/classes - - - src/main/webapp - false - - WEB-INF/web.xml - - - - - - - org.mortbay.jetty - maven-jetty-plugin - 6.1.26 - - 10 - /cat - src/main/webapp/WEB-INF/web.xml - - - 2281 - 500000 - - - - - - - - war - alpha - utf-8 - + + + com.dianping.cat + parent + 1.0.5 + + 4.0.0 + broker-service + broker-service + war + + + org.unidal.eunit + EunitTestFwk + 1.2.1 + test + + + org.unidal.framework + foundation-service + 2.0.5 + + + com.dianping.cat + cat-core + + + com.google.code.gson + gson + 1.6 + + + org.unidal.webres + WebResServer + 1.2.1 + + + org.unidal.framework + web-framework + 2.0.5 + + + javax.servlet + servlet-api + provided + + + javax.servlet + jstl + 1.2 + + + org.mortbay.jetty + jsp-api-2.1 + 6.1.14 + provided + + + org.mortbay.jetty + jsp-2.1 + provided + + + mysql + mysql-connector-java + runtime + + + org.freemarker + freemarker + 2.3.9 + + + junit + junit + test + + + org.mortbay.jetty + jetty + test + + + org.unidal.framework + test-framework + 2.0.4 + test + + + org.unidal.framework + dal-jdbc + 2.0.4 + + + org.apache.commons + commons-email + 1.1 + + + javax.mail + mail + 1.4.4 + + + com.google.code.javaparser + javaparser + 1.0.8 + + + + + + ${basedir}/src/main/resources + true + + + + + org.unidal.maven.plugins + codegen-maven-plugin + 2.0.9 + + + generate plexus component descriptor + process-classes + + plexus + + + com.dianping.cat.broker.build.ComponentsConfigurator + dev + + + + generate dal model files + generate-sources + + dal-model + + + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + broker-service-${env}-${version} + + + src/main/resources + false + WEB-INF/classes + + + src/main/webapp + false + + WEB-INF/web.xml + + + + + + + org.mortbay.jetty + maven-jetty-plugin + 6.1.26 + + 10 + /cat + src/main/webapp/WEB-INF/web.xml + + + 2281 + 500000 + + + + + + + + war + alpha + utf-8 + diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java new file mode 100644 index 0000000000000000000000000000000000000000..c962f6ef8ac231dc0d8527b2b6c4abc64348abc9 --- /dev/null +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataConsumer.java @@ -0,0 +1,174 @@ +package com.dianping.cat.broker.api.app; + +import java.util.concurrent.ConcurrentHashMap; + +import org.codehaus.plexus.logging.LogEnabled; +import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; +import org.unidal.helper.Threads; +import org.unidal.helper.Threads.Task; +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; +import com.dianping.cat.config.app.AppDataService; +import com.dianping.cat.service.appData.entity.AppData; + +public class AppDataConsumer implements Initializable, LogEnabled { + + public static final long DURATION = 5 * 60 * 1000L; + + @Inject + private AppDataService m_appDataService; + + private AppDataQueue m_appDataQueue; + + private long m_dataLoss; + + private Logger m_logger; + + private ConcurrentHashMap m_tasks; + + @Override + public void enableLogging(Logger logger) { + m_logger = logger; + } + + public void enqueue(AppData appData) { + m_appDataQueue.offer(appData); + } + + public long getDataLoss() { + return m_dataLoss; + } + + @Override + public void initialize() throws InitializationException { + m_dataLoss = 0; + m_appDataQueue = new AppDataQueue(); + m_tasks = new ConcurrentHashMap(); + AppDataDispatcherThread appDataDispatcherThread = new AppDataDispatcherThread(); + BucketThreadController bucketThreadController = new BucketThreadController(); + + Threads.forGroup("Cat").start(bucketThreadController); + Threads.forGroup("Cat").start(appDataDispatcherThread); + } + + public void setDataLoss(long dataLoss) { + m_dataLoss = dataLoss; + } + + private class AppDataDispatcherThread implements Task { + + private static final String NAME = "AppDataDispatcherThread"; + + @Override + public String getName() { + return NAME; + } + + @Override + public void run() { + while (true) { + try { + AppData appData = m_appDataQueue.poll(); + + if (appData != null) { + long timestamp = appData.getTimestamp(); + timestamp -= timestamp % DURATION; + BucketHandler handler = m_tasks.get(new Long(timestamp)); + + if (handler == null || !handler.isActive()) { + m_dataLoss++; + + if (m_dataLoss % 1000 == 0) { + m_logger.error("error timestamp in consumer, loss:" + m_dataLoss); + } + } else { + handler.enqueue(appData); + } + } + } catch (Exception e) { + Cat.logError(e); + } + } + } + + @Override + public void shutdown() { + } + } + + private class BucketThreadController implements Task { + + private void closeLastTask(long currentDuration) { + Long last = new Long(currentDuration - DURATION); + BucketHandler lastBucketHandler = m_tasks.get(last); + + if (lastBucketHandler != null) { + lastBucketHandler.shutdown(); + } + } + + @Override + public String getName() { + return "BucketThreadController"; + } + + private void removeLastLastTask(long currentDuration) { + Long lastLast = new Long(currentDuration - 2 * DURATION); + + m_tasks.remove(lastLast); + } + + @Override + public void run() { + while (true) { + long curTime = System.currentTimeMillis(); + + try { + long currentDuration = curTime - curTime % DURATION; + + removeLastLastTask(currentDuration); + closeLastTask(currentDuration); + startCurrentTask(currentDuration); + startNextTask(currentDuration); + } catch (Exception e) { + Cat.logError(e); + } + + long elapsedTime = System.currentTimeMillis() - curTime; + + try { + Thread.sleep(DURATION - elapsedTime); + } catch (InterruptedException e) { + } + } + } + + @Override + public void shutdown() { + } + + private void startCurrentTask(long currentDuration) { + Long cur = new Long(currentDuration); + if (m_tasks.get(cur) == null) { + BucketHandler curBucketHandler = new BucketHandler(cur, m_appDataService); + Threads.forGroup("Cat").start(curBucketHandler); + + m_tasks.put(cur, curBucketHandler); + } + } + + private void startNextTask(long currentDuration) { + Long next = new Long(currentDuration + DURATION); + if (m_tasks.get(next) == null) { + BucketHandler nextBucketHandler = new BucketHandler(next, m_appDataService); + Threads.forGroup("Cat").start(nextBucketHandler); + + m_tasks.put(next, nextBucketHandler); + } + } + + } +} diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java new file mode 100644 index 0000000000000000000000000000000000000000..c237d69d808672d079ce27a3d6877e3c5697a5c4 --- /dev/null +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/AppDataQueue.java @@ -0,0 +1,26 @@ +package com.dianping.cat.broker.api.app; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +import com.dianping.cat.service.appData.entity.AppData; + +public class AppDataQueue { + private BlockingQueue m_dataQueue = new LinkedBlockingQueue(); + + public boolean offer(AppData appData) { + return m_dataQueue.offer(appData); + } + + public AppData poll() { + AppData appData; + + try { + appData = m_dataQueue.poll(5, TimeUnit.MICROSECONDS); + } catch (InterruptedException e) { + return null; + } + return appData; + } +} diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..491188b51de12068066e06be45a28e1b7e64994c --- /dev/null +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/app/BucketHandler.java @@ -0,0 +1,159 @@ +package com.dianping.cat.broker.api.app; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map.Entry; + +import org.unidal.helper.Threads.Task; + +import com.dianping.cat.Cat; +import com.dianping.cat.config.app.AppDataService; +import com.dianping.cat.service.appData.entity.AppData; + +public class BucketHandler implements Task { + + private static final String FILEDIRECTORY = "/data/appdatas/cat/app/"; + + private static int ONE_DAY = 24 * 60 * 60 * 1000; + + private static int ONE_MINUTE = 60 * 1000; + + private AppDataQueue m_appDataQueue; + + private AppDataService m_appDataService; + + private boolean m_isActive = true; + + private HashMap> m_mergedData; + + private long m_startTime; + + public BucketHandler(long startTime, AppDataService appDataService) { + m_startTime = startTime; + m_appDataQueue = new AppDataQueue(); + m_mergedData = new LinkedHashMap>(); + m_appDataService = appDataService; + } + + private void end() { + for (Entry> outerEntry : m_mergedData.entrySet()) { + for (Entry entry : outerEntry.getValue().entrySet()) { + AppData appData = entry.getValue(); + + saveToDataBase(appData); + } + } + } + + public void enqueue(AppData appData) { + m_appDataQueue.offer(appData); + } + + @Override + public String getName() { + return "BucketHandler"; + } + + public boolean isActive() { + synchronized (this) { + return m_isActive; + } + } + + private void processEntity(AppData appData) { + Integer command = appData.getCommand(); + String key = m_startTime + ":" + appData.getCity() + ":" + appData.getOperator() + ":" + appData.getConnectType() + + ":" + appData.getVersion() + ":" + appData.getNetwork() + ":" + appData.getCode() + ":" + + appData.getPlatform(); + HashMap secondMap = m_mergedData.get(command); + + if (secondMap == null) { + secondMap = new LinkedHashMap(); + + secondMap.put(key, appData); + m_mergedData.put(command, secondMap); + } else { + AppData mergedAppData = secondMap.get(key); + + if (mergedAppData == null) { + secondMap.put(key, appData); + } else { + mergedAppData.setCount(mergedAppData.getCount() + 1); + mergedAppData.setRequestByte(mergedAppData.getRequestByte() + appData.getRequestByte()); + mergedAppData.setResponseByte(mergedAppData.getResponseByte() + appData.getResponseByte()); + mergedAppData.setResponseTime(mergedAppData.getResponseTime() + appData.getResponseTime()); + } + } + } + + @Override + public void run() { + while (isActive()) { + AppData appData = m_appDataQueue.poll(); + + if (appData != null) { + processEntity(appData); + } + } + + while (true) { + AppData appData = m_appDataQueue.poll(); + + if (appData != null) { + processEntity(appData); + } else { + break; + } + } + + end(); + } + + private void saveToDataBase(AppData appData) { + int minute = (int) (m_startTime % ONE_DAY / ONE_MINUTE); + Date period = new Date(m_startTime - minute * ONE_MINUTE); + + try { + m_appDataService.insert(period, minute, appData.getCommand(), appData.getCity(), appData.getOperator(), + appData.getNetwork(), appData.getVersion(), appData.getConnectType(), appData.getCode(), + appData.getPlatform(), appData.getCount(), appData.getResponseTime(), appData.getResponseByte(), + appData.getResponseByte()); + } catch (Exception e) { + Cat.logError(e); + + saveToFile(appData); + } + } + + private void saveToFile(AppData appData) { + Date date = new Date(); + SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); + String dateStr = formater.format(date); + String filePath = FILEDIRECTORY + dateStr; + + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(filePath)); + String content = appData.getTimestamp() + "\t" + appData.getCity() + "\t" + appData.getOperator() + "\t" + + appData.getNetwork() + "\t" + appData.getVersion() + "\t" + appData.getConnectType() + "\t" + + appData.getCommand() + "\t" + appData.getCode() + "\t" + appData.getPlatform() + "\t" + + appData.getRequestByte() + "\t" + appData.getResponseByte() + "\t" + appData.getResponseTime() + "\n"; + + writer.append(content); + writer.close(); + } catch (Exception e) { + Cat.logError(e); + } + } + + @Override + public void shutdown() { + synchronized (this) { + m_isActive = false; + } + } + +} diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java index 70a64368230d0fe2e19b899ce3999ef712123671..8f71344d80d31119a0f5f8f76c41ca965b22a413 100644 --- a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/IpService.java @@ -13,14 +13,14 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationExce import com.dianping.cat.Cat; public class IpService implements Initializable { - private Map m_areas; - - private Map m_corps; - private int[] m_areaIds; + private Map m_areas; + private int[] m_corpIds; + private Map m_corps; + private long[] m_ends; private long[] m_starts; @@ -176,12 +176,12 @@ public class IpService implements Initializable { public static class Area { private Integer m_areaId; + private String m_city; + private String m_nation; private String m_province; - private String m_city; - public Integer getAreaId() { return m_areaId; } @@ -240,13 +240,13 @@ public class IpService implements Initializable { } public static class IpInfo { - private String m_nation; - - private String m_province; + private String m_channel; private String m_city; - private String m_channel; + private String m_nation; + + private String m_province; public String getChannel() { return m_channel; diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java index 8bccdb27ca0c8782b94e801f385c7500ea0f30d7..119562a8a7d902384a588c524d443d1b091e5979 100644 --- a/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java +++ b/cat-broker/src/main/java/com/dianping/cat/broker/api/page/batch/Handler.java @@ -1,6 +1,7 @@ package com.dianping.cat.broker.api.page.batch; import java.io.IOException; +import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -15,21 +16,36 @@ import org.unidal.web.mvc.annotation.InboundActionMeta; import org.unidal.web.mvc.annotation.OutboundActionMeta; import org.unidal.web.mvc.annotation.PayloadMeta; +import com.dianping.cat.broker.api.app.AppDataConsumer; import com.dianping.cat.broker.api.page.Constrants; +import com.dianping.cat.broker.api.page.IpService; +import com.dianping.cat.broker.api.page.IpService.IpInfo; import com.dianping.cat.broker.api.page.MonitorEntity; import com.dianping.cat.broker.api.page.MonitorManager; import com.dianping.cat.broker.api.page.RequestUtils; +import com.dianping.cat.config.app.AppConfigManager; +import com.dianping.cat.configuration.app.entity.Item; +import com.dianping.cat.service.appData.entity.AppData; public class Handler implements PageHandler, LogEnabled { @Inject - private MonitorManager m_manager; + private AppDataConsumer m_appDataConsumer; @Inject - private RequestUtils m_util; + private IpService m_ipService; + + @Inject + private AppConfigManager m_appConfigManager; private Logger m_logger; + @Inject + private MonitorManager m_manager; + + @Inject + private RequestUtils m_util; + @Override public void enableLogging(Logger logger) { m_logger = logger; @@ -49,7 +65,18 @@ public class Handler implements PageHandler, LogEnabled { HttpServletRequest request = ctx.getHttpServletRequest(); HttpServletResponse response = ctx.getHttpServletResponse(); String userIp = m_util.getRemoteIp(request); + String version = payload.getVersion(); + if (version.equals("1")) { + processVersion1(payload, request, userIp); + } else if (version.equals("2")) { + processVersion2(payload, request, userIp); + } + + response.getWriter().write("OK"); + } + + private void processVersion1(Payload payload, HttpServletRequest request, String userIp) { if (userIp != null) { try { String content = payload.getContent(); @@ -88,7 +115,69 @@ public class Handler implements PageHandler, LogEnabled { } else { m_logger.info("unknown http request, x-forwarded-for:" + request.getHeader("x-forwarded-for")); } - response.getWriter().write("OK"); + } + + private void processVersion2(Payload payload, HttpServletRequest request, String userIp) { + if (userIp != null) { + String content = payload.getContent(); + String records[] = content.split("\n"); + + IpInfo ipInfo = m_ipService.findIpInfoByString(userIp); + String cityStr = ipInfo.getProvince(); + String operatorStr = ipInfo.getChannel(); + int cityId = 0, operatorId = 0; + List cityList = m_appConfigManager.queryConfigItem(AppConfigManager.CITY); + List operatorList = m_appConfigManager.queryConfigItem(AppConfigManager.OPERATOR); + + for (Item item : cityList) { + if (item.getName().equals(cityStr)) { + cityId = item.getId(); + break; + } + } + for (Item item : operatorList) { + if (item.getName().equals(operatorStr)) { + operatorId = item.getId(); + break; + } + } + + for (String record : records) { + String items[] = record.split("\t"); + + if (items.length != 10) { + continue; + } + + AppData appData = new AppData(); + + try { + appData.setTimestamp(Long.parseLong(items[0])); + Integer command = m_appConfigManager.getCommands().get(items[2]); + if (command == null) { + continue; + } + appData.setCommand(command); + appData.setNetwork(Integer.parseInt(items[2])); + appData.setVersion(Integer.parseInt(items[3])); + appData.setConnectType(Integer.parseInt(items[4])); + appData.setCode(Integer.parseInt(items[5])); + appData.setPlatform(Integer.parseInt(items[6])); + appData.setRequestByte(Integer.parseInt(items[7])); + appData.setResponseByte(Integer.parseInt(items[8])); + appData.setResponseTime(Integer.parseInt(items[9])); + appData.setCity(cityId); + appData.setOperator(operatorId); + appData.setCount(1); + } catch (Exception e) { + m_logger.error(e.getMessage(), e); + } + + m_appDataConsumer.enqueue(appData); + } + } else { + m_logger.info("unknown http request, x-forwarded-for:" + request.getHeader("x-forwarded-for")); + } } private boolean validate(String errorCode, String httpStatus) { diff --git a/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java b/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java index 437ea84aaca8619772a790a19c19a9a24ce1e10c..2ba47257e641edea8e3314711b346645135dde6e 100644 --- a/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java +++ b/cat-broker/src/main/java/com/dianping/cat/broker/build/ComponentsConfigurator.java @@ -4,12 +4,17 @@ import java.util.ArrayList; import java.util.List; import org.unidal.dal.jdbc.datasource.JdbcDataSourceDescriptorManager; +import org.unidal.dal.jdbc.mapping.TableProvider; import org.unidal.lookup.configuration.AbstractResourceConfigurator; import org.unidal.lookup.configuration.Component; +import com.dianping.cat.broker.api.app.AppDataConsumer; import com.dianping.cat.broker.api.page.IpService; import com.dianping.cat.broker.api.page.MonitorManager; import com.dianping.cat.broker.api.page.RequestUtils; +import com.dianping.cat.build.AppDatabaseConfigurator; +import com.dianping.cat.config.app.AppDataCommandTableProvider; +import com.dianping.cat.config.app.AppDataService; import com.dianping.cat.config.url.UrlPatternConfigManager; public class ComponentsConfigurator extends AbstractResourceConfigurator { @@ -20,11 +25,17 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(IpService.class)); all.add(C(RequestUtils.class)); all.add(C(MonitorManager.class).req(UrlPatternConfigManager.class, IpService.class)); - + + all.add(C(AppDataConsumer.class).req(AppDataService.class)); + + all.add(C(TableProvider.class,"app-data-command",AppDataCommandTableProvider.class)); + // database all.add(C(JdbcDataSourceDescriptorManager.class) // .config(E("datasourceFile").value("/data/appdatas/cat/datasources.xml"))); + all.addAll(new AppDatabaseConfigurator().defineComponents()); + // Please keep it as last all.addAll(new WebComponentConfigurator().defineComponents()); diff --git a/cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml b/cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d76e276cc77c0a436b7fce8848f690244c4a6f2 --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/dal/model/appData-codegen.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml b/cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..51face176b68c525165569b8360cb7cdbcea75f1 --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/dal/model/appData-manifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml b/cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml new file mode 100644 index 0000000000000000000000000000000000000000..915b4b68027b29fd131e0d244130d3d86d077926 --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/dal/model/appData-model.xml @@ -0,0 +1,3 @@ + + + diff --git a/cat-broker/src/main/resources/META-INF/plexus/components.xml b/cat-broker/src/main/resources/META-INF/plexus/components.xml index 6c882c1a063d287aab9bfe5ffd5235809eb4c2ff..16aa051cb43679d3d677be80cbb6eb9f84ce22e5 100644 --- a/cat-broker/src/main/resources/META-INF/plexus/components.xml +++ b/cat-broker/src/main/resources/META-INF/plexus/components.xml @@ -20,6 +20,20 @@ + + com.dianping.cat.broker.api.app.AppDataConsumer + com.dianping.cat.broker.api.app.AppDataConsumer + + + com.dianping.cat.config.app.AppDataService + + + + + org.unidal.dal.jdbc.mapping.TableProvider + app-data-command + com.dianping.cat.config.app.AppDataCommandTableProvider + org.unidal.dal.jdbc.datasource.JdbcDataSourceDescriptorManager org.unidal.dal.jdbc.datasource.JdbcDataSourceDescriptorManager @@ -27,6 +41,25 @@ /data/appdatas/cat/datasources.xml + + org.unidal.dal.jdbc.mapping.TableProvider + app-data-command + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + app-data-command + app_data_command + app + + + + com.dianping.cat.app.AppDataCommandDao + com.dianping.cat.app.AppDataCommandDao + + + org.unidal.dal.jdbc.QueryEngine + + + org.unidal.web.mvc.model.ModuleRegistry org.unidal.web.mvc.model.ModuleRegistry @@ -97,6 +130,15 @@ com.dianping.cat.broker.api.page.batch.Handler com.dianping.cat.broker.api.page.batch.Handler + + com.dianping.cat.broker.api.app.AppDataConsumer + + + com.dianping.cat.broker.api.page.IpService + + + com.dianping.cat.config.app.AppConfigManager + com.dianping.cat.broker.api.page.MonitorManager @@ -105,6 +147,42 @@ + + com.dianping.cat.broker.api.app.AppDataConsumer + com.dianping.cat.broker.api.app.AppDataConsumer + + + com.dianping.cat.config.app.AppDataService + + + + + com.dianping.cat.config.app.AppDataService + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.app.AppDataCommandDao + + + + + com.dianping.cat.app.AppDataCommandDao + com.dianping.cat.app.AppDataCommandDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.config.app.AppConfigManager + com.dianping.cat.config.app.AppConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + com.dianping.cat.broker.api.page.js.Handler com.dianping.cat.broker.api.page.js.Handler diff --git a/cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml b/cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d84f298f1be5bab7c9d2d72ef96efc412380acf --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/wizard/model/manifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml b/cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..b93c1a32953ff8a2ef1a59ada9671d1a5a07d66f --- /dev/null +++ b/cat-broker/src/main/resources/META-INF/wizard/model/wizard.xml @@ -0,0 +1,6 @@ + + + + app + + diff --git a/cat-broker/src/main/webapp/jsp/api/app.jsp b/cat-broker/src/main/webapp/jsp/api/app.jsp new file mode 100644 index 0000000000000000000000000000000000000000..f2c86701b9294fa1932b978cd9474c1eb61648a4 --- /dev/null +++ b/cat-broker/src/main/webapp/jsp/api/app.jsp @@ -0,0 +1,5 @@ +<%@ page contentType="text/html; charset=utf-8" %> + + + +View of app page under api \ No newline at end of file diff --git a/cat-broker/src/test/java/com/dianping/cat/broker/AppTest.java b/cat-broker/src/test/java/com/dianping/cat/broker/AppTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d09a6c17ae2d85e9d68f28bedd4a025fd8634216 --- /dev/null +++ b/cat-broker/src/test/java/com/dianping/cat/broker/AppTest.java @@ -0,0 +1,51 @@ +package com.dianping.cat.broker; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; + +public class AppTest { + public static void main(String[] args) { + List urls = new ArrayList(); + String url_pre = "http://localhost:2765/broker-service/api/batch"; + long timestamp = System.currentTimeMillis(); + for (int i = 0; i < 10; i++) { + urls.add(url_pre + "?v=2&c=" + timestamp + URLEncoder.encode("\tshop.bin\t1\t1\t1\t1\t1\t1\t1\t1\n")); + } + + for (String url : urls) { + System.out.println(url); + sendGet(url); + } + } + + public static String sendGet(String url) { + String result = ""; + BufferedReader in = null; + try { + URL realUrl = new URL(url); + URLConnection connection = realUrl.openConnection(); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception e2) { + e2.printStackTrace(); + } + } + return result; + } +} diff --git a/cat-core/src/main/java/com/dianping/cat/build/AppDatabaseConfigurator.java b/cat-core/src/main/java/com/dianping/cat/build/AppDatabaseConfigurator.java index 4f8dc70d15d78495578d2745ad05df6b4d9fa7a1..c3932e3fdae657f98cf7024b23dc24c4741a7370 100644 --- a/cat-core/src/main/java/com/dianping/cat/build/AppDatabaseConfigurator.java +++ b/cat-core/src/main/java/com/dianping/cat/build/AppDatabaseConfigurator.java @@ -6,7 +6,7 @@ import java.util.List; import org.unidal.dal.jdbc.configuration.AbstractJdbcResourceConfigurator; import org.unidal.lookup.configuration.Component; -final class AppDatabaseConfigurator extends AbstractJdbcResourceConfigurator { +final public class AppDatabaseConfigurator extends AbstractJdbcResourceConfigurator { @Override public List defineComponents() { List all = new ArrayList(); diff --git a/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index 23f71c1ad24c8157f6d972a36e8557c37f0ff0f9..78d869e591b27870ffcef3a5e8ec48d6f51623ac 100644 --- a/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -12,10 +12,12 @@ import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.analysis.DefaultMessageAnalyzerManager; import com.dianping.cat.analysis.MessageAnalyzerManager; +import com.dianping.cat.app.AppDataCommandDao; import com.dianping.cat.config.aggregation.AggregationConfigManager; import com.dianping.cat.config.aggregation.AggregationHandler; import com.dianping.cat.config.aggregation.DefaultAggregationHandler; import com.dianping.cat.config.app.AppConfigManager; +import com.dianping.cat.config.app.AppDataService; import com.dianping.cat.config.url.DefaultUrlPatternHandler; import com.dianping.cat.config.url.UrlPatternConfigManager; import com.dianping.cat.config.url.UrlPatternHandler; @@ -61,9 +63,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(AggregationHandler.class, DefaultAggregationHandler.class)); all.add(C(AggregationConfigManager.class).req(AggregationHandler.class, ConfigDao.class)); - - all.add(C(AppConfigManager.class).req( ConfigDao.class)); + all.add(C(AppConfigManager.class).req(ConfigDao.class)); + + all.add(C(AppDataService.class).req(AppConfigManager.class, AppDataCommandDao.class)); + all.add(C(UrlPatternHandler.class, DefaultUrlPatternHandler.class)); all.add(C(UrlPatternConfigManager.class).req(ConfigDao.class, UrlPatternHandler.class)); @@ -75,7 +79,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { .req(ServerConfigManager.class, MessagePathBuilder.class, ServerStatisticManager.class)); all.add(C(Module.class, CatCoreModule.ID, CatCoreModule.class)); - + all.addAll(new CatCoreDatabaseConfigurator().defineComponents()); all.addAll(new CodecComponentConfigurator().defineComponents()); all.addAll(new StorageComponentConfigurator().defineComponents()); diff --git a/cat-core/src/main/java/com/dianping/cat/config/app/AppConfigManager.java b/cat-core/src/main/java/com/dianping/cat/config/app/AppConfigManager.java index 6581470ea8737aeb1242396e067f0ce18dad2986..69b317c95d1b38ded7820f9d5a4a8c4701af8b8f 100644 --- a/cat-core/src/main/java/com/dianping/cat/config/app/AppConfigManager.java +++ b/cat-core/src/main/java/com/dianping/cat/config/app/AppConfigManager.java @@ -3,6 +3,7 @@ package com.dianping.cat.config.app; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -106,7 +107,7 @@ public class AppConfigManager implements Initializable { if (c != null) { return c.getCodes().values(); } else { - return null; + return Collections.emptySet(); } } @@ -120,14 +121,13 @@ public class AppConfigManager implements Initializable { if (config != null) { return new ArrayList(config.getItems().values()); } else { - System.out.println(name); return new ArrayList(); } } - + public Map getCommands() { - return m_commands; - } + return m_commands; + } private void refreshCommand() { Collection commands = m_config.getCommands().values(); diff --git a/cat-core/src/main/java/com/dianping/cat/config/app/AppDataService.java b/cat-core/src/main/java/com/dianping/cat/config/app/AppDataService.java index 8571ef71a4a5d2c9ab232f8b772c55859b3eeb0f..e4f7d9cf53ed5f717fead605af5adcf0ef3350f2 100644 --- a/cat-core/src/main/java/com/dianping/cat/config/app/AppDataService.java +++ b/cat-core/src/main/java/com/dianping/cat/config/app/AppDataService.java @@ -1,7 +1,14 @@ package com.dianping.cat.config.app; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; +import java.util.LinkedHashMap; +import java.util.LinkedList; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import org.unidal.dal.jdbc.DalException; import org.unidal.lookup.annotation.Inject; @@ -10,16 +17,49 @@ import com.dianping.cat.Cat; import com.dianping.cat.app.AppDataCommand; import com.dianping.cat.app.AppDataCommandDao; import com.dianping.cat.app.AppDataCommandEntity; +import com.dianping.cat.configuration.app.entity.Code; public class AppDataService { @Inject private AppDataCommandDao m_dao; - public void insert() { + @Inject + private AppConfigManager m_appConfigManager; + + public static final String SUCCESS_RATIO = "successRatio"; + + public static final String REQUEST_COUNT = "requestCount"; + + public static final String DELAY_AVG = "delayAvg"; + + private static final int MAX_SIZE = 288; + + public void insert(Date period, int minute, int commandId, int city, int operator, int network, int appVersion, + int connectType, int code, int platform, int count, int responseSumTime, int requestPackage, + int responsePackage) throws DalException { + AppDataCommand proto = new AppDataCommand(); + + proto.setPeriod(period); + proto.setMinuteOrder(minute); + proto.setCommandId(commandId); + proto.setCity(city); + proto.setOperator(operator); + proto.setNetwork(network); + proto.setAppVersion(appVersion); + proto.setConnnectType(connectType); + proto.setCode(code); + proto.setPlatform(platform); + proto.setAccessNumber(count); + proto.setResponseSumTime(responseSumTime); + proto.setRequestPackage(requestPackage); + proto.setResponsePackage(responsePackage); + proto.setCreationDate(new Date()); + + m_dao.insertData(proto); } - public void queryAvg(QueryEntity entity) { + public Map queryValue(QueryEntity entity, String type) { int commandId = entity.getCommand(); Date period = entity.getDate(); int city = entity.getCity(); @@ -29,60 +69,142 @@ public class AppDataService { int connnectType = entity.getChannel(); int code = entity.getCode(); int platform = entity.getPlatfrom(); + List datas; try { - List datas = m_dao.findData(commandId, period, city, operator, network, appVersion, - connnectType, code, platform, AppDataCommandEntity.READSET_DATA); - - for (AppDataCommand data : datas) { - int minuteOrder = data.getMinuteOrder(); - long count=data.getAccessNumberSum(); - long sum = data.getResponseSumTimeSum(); - - double avg =sum/count; + datas = m_dao.findData(commandId, period, city, operator, network, appVersion, connnectType, code, platform, + AppDataCommandEntity.READSET_DATA); + + Collections.sort(datas, new Comparator() { + @Override + public int compare(AppDataCommand o1, AppDataCommand o2) { + return (int) (o2.getMinuteOrder() - o1.getMinuteOrder()); + } + }); + + int n = calculateSize(entity.getDate().getTime()); + + if (SUCCESS_RATIO.equals(type)) { + return querySuccessRatio(datas, n); + } else if (REQUEST_COUNT.equals(type)) { + return queryRequestCount(datas, n); + } else if (DELAY_AVG.equals(type)) { + return queryDelayAvg(datas, n); } } catch (DalException e) { Cat.logError(e); } + return new LinkedHashMap(); } - public void queryCount(QueryEntity entity) { - } + private Map> convert2AppDataCommandMap(List fromDatas) { + Map> dataMap = new LinkedHashMap>(); - public void querySuccessRate(QueryEntity entity) { - - } + for (AppDataCommand from : fromDatas) { + int minute = from.getMinuteOrder(); + List data = dataMap.get(minute); - public static class Statistics { - private Date m_period; + if (data == null) { + data = new LinkedList(); - private long m_count; + dataMap.put(minute, data); + } + data.add(from); + } + return dataMap; + } - private double m_avg; + public Map querySuccessRatio(List datas, int n) { + Map values = new LinkedHashMap(); + double[] value = new double[n]; + int i = 0; - public Date getPeriod() { - return m_period; + try { + Map> dataMap = convert2AppDataCommandMap(datas); + int size = dataMap.size(); + + if (size <= n) { + for (Entry> entry : dataMap.entrySet()) { + long success = 0; + long sum = 0; + + for (AppDataCommand data : entry.getValue()) { + long number = data.getAccessNumberSum(); + + if (isSuccessStatus(data)) { + success += number; + } + sum += number; + } + value[i++] = (double) success / sum; + } + } else { + Cat.logError(new RuntimeException("query database minute number " + size + " lagger than expected size " + + n)); + } + } catch (Exception e) { + Cat.logError(e); } - public void setPeriod(Date period) { - m_period = period; - } + values.put(DELAY_AVG, value); + return values; + } - public long getCount() { - return m_count; - } + private boolean isSuccessStatus(AppDataCommand data) { + int code = data.getCode(); + Collection codes = m_appConfigManager.queryCodeByCommand(data.getCommandId()); - public void setCount(long count) { - m_count = count; + for (Code c : codes) { + if (c.getId() == code) { + return (c.getStatus() == 0); + } } + return false; + } + + public Map queryRequestCount(List datas, int n) { + Map values = new LinkedHashMap(); + double[] value = new double[n]; + int i = 0; - public double getAvg() { - return m_avg; + for (AppDataCommand data : datas) { + long count = data.getAccessNumberSum(); + + if (i < n) { + value[i++] = count; + } } + values.put(DELAY_AVG, value); + return values; + } - public void setAvg(double avg) { - m_avg = avg; + public Map queryDelayAvg(List datas, int n) { + Map values = new LinkedHashMap(); + double[] value = new double[n]; + int i = 0; + + for (AppDataCommand data : datas) { + long count = data.getAccessNumberSum(); + long sum = data.getResponseSumTimeSum(); + + double avg = sum / count; + if (i < n) { + value[i++] = avg; + } } + values.put(DELAY_AVG, value); + return values; } + private int calculateSize(long startTime) { + int n = MAX_SIZE; + int oneDay = 24 * 3600 * 1000; + + if (startTime + oneDay > System.currentTimeMillis()) { + long current = System.currentTimeMillis(); + long endTime = current - current % 300000; + n = (int) (endTime - startTime) / 300000; + } + return n; + } } diff --git a/cat-core/src/main/resources/META-INF/plexus/components.xml b/cat-core/src/main/resources/META-INF/plexus/components.xml index 61b0f6932eaf7783542c23115fcd68c3db87b71b..0993e27f1c52a4d2efe66d12abc6c873a78a3e25 100644 --- a/cat-core/src/main/resources/META-INF/plexus/components.xml +++ b/cat-core/src/main/resources/META-INF/plexus/components.xml @@ -88,6 +88,18 @@ + + com.dianping.cat.config.app.AppDataService + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.config.app.AppConfigManager + + + com.dianping.cat.app.AppDataCommandDao + + + com.dianping.cat.config.url.UrlPatternHandler com.dianping.cat.config.url.DefaultUrlPatternHandler diff --git a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index 5ad976d220b747811fa91d1f3738d18e7eca3360..83c7c0d8e8f5d7debefe6642168d913d1d28d529 100755 --- a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -13,6 +13,7 @@ import org.unidal.lookup.configuration.Component; import com.dianping.cat.CatHomeModule; import com.dianping.cat.ServerConfigManager; +import com.dianping.cat.config.app.AppDataService; import com.dianping.cat.config.app.AppDataCommandTableProvider; import com.dianping.cat.consumer.dependency.DependencyAnalyzer; import com.dianping.cat.consumer.metric.MetricAnalyzer; @@ -38,6 +39,7 @@ import com.dianping.cat.report.graph.GraphBuilder; import com.dianping.cat.report.graph.ValueTranslater; import com.dianping.cat.report.page.JsonBuilder; import com.dianping.cat.report.page.PayloadNormalizer; +import com.dianping.cat.report.page.app.graph.AppGraphCreator; import com.dianping.cat.report.page.cdn.graph.CdnGraphCreator; import com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder; import com.dianping.cat.report.page.dependency.graph.TopologyGraphConfigManager; @@ -237,6 +239,69 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { MetricDataFetcher.class).req(BaselineService.class, MetricConfigManager.class, ProductLineConfigManager.class, MetricGroupConfigManager.class, AlertInfo.class)); + all.add(C(AppGraphCreator.class).req(AppDataService.class, CachedMetricReportService.class, DataExtractor.class, + MetricDataFetcher.class).req(BaselineService.class, MetricConfigManager.class, + ProductLineConfigManager.class, MetricGroupConfigManager.class, AlertInfo.class)); + // report serivce + all.addAll(new ReportServiceComponentConfigurator().defineComponents()); + // task + all.addAll(new TaskComponentConfigurator().defineComponents()); + + // model service + all.addAll(new ServiceComponentConfigurator().defineComponents()); + + all.add(C(RemoteMetricReportService.class).req(ServerConfigManager.class)); + + all.add(C(BusinessAlertConfig.class).req(AlertConfigManager.class)); + + all.add(C(NetworkAlertConfig.class).req(AlertConfigManager.class)); + + all.add(C(SystemAlertConfig.class).req(AlertConfigManager.class)); + + all.add(C(ExceptionAlertConfig.class).req(AlertConfigManager.class)); + + all.add(C(AlertInfo.class)); + + all.add(C(DefaultMailImpl.class).req(ServerConfigManager.class)); + + all.add(C(DataChecker.class, DefaultDataChecker.class)); + + all.add(C(BusinessAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class, + BaselineService.class, MailSMS.class, BusinessAlertConfig.class, AlertInfo.class, AlertDao.class)// + .req(RemoteMetricReportService.class, BusinessRuleConfigManager.class, DataChecker.class)); + + all.add(C(NetworkAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class, + BaselineService.class, MailSMS.class, NetworkAlertConfig.class, AlertInfo.class, AlertDao.class)// + .req(RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class)); + + all.add(C(SystemAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class, + BaselineService.class, MailSMS.class, SystemAlertConfig.class, AlertInfo.class, AlertDao.class)// + .req(RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class)); + + all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class)); + + all.add(C(ExceptionAlert.class).req(ProjectDao.class, ExceptionAlertConfig.class, MailSMS.class, + ExceptionConfigManager.class, AlertExceptionBuilder.class, AlertDao.class).req(ModelService.class, + TopAnalyzer.ID)); + + all.add(C(NetGraphConfigManager.class).req(ConfigDao.class)); + + // database + all.add(C(JdbcDataSourceDescriptorManager.class) // + .config(E("datasourceFile").value("/data/appdatas/cat/datasources.xml"))); + all.addAll(new CatDatabaseConfigurator().defineComponents()); + all.addAll(new UserDatabaseConfigurator().defineComponents()); + + // update project database + all.add(C(ProjectUpdateTask.class)// + .req(ProjectDao.class, HostinfoDao.class)); + + // web, please keep it last + all.addAll(new WebComponentConfigurator().defineComponents()); + + // for alarm module + all.addAll(new AlarmComponentConfigurator().defineComponents()); + return all; } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/chart/AbstractGraphCreator.java b/cat-home/src/main/java/com/dianping/cat/report/chart/AbstractGraphCreator.java index ba93196a44309605dd2268bed5870b497ac5d0d7..83f9875d3046faeaceb308dc502b5d41dfea6c9a 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/chart/AbstractGraphCreator.java +++ b/cat-home/src/main/java/com/dianping/cat/report/chart/AbstractGraphCreator.java @@ -230,7 +230,7 @@ public abstract class AbstractGraphCreator implements LogEnabled { } } - protected Map buildNoneData(Date startDate, Date endDate, int step) { + public Map buildNoneData(Date startDate, Date endDate, int step) { int n = 0; long current = System.currentTimeMillis(); diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/app/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/app/Handler.java index de194ffc8dcbd40451541dbed33a3ce3cdacdf60..d38061896f8ef61394cbd623152dd688e4938eb8 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/app/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/app/Handler.java @@ -1,18 +1,24 @@ package com.dianping.cat.report.page.app; import java.io.IOException; +import java.util.Iterator; +import java.util.Map; import javax.servlet.ServletException; -import com.dianping.cat.config.app.AppConfigManager; -import com.dianping.cat.config.app.QueryEntity; -import com.dianping.cat.report.ReportPage; +import org.codehaus.plexus.util.StringUtils; import org.unidal.lookup.annotation.Inject; import org.unidal.web.mvc.PageHandler; import org.unidal.web.mvc.annotation.InboundActionMeta; import org.unidal.web.mvc.annotation.OutboundActionMeta; import org.unidal.web.mvc.annotation.PayloadMeta; +import com.dianping.cat.config.app.AppConfigManager; +import com.dianping.cat.config.app.QueryEntity; +import com.dianping.cat.report.ReportPage; +import com.dianping.cat.report.page.LineChart; +import com.dianping.cat.report.page.app.graph.AppGraphCreator; + public class Handler implements PageHandler { @Inject private JspViewer m_jspViewer; @@ -20,6 +26,9 @@ public class Handler implements PageHandler { @Inject private AppConfigManager m_manager; + @Inject + private AppGraphCreator m_appGraphCreator; + @Override @PayloadMeta(Payload.class) @InboundActionMeta(name = "app") @@ -45,14 +54,36 @@ public class Handler implements PageHandler { QueryEntity entity1 = payload.getQueryEntity1(); QueryEntity entity2 = payload.getQueryEntity2(); + String type = payload.getType(); + + if (StringUtils.isEmpty(type)) { + type = "successRatio"; + } + + LineChart lineCharts = new LineChart(); if (entity1 != null) { - System.out.println(entity1.toString()); + LineChart lineChart1 = m_appGraphCreator.buildLineChart(entity1, type); + Iterator> idata = lineChart1.getDatas().iterator(); + + if (lineChart1.getDatas().size() == 1) { + lineCharts.add("查询1", idata.next()); + } } + if (entity2 != null) { - System.out.println(entity2.toString()); + LineChart lineChart2 = m_appGraphCreator.buildLineChart(entity2, type); + Iterator> idata = lineChart2.getDatas().iterator(); + + if (lineChart2.getDatas().size() == 1) { + lineCharts.add("查询2", idata.next()); + } } + lineCharts.setId("app"); + lineCharts.setHtmlTitle(type); + model.setLineChart(lineCharts); + if (!ctx.isProcessStopped()) { m_jspViewer.view(ctx, model); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/app/Model.java b/cat-home/src/main/java/com/dianping/cat/report/page/app/Model.java index 6b2c8774fd8c10844349a1894661007097ba9080..a29a4a14d0a4064d505529a3d66c759571145ee7 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/app/Model.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/app/Model.java @@ -6,14 +6,20 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.unidal.web.mvc.view.annotation.EntityMeta; + import com.dianping.cat.configuration.app.entity.Code; import com.dianping.cat.configuration.app.entity.Command; import com.dianping.cat.configuration.app.entity.Item; import com.dianping.cat.report.page.AbstractReportModel; import com.dianping.cat.report.page.JsonBuilder; +import com.dianping.cat.report.page.LineChart; public class Model extends AbstractReportModel { + @EntityMeta + private LineChart m_lineChart; + private List m_cities; private List m_versions; @@ -117,4 +123,12 @@ public class Model extends AbstractReportModel { public void setVersions(List versions) { m_versions = versions; } + + public LineChart getLineChart() { + return m_lineChart; + } + + public void setLineChart(LineChart lineChart) { + m_lineChart = lineChart; + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/app/Payload.java b/cat-home/src/main/java/com/dianping/cat/report/page/app/Payload.java index 0d5b24512feab1001ea279a535cb87f90188d0fb..1e8cb9bbf0305fb7939331b2d75ad9a1dd8082b3 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/app/Payload.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/app/Payload.java @@ -19,6 +19,9 @@ public class Payload extends AbstractReportPayload { @FieldMeta("query2") private String m_query2; + @FieldMeta("type") + private String m_type = "successRatio"; + public Payload() { super(ReportPage.APP); } @@ -74,6 +77,14 @@ public class Payload extends AbstractReportPayload { m_query2 = query2; } + public void setType(String type) { + m_type = type; + } + + public String getType() { + return m_type; + } + @Override public void validate(ActionContext ctx) { if (m_action == null) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/app/graph/AppGraphCreator.java b/cat-home/src/main/java/com/dianping/cat/report/page/app/graph/AppGraphCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..9f2efc0150dd1bd1475a4c47832eb2e94b97fc73 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/app/graph/AppGraphCreator.java @@ -0,0 +1,114 @@ +package com.dianping.cat.report.page.app.graph; + +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; + +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.config.app.AppDataService; +import com.dianping.cat.config.app.QueryEntity; +import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.report.chart.AbstractGraphCreator; +import com.dianping.cat.report.page.LineChart; + +public class AppGraphCreator extends AbstractGraphCreator { + + @Inject + private AppDataService m_appDataService; + + public LineChart buildLineChart(QueryEntity queryEntity, String type) { + Map values = prepareAllData(queryEntity, type); + + long startTime = queryEntity.getDate().getTime(); + long endTime = startTime + TimeUtil.ONE_DAY; + Date endDate = new Date(endTime); + Date startDate = new Date(startTime); + + return buildChartData(values, startDate, endDate); + } + + private Map prepareAllData(QueryEntity queryEntity, String type) { + Map value = new AppDataServiceMock().queryValue(queryEntity, type); + + return value; + } + + public LineChart buildChartData(final Map datas, Date startDate, Date endDate) { + LineChart lineChart = new LineChart(); + + for (Entry entry : datas.entrySet()) { + String key = entry.getKey(); + + lineChart.setId(startDate.toString()); + lineChart.setHtmlTitle(key); + + Map all = convertToMap(datas.get(key), startDate, 5); + + lineChart.add(startDate.toString(), all); + } + return lineChart; + } + + protected Map convertToMap(double[] data, Date start, int step) { + Map map = new LinkedHashMap(); + int length = data.length; + long startTime = start.getTime(); + long time = startTime; + int i = 0; + + for (; i < length; i++) { + time += step * TimeUtil.ONE_MINUTE; + map.put(time, data[i]); + } + + return map; + } + + public class AppDataServiceMock extends AppDataService { + public Map queryValue(QueryEntity entity, String type) { + if (SUCCESS_RATIO.equals(type)) { + return querySuccessRatio(entity); + } else if (REQUEST_COUNT.equals(type)) { + return queryRequestCount(entity); + } else if (DELAY_AVG.equals(type)) { + return queryDelayAvg(entity); + } else { + return new LinkedHashMap(); + } + } + + private Map makeMockValue(String type) { + Map map = new LinkedHashMap(); + long startTime = TimeUtil.getCurrentDay().getTime(); + long current = System.currentTimeMillis(); + long endTime = current - current % 300000; + int n = (int) (endTime - startTime) / 300000; + double[] value = new double[n]; + + for (int i = 0; i < n; i++) { + value[i] = (new Random().nextDouble() + 1) * 100; + } + map.put(type, value); + return map; + } + + private Map querySuccessRatio(QueryEntity entity) { + + return makeMockValue(SUCCESS_RATIO); + } + + private Map queryDelayAvg(QueryEntity entity) { + + return makeMockValue(DELAY_AVG); + } + + private Map queryRequestCount(QueryEntity entity) { + + return makeMockValue(REQUEST_COUNT); + } + + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/system/graph/SystemGraphCreator.java b/cat-home/src/main/java/com/dianping/cat/report/page/system/graph/SystemGraphCreator.java index 44215ba13bf0240322e5c814114878c9bf472544..9f4d82cd43f951634a725374d7db48a55ace351b 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/system/graph/SystemGraphCreator.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/system/graph/SystemGraphCreator.java @@ -31,11 +31,11 @@ public class SystemGraphCreator extends AbstractGraphCreator { "/-usage:avg", "/-freeInodes:avg", "/-read:sum", "/-write:sum", "/data-usage:avg", "/data-freeInodes:avg", "/data-read:sum", "/data-write:sum", "/usr-usage:avg", "/usr-freeInodes:avg", "/usr-read:sum", "/usr-write:sum", "/var-usage:avg", "/var-freeInodes:avg", "/var-read:sum", "/var-write:sum", - "eth0-inFlow:sum", "eth0-outFlow:sum", "eth0-dropped:sum", "eth0-errors:sum", "lo-inFlow:sum", - "lo-outFlow:sum", "lo-dropped:sum", "lo-errors:sum", "swapUsage:avg", "loadAvg1:avg", "loadAvg5:avg", - "totalMem:avg", "usedMem:avg", "freeMem:avg", "sharedMem:avg", "buffersMem:avg", "cachedMem:avg", - "totalProcess:avg", "runningProcess:avg", "swapUsage:avg", "establishedTcp:avg", "loginUsers:avg", - "uptime:avg", "md5Change:avg", "hostNameChange:avg", "hostIpChange:avg")); + "eth0-inFlow:sum", "eth0-outFlow:sum", "eth0-dropped:sum", "eth0-errors:sum", "eth0-collisions:sum", + "lo-inFlow:sum", "lo-outFlow:sum", "swapUsage:avg", "loadAvg1:avg", "loadAvg5:avg", "totalMem:avg", + "usedMem:avg", "freeMem:avg", "sharedMem:avg", "buffersMem:avg", "cachedMem:avg", "totalProcess:avg", + "runningProcess:avg", "swapUsage:avg", "establishedTcp:avg", "loginUsers:avg", "uptime:avg", "md5Change:avg", + "hostNameChange:avg", "hostIpChange:avg")); private static final List JVM_KEY_LIST = new ArrayList(Arrays.asList("edenUsage:avg", "oldUsage:avg", "permUsage:avg", "catalinaLogSize:sum")); diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index f674be9a4497930d3026970b4a3cd2fba3d677ec..1417172b6108f11464617be5ce3e1f2975fd462e 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -392,6 +392,3710 @@ + + com.dianping.cat.report.page.app.graph.AppGraphCreator + com.dianping.cat.report.page.app.graph.AppGraphCreator + + + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.report.service.impl.TransactionReportService + com.dianping.cat.report.service.impl.TransactionReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.EventReportService + com.dianping.cat.report.service.impl.EventReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.ProblemReportService + com.dianping.cat.report.service.impl.ProblemReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.MatrixReportService + com.dianping.cat.report.service.impl.MatrixReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.CrossReportService + com.dianping.cat.report.service.impl.CrossReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.StateReportService + com.dianping.cat.report.service.impl.StateReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.BugReportService + com.dianping.cat.report.service.impl.BugReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.UtilizationReportService + com.dianping.cat.report.service.impl.UtilizationReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.ServiceReportService + com.dianping.cat.report.service.impl.ServiceReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.HeavyReportService + com.dianping.cat.report.service.impl.HeavyReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.NetTopologyReportService + com.dianping.cat.report.service.impl.NetTopologyReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.AlertReportService + com.dianping.cat.report.service.impl.AlertReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + + + com.dianping.cat.report.service.impl.TopReportService + com.dianping.cat.report.service.impl.TopReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + + + com.dianping.cat.report.service.impl.DependencyReportService + com.dianping.cat.report.service.impl.DependencyReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + + + com.dianping.cat.report.service.impl.HeartbeatReportService + com.dianping.cat.report.service.impl.HeartbeatReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + + + com.dianping.cat.report.service.impl.MetricReportService + com.dianping.cat.report.service.impl.MetricReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.consumer.advanced.dal.BusinessReportDao + + + + + com.dianping.cat.report.service.ReportService + com.dianping.cat.report.service.impl.DefaultReportService + + + com.dianping.cat.core.dal.HourlyReportDao + + + com.dianping.cat.core.dal.DailyReportDao + + + com.dianping.cat.core.dal.WeeklyReportDao + + + com.dianping.cat.core.dal.MonthlyReportDao + + + com.dianping.cat.core.dal.HourlyReportContentDao + + + com.dianping.cat.home.dal.report.DailyReportContentDao + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + com.dianping.cat.report.service.impl.TransactionReportService + + + com.dianping.cat.report.service.impl.EventReportService + + + com.dianping.cat.report.service.impl.ProblemReportService + + + com.dianping.cat.report.service.impl.MatrixReportService + + + com.dianping.cat.report.service.impl.DependencyReportService + + + com.dianping.cat.report.service.impl.TopReportService + + + com.dianping.cat.report.service.impl.StateReportService + + + com.dianping.cat.report.service.impl.CrossReportService + + + com.dianping.cat.report.service.impl.HeartbeatReportService + + + com.dianping.cat.report.service.impl.MetricReportService + + + com.dianping.cat.report.service.impl.BugReportService + + + com.dianping.cat.report.service.impl.HeavyReportService + + + com.dianping.cat.report.service.impl.ServiceReportService + + + com.dianping.cat.report.service.impl.UtilizationReportService + + + com.dianping.cat.report.service.impl.NetTopologyReportService + + + com.dianping.cat.report.service.impl.AlertReportService + + + + + com.dianping.cat.report.task.DefaultTaskConsumer + com.dianping.cat.report.task.DefaultTaskConsumer + + + com.dianping.cat.core.dal.TaskDao + + + com.dianping.cat.report.task.spi.ReportFacade + + + + + com.dianping.cat.report.task.transaction.TransactionGraphCreator + com.dianping.cat.report.task.transaction.TransactionGraphCreator + + + com.dianping.cat.report.task.event.EventGraphCreator + com.dianping.cat.report.task.event.EventGraphCreator + + + com.dianping.cat.report.task.problem.ProblemGraphCreator + com.dianping.cat.report.task.problem.ProblemGraphCreator + + + com.dianping.cat.report.task.heartbeat.HeartbeatGraphCreator + com.dianping.cat.report.task.heartbeat.HeartbeatGraphCreator + + + com.dianping.cat.report.task.transaction.TransactionMerger + com.dianping.cat.report.task.transaction.TransactionMerger + + + com.dianping.cat.report.task.event.EventMerger + com.dianping.cat.report.task.event.EventMerger + + + com.dianping.cat.report.task.problem.ProblemMerger + com.dianping.cat.report.task.problem.ProblemMerger + + + com.dianping.cat.report.task.metric.MetricPointParser + com.dianping.cat.report.task.metric.MetricPointParser + + + com.dianping.cat.report.baseline.BaselineCreator + com.dianping.cat.report.baseline.impl.DefaultBaselineCreator + + + com.dianping.cat.report.baseline.BaselineService + com.dianping.cat.report.baseline.impl.DefaultBaselineService + + + com.dianping.cat.home.dal.report.BaselineDao + + + + + com.dianping.cat.report.baseline.BaselineConfigManager + com.dianping.cat.report.baseline.BaselineConfigManager + + + com.dianping.cat.report.task.metric.MetricBaselineReportBuilder + com.dianping.cat.report.task.metric.MetricBaselineReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.task.metric.MetricPointParser + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.report.baseline.BaselineCreator + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.baseline.BaselineConfigManager + + + + + com.dianping.cat.report.task.transaction.TransactionReportBuilder + com.dianping.cat.report.task.transaction.TransactionReportBuilder + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.core.dal.DailyGraphDao + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.task.transaction.TransactionGraphCreator + + + com.dianping.cat.report.task.transaction.TransactionMerger + + + + + com.dianping.cat.report.task.event.EventReportBuilder + com.dianping.cat.report.task.event.EventReportBuilder + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.core.dal.DailyGraphDao + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.task.event.EventGraphCreator + + + com.dianping.cat.report.task.event.EventMerger + + + + + com.dianping.cat.report.task.problem.ProblemReportBuilder + com.dianping.cat.report.task.problem.ProblemReportBuilder + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.core.dal.DailyGraphDao + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.task.problem.ProblemGraphCreator + + + com.dianping.cat.report.task.problem.ProblemMerger + + + + + com.dianping.cat.report.task.heartbeat.HeartbeatReportBuilder + com.dianping.cat.report.task.heartbeat.HeartbeatReportBuilder + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.task.heartbeat.HeartbeatGraphCreator + + + + + com.dianping.cat.report.task.bug.BugReportBuilder + com.dianping.cat.report.task.bug.BugReportBuilder + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.task.service.ServiceReportBuilder + com.dianping.cat.report.task.service.ServiceReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.DomainManager + + + + + com.dianping.cat.report.task.matrix.MatrixReportBuilder + com.dianping.cat.report.task.matrix.MatrixReportBuilder + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.task.cross.CrossReportBuilder + com.dianping.cat.report.task.cross.CrossReportBuilder + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.task.state.StateReportBuilder + com.dianping.cat.report.task.state.StateReportBuilder + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.task.alert.exception.AlertReportBuilder + com.dianping.cat.report.task.alert.exception.AlertReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.system.config.ExceptionConfigManager + + + + + com.dianping.cat.report.task.heavy.HeavyReportBuilder + com.dianping.cat.report.task.heavy.HeavyReportBuilder + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.task.utilization.UtilizationReportBuilder + com.dianping.cat.report.task.utilization.UtilizationReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.transaction.TransactionMergeManager + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.DomainManager + + + + + com.dianping.cat.report.task.dependency.DependencyReportBuilder + com.dianping.cat.report.task.dependency.DependencyReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder + + + com.dianping.cat.home.dal.report.TopologyGraphDao + + + + + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + + + com.dianping.cat.report.page.network.nettopology.NetGraphManager + com.dianping.cat.report.page.network.nettopology.NetGraphManager + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + + + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.system.config.NetGraphConfigManager + + + + + com.dianping.cat.report.task.network.NetTopologyReportBuilder + com.dianping.cat.report.task.network.NetTopologyReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + + + com.dianping.cat.system.config.NetGraphConfigManager + + + + + com.dianping.cat.report.task.spi.ReportFacade + com.dianping.cat.report.task.spi.ReportFacade + + + com.dianping.cat.report.task.transaction.TransactionReportBuilder + + + com.dianping.cat.report.task.event.EventReportBuilder + + + com.dianping.cat.report.task.problem.ProblemReportBuilder + + + com.dianping.cat.report.task.heartbeat.HeartbeatReportBuilder + + + com.dianping.cat.report.task.matrix.MatrixReportBuilder + + + com.dianping.cat.report.task.cross.CrossReportBuilder + + + com.dianping.cat.report.task.state.StateReportBuilder + + + com.dianping.cat.report.task.dependency.DependencyReportBuilder + + + com.dianping.cat.report.task.bug.BugReportBuilder + + + com.dianping.cat.report.task.service.ServiceReportBuilder + + + com.dianping.cat.report.task.metric.MetricBaselineReportBuilder + + + com.dianping.cat.report.task.heavy.HeavyReportBuilder + + + com.dianping.cat.report.task.alert.exception.AlertReportBuilder + + + com.dianping.cat.report.task.utilization.UtilizationReportBuilder + + + com.dianping.cat.report.task.network.NetTopologyReportBuilder + + + + + com.dianping.cat.report.page.model.spi.ModelService + transaction-local + com.dianping.cat.report.page.model.transaction.LocalTransactionService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + transaction-historical + com.dianping.cat.report.page.model.transaction.HistoricalTransactionService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + transaction + com.dianping.cat.report.page.model.transaction.CompositeTransactionService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + transaction-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + event-local + com.dianping.cat.report.page.model.event.LocalEventService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + event-historical + com.dianping.cat.report.page.model.event.HistoricalEventService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + event + com.dianping.cat.report.page.model.event.CompositeEventService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + event-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + problem-local + com.dianping.cat.report.page.model.problem.LocalProblemService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + problem-historical + com.dianping.cat.report.page.model.problem.HistoricalProblemService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + problem + com.dianping.cat.report.page.model.problem.CompositeProblemService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + problem-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + heartbeat-local + com.dianping.cat.report.page.model.heartbeat.LocalHeartbeatService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + heartbeat-historical + com.dianping.cat.report.page.model.heartbeat.HistoricalHeartbeatService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + heartbeat + com.dianping.cat.report.page.model.heartbeat.CompositeHeartbeatService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + heartbeat-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + matrix-local + com.dianping.cat.report.page.model.matrix.LocalMatrixService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + matrix-historical + com.dianping.cat.report.page.model.matrix.HistoricalMatrixService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + matrix + com.dianping.cat.report.page.model.matrix.CompositeMatrixService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + matrix-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + state-local + com.dianping.cat.report.page.model.state.LocalStateService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + state-historical + com.dianping.cat.report.page.model.state.HistoricalStateService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + state + com.dianping.cat.report.page.model.state.CompositeStateService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + state-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + cross-local + com.dianping.cat.report.page.model.cross.LocalCrossService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + cross-historical + com.dianping.cat.report.page.model.cross.HistoricalCrossService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + cross + com.dianping.cat.report.page.model.cross.CompositeCrossService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + cross-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + top-local + com.dianping.cat.report.page.model.top.LocalTopService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + top-historical + com.dianping.cat.report.page.model.top.HistoricalTopService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + top + com.dianping.cat.report.page.model.top.CompositeTopService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + top-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + dependency-local + com.dianping.cat.report.page.model.dependency.LocalDependencyService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + dependency-historical + com.dianping.cat.report.page.model.dependency.HistoricalDependencyService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + dependency + com.dianping.cat.report.page.model.dependency.CompositeDependencyService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + dependency-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + metric-local + com.dianping.cat.report.page.model.metric.LocalMetricService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.spi.ModelService + metric-historical + com.dianping.cat.report.page.model.metric.HistoricalMetricService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.model.spi.ModelService + metric + com.dianping.cat.report.page.model.metric.CompositeMetricService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + metric-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + logview + com.dianping.cat.report.page.model.logview.CompositeLogViewService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + + message-historical + logview-historical + + m_services + + + + + com.dianping.cat.report.page.model.spi.ModelService + message-local + com.dianping.cat.report.page.model.logview.LocalMessageService + + + com.dianping.cat.message.spi.core.MessageConsumer + + + com.dianping.cat.storage.dump.MessageBucketManager + local + + + com.dianping.cat.message.spi.MessageCodec + html + + + + + com.dianping.cat.report.page.model.spi.ModelService + message-historical + com.dianping.cat.report.page.model.logview.HistoricalMessageService + + + com.dianping.cat.storage.dump.MessageBucketManager + local + m_localBucketManager + + + com.dianping.cat.storage.dump.MessageBucketManager + hdfs + m_hdfsBucketManager + + + com.dianping.cat.message.spi.MessageCodec + html + + + + + com.dianping.cat.report.service.CachedReportTask + com.dianping.cat.report.service.CachedReportTask + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.task.alert.business.BusinessAlertConfig + com.dianping.cat.report.task.alert.business.BusinessAlertConfig + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.network.NetworkAlertConfig + com.dianping.cat.report.task.alert.network.NetworkAlertConfig + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.system.SystemAlertConfig + com.dianping.cat.report.task.alert.system.SystemAlertConfig + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig + com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig + + + com.dianping.cat.system.config.AlertConfigManager + + + + + com.dianping.cat.report.task.alert.AlertInfo + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.system.tool.DefaultMailImpl + com.dianping.cat.system.tool.DefaultMailImpl + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.task.alert.DataChecker + com.dianping.cat.report.task.alert.DefaultDataChecker + + + com.dianping.cat.report.task.alert.business.BusinessAlert + com.dianping.cat.report.task.alert.business.BusinessAlert + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.system.tool.MailSMS + + + com.dianping.cat.report.task.alert.business.BusinessAlertConfig + + + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.home.dal.report.AlertDao + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.system.config.BusinessRuleConfigManager + + + com.dianping.cat.report.task.alert.DataChecker + + + + + com.dianping.cat.report.task.alert.network.NetworkAlert + com.dianping.cat.report.task.alert.network.NetworkAlert + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.system.tool.MailSMS + + + com.dianping.cat.report.task.alert.network.NetworkAlertConfig + + + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.home.dal.report.AlertDao + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.system.config.NetworkRuleConfigManager + + + com.dianping.cat.report.task.alert.DataChecker + + + + + com.dianping.cat.report.task.alert.system.SystemAlert + com.dianping.cat.report.task.alert.system.SystemAlert + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.system.tool.MailSMS + + + com.dianping.cat.report.task.alert.system.SystemAlertConfig + + + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.home.dal.report.AlertDao + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.system.config.SystemRuleConfigManager + + + com.dianping.cat.report.task.alert.DataChecker + + + + + com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder + com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder + + + com.dianping.cat.system.config.ExceptionConfigManager + + + + + com.dianping.cat.report.task.alert.exception.ExceptionAlert + com.dianping.cat.report.task.alert.exception.ExceptionAlert + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.report.task.alert.exception.ExceptionAlertConfig + + + com.dianping.cat.system.tool.MailSMS + + + com.dianping.cat.system.config.ExceptionConfigManager + + + com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder + + + com.dianping.cat.home.dal.report.AlertDao + + + com.dianping.cat.report.page.model.spi.ModelService + top + + + + + com.dianping.cat.system.config.NetGraphConfigManager + com.dianping.cat.system.config.NetGraphConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + org.unidal.dal.jdbc.datasource.JdbcDataSourceDescriptorManager + org.unidal.dal.jdbc.datasource.JdbcDataSourceDescriptorManager + + /data/appdatas/cat/datasources.xml + + + + org.unidal.dal.jdbc.mapping.TableProvider + alert + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + alert + alert + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + alert-summary + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + alert-summary + alert_summary + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + alteration + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + alteration + alteration + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + baseline + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + baseline + baseline + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + daily-report-content + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + daily-report-content + daily_report_content + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + event + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + event + event + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + monthly-report-content + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + monthly-report-content + monthly_report_content + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + topology-graph + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + topology-graph + topologyGraph + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + weekly-report-content + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + weekly-report-content + weekly_report_content + cat + + + + com.dianping.cat.home.dal.report.AlertDao + com.dianping.cat.home.dal.report.AlertDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.AlertSummaryDao + com.dianping.cat.home.dal.report.AlertSummaryDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.AlterationDao + com.dianping.cat.home.dal.report.AlterationDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.BaselineDao + com.dianping.cat.home.dal.report.BaselineDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.DailyReportContentDao + com.dianping.cat.home.dal.report.DailyReportContentDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.EventDao + com.dianping.cat.home.dal.report.EventDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.MonthlyReportContentDao + com.dianping.cat.home.dal.report.MonthlyReportContentDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.TopologyGraphDao + com.dianping.cat.home.dal.report.TopologyGraphDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.report.WeeklyReportContentDao + com.dianping.cat.home.dal.report.WeeklyReportContentDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + org.unidal.dal.jdbc.mapping.TableProvider + mail-record + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + mail-record + mailRecord + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + scheduled-report + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + scheduled-report + scheduledReport + cat + + + + org.unidal.dal.jdbc.mapping.TableProvider + scheduled-report-subscription + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + scheduled-report-subscription + scheduledReportSubscription + cat + + + + com.dianping.cat.home.dal.alarm.MailRecordDao + com.dianping.cat.home.dal.alarm.MailRecordDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.alarm.ScheduledReportDao + com.dianping.cat.home.dal.alarm.ScheduledReportDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + org.unidal.dal.jdbc.mapping.TableProvider + dp-admin-login + org.unidal.dal.jdbc.mapping.SimpleTableProvider + + dp-admin-login + DP_AdminLogin + user + + + + com.dianping.cat.home.dal.user.DpAdminLoginDao + com.dianping.cat.home.dal.user.DpAdminLoginDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.task.product.ProjectUpdateTask + com.dianping.cat.report.task.product.ProjectUpdateTask + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.core.dal.HostinfoDao + + + + + org.unidal.web.mvc.model.ModuleRegistry + org.unidal.web.mvc.model.ModuleRegistry + + + com.dianping.cat.report.ReportModule + com.dianping.cat.system.SystemModule + + + + + com.dianping.cat.report.ReportModule + com.dianping.cat.report.ReportModule + + + com.dianping.cat.report.page.home.Handler + com.dianping.cat.report.page.home.Handler + + + com.dianping.cat.report.page.home.JspViewer + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.home.JspViewer + com.dianping.cat.report.page.home.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.consumer.RealtimeConsumer + com.dianping.cat.consumer.RealtimeConsumer + + + com.dianping.cat.analysis.MessageAnalyzerManager + + + com.dianping.cat.statistic.ServerStatisticManager + + + + + com.dianping.cat.statistic.ServerStatisticManager + com.dianping.cat.statistic.ServerStatisticManager + + + com.dianping.cat.report.page.problem.Handler + com.dianping.cat.report.page.problem.Handler + + + com.dianping.cat.report.page.problem.HistoryGraphs + + + com.dianping.cat.report.page.problem.JspViewer + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.model.spi.ModelService + problem + m_service + + + com.dianping.cat.system.config.DomainGroupConfigManager + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.report.page.JsonBuilder + + + + + com.dianping.cat.report.page.problem.HistoryGraphs + com.dianping.cat.report.page.problem.HistoryGraphs + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.core.dal.DailyGraphDao + + + + + com.dianping.cat.core.dal.GraphDao + com.dianping.cat.core.dal.GraphDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.core.dal.DailyGraphDao + com.dianping.cat.core.dal.DailyGraphDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.page.problem.JspViewer + com.dianping.cat.report.page.problem.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.ServerConfigManager + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.system.config.DomainGroupConfigManager + com.dianping.cat.system.config.DomainGroupConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.core.config.ConfigDao + com.dianping.cat.core.config.ConfigDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.page.PayloadNormalizer + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.page.JsonBuilder + com.dianping.cat.report.page.JsonBuilder + + + com.dianping.cat.report.page.transaction.Handler + com.dianping.cat.report.page.transaction.Handler + + + com.dianping.cat.report.graph.GraphBuilder + + + com.dianping.cat.report.page.transaction.HistoryGraphs + + + com.dianping.cat.report.page.transaction.JspViewer + + + com.dianping.cat.report.page.transaction.XmlViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.transaction.TransactionMergeManager + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.system.config.DomainGroupConfigManager + + + com.dianping.cat.report.page.model.spi.ModelService + transaction + m_service + + + + + com.dianping.cat.report.page.transaction.HistoryGraphs + com.dianping.cat.report.page.transaction.HistoryGraphs + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.core.dal.DailyGraphDao + + + + + com.dianping.cat.report.page.transaction.JspViewer + com.dianping.cat.report.page.transaction.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.transaction.XmlViewer + com.dianping.cat.report.page.transaction.XmlViewer + + + com.dianping.cat.report.page.transaction.TransactionMergeManager + com.dianping.cat.report.page.transaction.TransactionMergeManager + + + com.dianping.cat.report.page.event.Handler + com.dianping.cat.report.page.event.Handler + + + com.dianping.cat.report.graph.GraphBuilder + + + com.dianping.cat.report.page.event.HistoryGraphs + + + com.dianping.cat.report.page.event.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.event.EventMergeManager + + + com.dianping.cat.report.page.model.spi.ModelService + event + m_service + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.system.config.DomainGroupConfigManager + + + + + com.dianping.cat.report.page.event.HistoryGraphs + com.dianping.cat.report.page.event.HistoryGraphs + + + com.dianping.cat.core.dal.GraphDao + + + com.dianping.cat.core.dal.DailyGraphDao + + + + + com.dianping.cat.report.page.event.JspViewer + com.dianping.cat.report.page.event.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.event.EventMergeManager + com.dianping.cat.report.page.event.EventMergeManager + + + com.dianping.cat.report.page.heartbeat.Handler + com.dianping.cat.report.page.heartbeat.Handler + + + com.dianping.cat.report.graph.GraphBuilder + + + com.dianping.cat.report.page.heartbeat.HistoryGraphs + + + com.dianping.cat.report.page.heartbeat.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.model.spi.ModelService + heartbeat + m_service + + + com.dianping.cat.report.page.PayloadNormalizer + + + + + com.dianping.cat.report.page.heartbeat.HistoryGraphs + com.dianping.cat.report.page.heartbeat.HistoryGraphs + + + com.dianping.cat.core.dal.GraphDao + + + + + com.dianping.cat.report.page.heartbeat.JspViewer + com.dianping.cat.report.page.heartbeat.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.logview.Handler + com.dianping.cat.report.page.logview.Handler + + + com.dianping.cat.report.page.logview.JspViewer + + + com.dianping.cat.report.page.model.spi.ModelService + logview + m_service + + + com.dianping.cat.message.spi.core.MessagePathBuilder + + + + + com.dianping.cat.report.page.logview.JspViewer + com.dianping.cat.report.page.logview.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.model.Handler + com.dianping.cat.report.page.model.Handler + + + com.dianping.cat.report.page.model.spi.ModelService + cross-local + m_crossService + + + com.dianping.cat.report.page.model.spi.ModelService + dependency-local + m_dependencyService + + + com.dianping.cat.report.page.model.spi.ModelService + event-local + m_eventService + + + com.dianping.cat.report.page.model.spi.ModelService + heartbeat-local + m_heartbeatService + + + com.dianping.cat.report.page.model.spi.ModelService + matrix-local + m_matrixService + + + com.dianping.cat.report.page.model.spi.ModelService + message-local + m_messageService + + + com.dianping.cat.report.page.model.spi.ModelService + metric-local + m_metricService + + + com.dianping.cat.report.page.model.spi.ModelService + problem-local + m_problemService + + + com.dianping.cat.report.page.model.spi.ModelService + state-local + m_stateService + + + com.dianping.cat.report.page.model.spi.ModelService + top-local + m_topService + + + com.dianping.cat.report.page.model.spi.ModelService + transaction-local + m_transactionService + + + com.dianping.cat.service.IpService + + + + + com.dianping.cat.report.page.model.cross.LocalCrossService + com.dianping.cat.report.page.model.cross.LocalCrossService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.dependency.LocalDependencyService + com.dianping.cat.report.page.model.dependency.LocalDependencyService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.event.LocalEventService + com.dianping.cat.report.page.model.event.LocalEventService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.heartbeat.LocalHeartbeatService + com.dianping.cat.report.page.model.heartbeat.LocalHeartbeatService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.matrix.LocalMatrixService + com.dianping.cat.report.page.model.matrix.LocalMatrixService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.logview.LocalMessageService + com.dianping.cat.report.page.model.logview.LocalMessageService + + + com.dianping.cat.storage.dump.MessageBucketManager + local + + + com.dianping.cat.message.spi.MessageCodec + html + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.metric.LocalMetricService + com.dianping.cat.report.page.model.metric.LocalMetricService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.problem.LocalProblemService + com.dianping.cat.report.page.model.problem.LocalProblemService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.state.LocalStateService + com.dianping.cat.report.page.model.state.LocalStateService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.top.LocalTopService + com.dianping.cat.report.page.model.top.LocalTopService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.report.page.model.transaction.LocalTransactionService + com.dianping.cat.report.page.model.transaction.LocalTransactionService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.core.MessageConsumer + + + + + com.dianping.cat.service.IpService + com.dianping.cat.service.IpService + + + com.dianping.cat.report.page.dashboard.Handler + com.dianping.cat.report.page.dashboard.Handler + + + com.dianping.cat.report.page.dashboard.JspViewer + + + com.dianping.cat.report.page.transaction.TransactionMergeManager + + + com.dianping.cat.report.page.event.EventMergeManager + + + com.dianping.cat.report.page.model.spi.ModelService + event + m_eventService + + + com.dianping.cat.report.page.model.spi.ModelService + transaction + m_transactionService + + + com.dianping.cat.report.page.model.spi.ModelService + problem + m_problemService + + + com.dianping.cat.report.page.JsonBuilder + + + + + com.dianping.cat.report.page.dashboard.JspViewer + com.dianping.cat.report.page.dashboard.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.matrix.Handler + com.dianping.cat.report.page.matrix.Handler + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.matrix.JspViewer + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.report.page.model.spi.ModelService + matrix + m_service + + + + + com.dianping.cat.report.page.matrix.JspViewer + com.dianping.cat.report.page.matrix.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.cross.Handler + com.dianping.cat.report.page.cross.Handler + + + com.dianping.cat.report.page.cross.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.DomainManager + + + com.dianping.cat.report.page.model.spi.ModelService + cross + m_service + + + + + com.dianping.cat.report.page.cross.JspViewer + com.dianping.cat.report.page.cross.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.DomainManager + com.dianping.cat.DomainManager + + + com.dianping.cat.core.dal.HostinfoDao + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.core.dal.HostinfoDao + com.dianping.cat.core.dal.HostinfoDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.core.dal.ProjectDao + com.dianping.cat.core.dal.ProjectDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.page.cache.Handler + com.dianping.cat.report.page.cache.Handler + + + com.dianping.cat.report.page.model.spi.ModelService + event + m_eventService + + + com.dianping.cat.report.page.cache.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.report.page.model.spi.ModelService + transaction + m_transactionService + + + + + com.dianping.cat.report.page.cache.JspViewer + com.dianping.cat.report.page.cache.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.state.Handler + com.dianping.cat.report.page.state.Handler + + + com.dianping.cat.report.page.state.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.state.StateGraphs + + + com.dianping.cat.report.page.model.spi.ModelService + state + m_service + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.page.state.JspViewer + com.dianping.cat.report.page.state.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.state.StateGraphs + com.dianping.cat.report.page.state.StateGraphs + + + com.dianping.cat.report.service.ReportService + + + + + com.dianping.cat.report.page.top.Handler + com.dianping.cat.report.page.top.Handler + + + com.dianping.cat.report.page.top.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.model.spi.ModelService + top + m_service + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.system.config.ExceptionConfigManager + + + + + com.dianping.cat.report.page.top.JspViewer + com.dianping.cat.report.page.top.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.system.config.ExceptionConfigManager + com.dianping.cat.system.config.ExceptionConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.report.page.metric.Handler + com.dianping.cat.report.page.metric.Handler + + + com.dianping.cat.report.page.metric.JspViewer + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.page.metric.graph.MetricGraphCreator + + + + + com.dianping.cat.report.page.metric.JspViewer + com.dianping.cat.report.page.metric.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.system.config.MetricGroupConfigManager + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.report.page.metric.graph.MetricGraphCreator + com.dianping.cat.report.page.metric.graph.MetricGraphCreator + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.consumer.metric.MetricConfigManager + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + + + com.dianping.cat.report.task.alert.AlertInfo + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + + + com.dianping.cat.report.page.dependency.Handler + com.dianping.cat.report.page.dependency.Handler + + + com.dianping.cat.report.page.model.spi.ModelService + dependency + m_dependencyService + + + com.dianping.cat.report.page.model.spi.ModelService + state + m_stateService + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager + + + com.dianping.cat.report.page.dependency.ExternalInfoBuilder + + + com.dianping.cat.report.page.dependency.JspViewer + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphManager + + + com.dianping.cat.report.page.model.spi.ModelService + dependency + m_service + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.home.dal.report.TopologyGraphDao + + + com.dianping.cat.report.view.DomainNavManager + + + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder + com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder + + + com.dianping.cat.home.dal.report.TopologyGraphDao + com.dianping.cat.home.dal.report.TopologyGraphDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.view.DomainNavManager + com.dianping.cat.report.view.DomainNavManager + + + com.dianping.cat.core.dal.ProjectDao + + + + + com.dianping.cat.report.page.dependency.ExternalInfoBuilder + com.dianping.cat.report.page.dependency.ExternalInfoBuilder + + + com.dianping.cat.report.page.model.spi.ModelService + problem + m_problemservice + + + com.dianping.cat.report.page.model.spi.ModelService + top + m_topService + + + com.dianping.cat.report.page.externalError.EventCollectManager + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.system.config.ExceptionConfigManager + + + + + com.dianping.cat.report.page.externalError.EventCollectManager + com.dianping.cat.report.page.externalError.EventCollectManager + + + com.dianping.cat.home.dal.report.EventDao + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.home.dal.report.EventDao + com.dianping.cat.home.dal.report.EventDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.page.dependency.JspViewer + com.dianping.cat.report.page.dependency.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.externalError.Handler + com.dianping.cat.report.page.externalError.Handler + + + com.dianping.cat.report.page.externalError.JspViewer + + + com.dianping.cat.report.page.externalError.EventCollectManager + + + com.dianping.cat.DomainManager + + + + + com.dianping.cat.report.page.externalError.JspViewer + com.dianping.cat.report.page.externalError.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.statistics.Handler + com.dianping.cat.report.page.statistics.Handler + + + com.dianping.cat.report.page.statistics.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.system.config.BugConfigManager + + + com.dianping.cat.report.page.PayloadNormalizer + + + + + com.dianping.cat.report.page.statistics.JspViewer + com.dianping.cat.report.page.statistics.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.system.config.BugConfigManager + com.dianping.cat.system.config.BugConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.report.page.alteration.Handler + com.dianping.cat.report.page.alteration.Handler + + + com.dianping.cat.report.page.alteration.JspViewer + + + com.dianping.cat.home.dal.report.AlterationDao + + + + + com.dianping.cat.report.page.alteration.JspViewer + com.dianping.cat.report.page.alteration.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.home.dal.report.AlterationDao + com.dianping.cat.home.dal.report.AlterationDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.report.page.monitor.Handler + com.dianping.cat.report.page.monitor.Handler + + + com.dianping.cat.report.page.monitor.JspViewer + + + com.dianping.cat.report.page.JsonBuilder + + + + + com.dianping.cat.report.page.monitor.JspViewer + com.dianping.cat.report.page.monitor.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.network.Handler + com.dianping.cat.report.page.network.Handler + + + com.dianping.cat.report.page.network.JspViewer + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.report.page.network.graph.NetworkGraphCreator + + + com.dianping.cat.report.page.network.nettopology.NetGraphManager + + + + + com.dianping.cat.report.page.network.JspViewer + com.dianping.cat.report.page.network.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.network.graph.NetworkGraphCreator + com.dianping.cat.report.page.network.graph.NetworkGraphCreator + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.report.page.network.nettopology.NetGraphManager + com.dianping.cat.report.page.network.nettopology.NetGraphManager + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + + + com.dianping.cat.report.task.alert.AlertInfo + + + com.dianping.cat.system.config.NetGraphConfigManager + + + + + com.dianping.cat.report.task.alert.RemoteMetricReportService + com.dianping.cat.report.task.alert.RemoteMetricReportService + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + com.dianping.cat.report.page.network.nettopology.NetGraphBuilder + + + com.dianping.cat.system.config.NetGraphConfigManager + com.dianping.cat.system.config.NetGraphConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.report.page.userMonitor.Handler + com.dianping.cat.report.page.userMonitor.Handler + + + com.dianping.cat.report.page.userMonitor.JspViewer + + + com.dianping.cat.config.url.UrlPatternConfigManager + + + com.dianping.cat.report.page.userMonitor.CityManager + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.report.page.userMonitor.graph.UserMonitorGraphCreator + + + + + com.dianping.cat.report.page.userMonitor.JspViewer + com.dianping.cat.report.page.userMonitor.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.config.url.UrlPatternConfigManager + com.dianping.cat.config.url.UrlPatternConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + com.dianping.cat.config.url.UrlPatternHandler + + + + + com.dianping.cat.report.page.userMonitor.CityManager + com.dianping.cat.report.page.userMonitor.CityManager + + + com.dianping.cat.report.page.system.Handler + com.dianping.cat.report.page.system.Handler + + + com.dianping.cat.report.page.system.JspViewer + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.report.page.PayloadNormalizer + + + com.dianping.cat.report.page.system.graph.SystemGraphCreator + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + + + com.dianping.cat.report.page.system.JspViewer + com.dianping.cat.report.page.system.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.system.graph.SystemGraphCreator + com.dianping.cat.report.page.system.graph.SystemGraphCreator + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.report.page.cdn.Handler + com.dianping.cat.report.page.cdn.Handler + + + com.dianping.cat.report.page.cdn.JspViewer + + + com.dianping.cat.report.page.userMonitor.CityManager + + + com.dianping.cat.report.page.cdn.graph.CdnGraphCreator + + + + + com.dianping.cat.report.page.cdn.JspViewer + com.dianping.cat.report.page.cdn.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.cdn.graph.CdnGraphCreator + com.dianping.cat.report.page.cdn.graph.CdnGraphCreator + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.report.page.app.Handler + com.dianping.cat.report.page.app.Handler + + + com.dianping.cat.report.page.app.JspViewer + + + com.dianping.cat.config.app.AppConfigManager + + + com.dianping.cat.report.page.app.graph.AppGraphCreator + + + + + com.dianping.cat.report.page.app.JspViewer + com.dianping.cat.report.page.app.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.config.app.AppConfigManager + com.dianping.cat.config.app.AppConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.report.page.app.graph.AppGraphCreator + com.dianping.cat.report.page.app.graph.AppGraphCreator + + + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.config.app.AppDataService + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.app.AppDataCommandDao + + + com.dianping.cat.config.app.AppConfigManager + + + + + com.dianping.cat.app.AppDataCommandDao + com.dianping.cat.app.AppDataCommandDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.system.SystemModule + com.dianping.cat.system.SystemModule + + + com.dianping.cat.system.page.alarm.Handler + com.dianping.cat.system.page.alarm.Handler + + + com.dianping.cat.system.page.alarm.JspViewer + + + com.dianping.cat.system.page.alarm.RecordManager + + + com.dianping.cat.system.page.alarm.ScheduledManager + + + + + com.dianping.cat.system.page.alarm.JspViewer + com.dianping.cat.system.page.alarm.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.system.page.alarm.RecordManager + com.dianping.cat.system.page.alarm.RecordManager + + + com.dianping.cat.home.dal.alarm.MailRecordDao + + + com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + + + + + com.dianping.cat.home.dal.alarm.MailRecordDao + com.dianping.cat.home.dal.alarm.MailRecordDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.system.page.alarm.ScheduledManager + com.dianping.cat.system.page.alarm.ScheduledManager + + + com.dianping.cat.home.dal.user.DpAdminLoginDao + + + com.dianping.cat.home.dal.alarm.ScheduledReportDao + + + com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + + + + + com.dianping.cat.home.dal.user.DpAdminLoginDao + com.dianping.cat.home.dal.user.DpAdminLoginDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.home.dal.alarm.ScheduledReportDao + com.dianping.cat.home.dal.alarm.ScheduledReportDao + + + org.unidal.dal.jdbc.QueryEngine + + + + + com.dianping.cat.system.page.login.Handler + com.dianping.cat.system.page.login.Handler + + + com.dianping.cat.system.page.login.JspViewer + + + com.dianping.cat.system.page.login.service.SigninService + + + + + com.dianping.cat.system.page.login.JspViewer + com.dianping.cat.system.page.login.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.system.page.login.service.SigninService + com.dianping.cat.system.page.login.service.SigninService + + + com.dianping.cat.system.page.login.service.TokenManager + + + com.dianping.cat.system.page.login.service.SessionManager + + + + + com.dianping.cat.system.page.login.service.TokenManager + com.dianping.cat.system.page.login.service.TokenManager + + + com.dianping.cat.system.page.login.service.CookieManager + + + com.dianping.cat.system.page.login.service.TokenBuilder + + + + + com.dianping.cat.system.page.login.service.CookieManager + com.dianping.cat.system.page.login.service.CookieManager + + + com.dianping.cat.system.page.login.service.TokenBuilder + com.dianping.cat.system.page.login.service.TokenBuilder + + + com.dianping.cat.system.page.login.service.SessionManager + com.dianping.cat.system.page.login.service.SessionManager + + + com.dianping.cat.home.dal.user.DpAdminLoginDao + + + + + com.dianping.cat.system.page.config.Handler + com.dianping.cat.system.page.config.Handler + + + com.dianping.cat.system.page.config.JspViewer + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.config.aggregation.AggregationConfigManager + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.system.config.ExceptionConfigManager + + + com.dianping.cat.system.config.DomainGroupConfigManager + + + com.dianping.cat.system.config.BugConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.config.url.UrlPatternConfigManager + + + com.dianping.cat.system.config.BusinessRuleConfigManager + + + com.dianping.cat.system.config.NetworkRuleConfigManager + + + com.dianping.cat.system.config.SystemRuleConfigManager + + + com.dianping.cat.system.config.AlertConfigManager + + + com.dianping.cat.config.app.AppConfigManager + + + com.dianping.cat.report.view.DomainNavManager + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.system.config.NetGraphConfigManager + + + + + com.dianping.cat.system.page.config.JspViewer + com.dianping.cat.system.page.config.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphConfigManager + com.dianping.cat.report.page.dependency.graph.TopologyGraphConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.config.aggregation.AggregationConfigManager + com.dianping.cat.config.aggregation.AggregationConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + com.dianping.cat.config.aggregation.AggregationHandler + + + + + com.dianping.cat.system.config.BusinessRuleConfigManager + com.dianping.cat.system.config.BusinessRuleConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.system.config.NetworkRuleConfigManager + com.dianping.cat.system.config.NetworkRuleConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.system.config.SystemRuleConfigManager + com.dianping.cat.system.config.SystemRuleConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.system.config.AlertConfigManager + com.dianping.cat.system.config.AlertConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + + + com.dianping.cat.system.page.plugin.Handler + com.dianping.cat.system.page.plugin.Handler + + + com.dianping.cat.system.page.plugin.JspViewer + + + + + com.dianping.cat.system.page.plugin.JspViewer + com.dianping.cat.system.page.plugin.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + + + com.dianping.cat.system.tool.MailSMS + com.dianping.cat.system.tool.DefaultMailImpl + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.system.notify.ReportRender + com.dianping.cat.system.notify.ReportRenderImpl + + + com.dianping.cat.system.notify.ScheduledMailTask + com.dianping.cat.system.notify.ScheduledMailTask + + + com.dianping.cat.system.notify.ReportRender + + + com.dianping.cat.system.tool.MailSMS + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.system.page.alarm.ScheduledManager + + + com.dianping.cat.home.dal.alarm.MailRecordDao + + + com.dianping.cat.report.task.alert.business.BusinessAlertConfig com.dianping.cat.report.task.alert.business.BusinessAlertConfig @@ -3667,6 +7371,9 @@ com.dianping.cat.config.app.AppConfigManager + + com.dianping.cat.report.page.app.graph.AppGraphCreator + @@ -3687,6 +7394,60 @@ + + com.dianping.cat.report.page.app.graph.AppGraphCreator + com.dianping.cat.report.page.app.graph.AppGraphCreator + + + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.report.baseline.BaselineService + + + com.dianping.cat.report.chart.DataExtractor + + + com.dianping.cat.report.chart.MetricDataFetcher + + + com.dianping.cat.report.chart.CachedMetricReportService + + + com.dianping.cat.consumer.metric.MetricConfigManager + + + com.dianping.cat.consumer.metric.ProductLineConfigManager + + + com.dianping.cat.system.config.MetricGroupConfigManager + + + com.dianping.cat.report.task.alert.AlertInfo + + + + + com.dianping.cat.config.app.AppDataService + com.dianping.cat.config.app.AppDataService + + + com.dianping.cat.app.AppDataCommandDao + + + com.dianping.cat.config.app.AppConfigManager + + + + + com.dianping.cat.app.AppDataCommandDao + com.dianping.cat.app.AppDataCommandDao + + + org.unidal.dal.jdbc.QueryEngine + + + com.dianping.cat.system.SystemModule com.dianping.cat.system.SystemModule diff --git a/cat-home/src/main/resources/config/default-alert-config.xml b/cat-home/src/main/resources/config/default-alert-config.xml deleted file mode 100644 index 8c8744917e13d36df755e0594484377b27cffa72..0000000000000000000000000000000000000000 --- a/cat-home/src/main/resources/config/default-alert-config.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - leon.li@dianping.com - 18662513308 - - - jialin.sun@dianping.com - - - yong.you@dianping.com - argus@dianping.com - jialin.sun@dianping.com - monitor@dianping.com - 13916536843 - 18616671676 - 13858086694 - - diff --git a/cat-home/src/main/webapp/js/baseGraph.js b/cat-home/src/main/webapp/js/baseGraph.js index 081bf1241aeb61ffa9b1b7efb36c74bc32760cae..95ecd7f7958a5d8d5207619927fcdb02fdaadb33 100644 --- a/cat-home/src/main/webapp/js/baseGraph.js +++ b/cat-home/src/main/webapp/js/baseGraph.js @@ -117,8 +117,100 @@ function graphMetricChart(container, data) { week : '%Y-%m-%d', month : '%m-%d', year : '%Y-%m' + }, + }, + yAxis : { + min : ylabelMin, + title: { + text: data.unit, + } + }, + credits : { + enabled : false + }, + plotOptions : { + spline : { + lineWidth : 2, + states : { + hover : { + lineWidth : 2 + } + }, + marker : { + enabled : false + } + } + }, + legend : { + maxHeight : 82 + }, + tooltip : { + allowPointSelect : false, + formatter : function() { + var number0 = Number(this.y).toFixed(0); + var number1 = Number(this.y).toFixed(1); + var number = number1; + + if(Number(number1)==Number(number0)){ + number = number0; + } + + return Highcharts.dateFormat('%Y-%m-%d %H:%M', + this.x) + + '
['+ this.series.name + '] '+ '' + number + ''; } }, + series : _data + }); +} + +function parseMetricLineDataForApp(data) { + var res = []; + data.subTitles.forEach(function(title, i) { + var series = {} + series.name = title; + series.data = []; + var map = data.datas[i]; + var j = 0; + + for ( var key in map) { + var value = map[key]; + series.data[j] = value; + j++; + } + res.push(series); + }); + return res; +} + +function graphMetricChartForApp(container, data) { + Highcharts.setOptions({ + global : { + useUTC : false + } + }); + var ylabelMin = data.minYlable; + var _data = parseMetricLineDataForApp(data); + $(container).highcharts( + { + chart : { + type : 'spline' + }, + title : { + text : data.htmlTitle, + useHTML: true + }, + xAxis : { + type : "category", + labels : { + step : 12, + maxStaggerLines : 1, + formatter: function() { + return this.value / 12; + } + }, + max : 288 + }, yAxis : { min : ylabelMin, title: { @@ -163,6 +255,7 @@ function graphMetricChart(container, data) { series : _data }); } + function graphLineChart(container, data) { Highcharts.setOptions({ global : { diff --git a/cat-home/src/main/webapp/jsp/report/app.jsp b/cat-home/src/main/webapp/jsp/report/app.jsp index c1142619eeb08bd6e0e53a876c75a44989d7753f..bf9c813bac2b465123e5661698238ff687d8c3ad 100644 --- a/cat-home/src/main/webapp/jsp/report/app.jsp +++ b/cat-home/src/main/webapp/jsp/report/app.jsp @@ -3,18 +3,18 @@ <%@ taglib prefix="w" uri="http://www.unidal.org/web/core"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="res" uri="http://www.unidal.org/webres"%> - - - + + + - + - +
@@ -166,11 +188,13 @@ data-date-icon="icon-calendar">
命令字 返回码 返回码 网络类型 + 渠道 平台 地区 运营商 + 返回码 网络类型 + 渠道 平台 地区 运营商 成功率 + + + +
+
+
+ diff --git a/cat-home/src/main/webapp/jsp/report/cdn.jsp b/cat-home/src/main/webapp/jsp/report/cdn.jsp index d74f4e3aa9f315b69dbb1cfb33fe07a8a2522201..9458e2f40b5e75c07adcd3b0ba714ed6e748e86e 100644 --- a/cat-home/src/main/webapp/jsp/report/cdn.jsp +++ b/cat-home/src/main/webapp/jsp/report/cdn.jsp @@ -102,6 +102,12 @@
+
+ + cdn服务商