提交 64bece90 编写于 作者: Y youyong

modify the notify

上级 4e5ef876
......@@ -115,7 +115,7 @@ public class MatrixAnalyzer extends AbstractMessageAnalyzer<MatrixReport> implem
if (shouldDiscard((Transaction) message)) {
return;
}
if (messageType.equals("URL") || messageType.equals("Service")) {
if (messageType.equals("URL") || messageType.equals("Service") || messageType.equals("PigeonService")) {
Matrix matrix = report.findOrCreateMatrix(message.getName());
matrix.setType(message.getType());
matrix.setName(message.getName());
......@@ -214,7 +214,7 @@ public class MatrixAnalyzer extends AbstractMessageAnalyzer<MatrixReport> implem
try {
report.accept(new MatrixReportFilter(50));
} catch (Exception e) {
//ConcurrentModificationException
// ConcurrentModificationException
report.accept(new MatrixReportFilter(50));
}
Set<String> domainNames = report.getDomainNames();
......
......@@ -7,29 +7,31 @@ import org.junit.runners.Suite.SuiteClasses;
import com.dianping.cat.consumer.cross.ParseCrossInfoTest;
import com.dianping.cat.consumer.ip.IpReportTest;
import com.dianping.cat.consumer.matrix.MatrixReportFilterTest;
import com.dianping.cat.consumer.problem.model.ProblemReportTest;
import com.dianping.cat.consumer.transaction.FormatTest;
import com.dianping.cat.consumer.transaction.GsonTest;
import com.dianping.cat.consumer.transaction.NumberFormatTest;
import com.dianping.cat.consumer.transaction.TransactionAnalyzerTest;
import com.dianping.cat.consumer.transaction.TransactionReportFilterTest;
import com.dianping.cat.consumer.transaction.TransactionReportMessageAnalyzerTest;
import com.dianping.cat.consumer.transaction.TransactionReportTest;
@RunWith(Suite.class)
@SuiteClasses({
/* .ip */
IpReportTest.class,
//OneAnalyzerTwoDurationTest.class,
//TransactionAnalyzerTest.class,
//ProblemReportTest.class,
//TransactionReportMessageAnalyzerTest.class,
/* .ip */
IpReportTest.class,
//TransactionReportTest.class,
TransactionAnalyzerTest.class,
// ManyAnalyzerTest.class,
TransactionReportMessageAnalyzerTest.class,
// OneAnalyzerTwoDurationTest.class,
TransactionReportTest.class,
ProblemReportTest.class,
ManyAnalyzerTest.class,
FormatTest.class, GsonTest.class,
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.dianping.cat</groupId>
<artifactId>parent</artifactId>
<version>0.4.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cat-home</artifactId>
<name>CAT Home</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-consumer</artifactId>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-job</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>com.site.common</groupId>
<artifactId>web-framework</artifactId>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.site.common</groupId>
<artifactId>test-framework</artifactId>
<scope>${test-framework.scope}</scope>
</dependency>
<dependency>
<groupId>com.site.dal</groupId>
<artifactId>dal-jdbc</artifactId>
<version>1.1.7</version>
</dependency>
</dependencies>
<build>
<finalName>cat</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<directory>src/main/webapp</directory>
<filtering>false</filtering>
<includes>
<include>WEB-INF/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.unidal.maven.plugins</groupId>
<artifactId>codegen-maven-plugin</artifactId>
<version>1.1.9</version>
<executions>
<execution>
<id>generate plexus component descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>plexus</goal>
</goals>
<configuration>
<className>com.dianping.cat.build.ComponentsConfigurator</className>
<env>dev</env>
</configuration>
</execution>
<execution>
<id>generate dal jdbc model</id>
<phase>generate-sources</phase>
<goals>
<goal>dal-jdbc</goal>
</goals>
<configuration>
<manifest><![CDATA[
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.dianping.cat</groupId>
<artifactId>parent</artifactId>
<version>0.4.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cat-home</artifactId>
<name>CAT Home</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-consumer</artifactId>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-job</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>com.site.common</groupId>
<artifactId>web-framework</artifactId>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.site.common</groupId>
<artifactId>test-framework</artifactId>
<scope>${test-framework.scope}</scope>
</dependency>
<dependency>
<groupId>com.site.dal</groupId>
<artifactId>dal-jdbc</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
</dependencies>
<build>
<finalName>cat</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<targetPath>WEB-INF/classes</targetPath>
</resource>
<resource>
<directory>src/main/webapp</directory>
<filtering>false</filtering>
<includes>
<include>WEB-INF/web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.unidal.maven.plugins</groupId>
<artifactId>codegen-maven-plugin</artifactId>
<version>1.1.9</version>
<executions>
<execution>
<id>generate plexus component descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>plexus</goal>
</goals>
<configuration>
<className>com.dianping.cat.build.ComponentsConfigurator</className>
<env>dev</env>
</configuration>
</execution>
<execution>
<id>generate report models</id>
<phase>generate-sources</phase>
<goals>
<goal>dal-model</goal>
</goals>
<configuration>
<manifest>${basedir}/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml,</manifest>
</configuration>
</execution>
<execution>
<id>generate dal jdbc model</id>
<phase>generate-sources</phase>
<goals>
<goal>dal-jdbc</goal>
</goals>
<configuration>
<manifest><![CDATA[
${basedir}/src/main/resources/META-INF/dal/jdbc/report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/alarm-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/notification-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/user-manifest.xml,
]]></manifest>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.dianping.cat.Server</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<downloadSources>true</downloadSources>
<ajdtVersion>none</ajdtVersion>
<additionalConfig>
<file>
<name>.settings/org.eclipse.jdt.core.prefs</name>
<content><![CDATA[org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.dianping.cat.Server</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<downloadSources>true</downloadSources>
<ajdtVersion>none</ajdtVersion>
<additionalConfig>
<file>
<name>.settings/org.eclipse.jdt.core.prefs</name>
<content><![CDATA[org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.compliance=1.6]]></content>
</file>
</additionalConfig>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<properties>
<packaging>war</packaging>
<test-framework.scope>test</test-framework.scope>
</properties>
</file>
</additionalConfig>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<properties>
<packaging>war</packaging>
<test-framework.scope>test</test-framework.scope>
</properties>
</project>
......@@ -13,6 +13,7 @@ import com.dianping.cat.report.task.DailyTaskProducer;
import com.dianping.cat.report.task.TaskConsumer;
import com.dianping.cat.report.task.monthreport.MonthReportBuilderTask;
import com.dianping.cat.system.alarm.DefaultAlarmCreator;
import com.dianping.cat.system.notify.ScheduledTask;
import com.site.helper.Threads;
import com.site.initialization.AbstractModule;
import com.site.initialization.Module;
......@@ -41,9 +42,13 @@ public class CatHomeModule extends AbstractModule {
}
DefaultAlarmCreator alarmCreator = ctx.lookup(DefaultAlarmCreator.class);
ScheduledTask scheduledTask = ctx.lookup(ScheduledTask.class);
if (serverConfigManager.isJobMachine()) {
Threads.forGroup("Alarm").start(alarmCreator);
Threads.forGroup("Cat-Alarm").start(alarmCreator);
Threads.forGroup("Cat-Alarm").start(scheduledTask);
}
// OtherJobReport tuangouMonth = ctx.lookup(OtherJobReport.class);
// Threads.forGroup("Cat").start(tuangouMonth);
}
......
......@@ -8,7 +8,14 @@ import com.dianping.cat.home.dal.alarm.AlarmRuleDao;
import com.dianping.cat.home.dal.alarm.AlarmTemplateDao;
import com.dianping.cat.home.dal.alarm.ScheduledReportDao;
import com.dianping.cat.report.page.model.spi.ModelService;
import com.dianping.cat.report.service.DailyReportService;
import com.dianping.cat.system.alarm.DefaultAlarmCreator;
import com.dianping.cat.system.notify.ReportRender;
import com.dianping.cat.system.notify.ScheduledTask;
import com.dianping.cat.system.notify.render.ReportRenderImpl;
import com.dianping.cat.system.page.alarm.ScheduledManager;
import com.dianping.cat.system.tool.MailSMS;
import com.dianping.cat.system.tool.MailSMSImpl;
import com.site.lookup.configuration.AbstractResourceConfigurator;
import com.site.lookup.configuration.Component;
......@@ -21,6 +28,15 @@ public class AlarmComponentConfigurator extends AbstractResourceConfigurator {
all.add(C(DefaultAlarmCreator.class)//
.req(AlarmRuleDao.class, AlarmTemplateDao.class, ReportDao.class, ScheduledReportDao.class)//
.req(ModelService.class, "event"));
all.add(C(MailSMS.class, MailSMSImpl.class));
all.add(C(ReportRender.class, ReportRenderImpl.class));
all.add(C(ScheduledTask.class).//
req(ReportRender.class, MailSMS.class)//
.req(DailyReportService.class, ScheduledManager.class));
return all;
}
}
......@@ -20,6 +20,8 @@ import com.dianping.cat.report.graph.GraphBuilder;
import com.dianping.cat.report.graph.ValueTranslater;
import com.dianping.cat.report.page.cross.DomainManager;
import com.dianping.cat.report.page.health.HistoryGraphs;
import com.dianping.cat.report.service.impl.DailyReportServiceImpl;
import com.dianping.cat.report.service.DailyReportService;
import com.dianping.cat.report.task.DailyTaskProducer;
import com.dianping.cat.report.task.DefaultTaskConsumer;
import com.dianping.cat.report.task.TaskConsumer;
......@@ -140,9 +142,13 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(ModuleManager.class, DefaultModuleManager.class) //
.config(E("topLevelModules").value(CatHomeModule.ID)));
// TODO delete
all.add(C(OtherJobReport.class).//
req(DailyreportDao.class, DomainManager.class));
all.add(C(DailyReportService.class, DailyReportServiceImpl.class)//
.req(DailyreportDao.class));
// model service
all.addAll(new ServiceComponentConfigurator().defineComponents());
......
package com.dianping.cat.helper;
import java.util.Calendar;
import java.util.Date;
public class TimeUtil {
public static final long ONE_MINUTE = 60 * 1000L;
......@@ -9,4 +12,15 @@ public class TimeUtil {
public static final long ONE_DAY = 24 * ONE_HOUR;
public static final long ONE_WEEK = 7 * ONE_DAY;
public static Date getCurrentDay() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.database.model.entity.DatabaseReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.sql.model.entity.SqlReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
public interface DailyReportService {
//query many daily report
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
public EventReport queryEventReport(String domain, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public HeartbeatReport queryHeartbeatReport(String domain, Date start, Date end);
public MatrixReport queryMatrixReport(String domain, Date start, Date end);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public DatabaseReport queryDatabaseReport(String database, Date start, Date end);
public HealthReport queryHealthReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.database.model.entity.DatabaseReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.sql.model.entity.SqlReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
public interface HourlyReportService {
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
public EventReport queryEventReport(String domain, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public HeartbeatReport queryHeartbeatReport(String domain, Date start, Date end);
public MatrixReport queryMatrixReport(String domain, Date start, Date end);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public DatabaseReport queryDatabaseReport(String database, Date start, Date end);
public HealthReport queryHealthReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.database.model.entity.DatabaseReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.sql.model.entity.SqlReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
public interface MonthReportService {
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
public EventReport queryEventReport(String domain, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public HeartbeatReport queryHeartbeatReport(String domain, Date start, Date end);
public MatrixReport queryMatrixReport(String domain, Date start, Date end);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public DatabaseReport queryDatabaseReport(String database, Date start, Date end);
public HealthReport queryHealthReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service.impl;
import java.util.Date;
import java.util.List;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.database.model.entity.DatabaseReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.sql.model.entity.SqlReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.home.dal.report.Dailyreport;
import com.dianping.cat.home.dal.report.DailyreportDao;
import com.dianping.cat.home.dal.report.DailyreportEntity;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.page.model.cross.CrossReportMerger;
import com.dianping.cat.report.page.model.database.DatabaseReportMerger;
import com.dianping.cat.report.page.model.event.EventReportMerger;
import com.dianping.cat.report.page.model.heartbeat.HeartbeatReportMerger;
import com.dianping.cat.report.page.model.matrix.MatrixReportMerger;
import com.dianping.cat.report.page.model.problem.ProblemReportMerger;
import com.dianping.cat.report.page.model.sql.SqlReportMerger;
import com.dianping.cat.report.page.model.transaction.TransactionReportMerger;
import com.dianping.cat.report.service.DailyReportService;
import com.dianping.cat.report.task.health.HealthReportMerger;
import com.site.lookup.annotation.Inject;
public class DailyReportServiceImpl implements DailyReportService {
@Inject
private DailyreportDao m_dailyreportDao;
@Override
public TransactionReport queryTransactionReport(String domain, Date start, Date end) {
TransactionReportMerger merger = new TransactionReportMerger(new TransactionReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "transaction",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
TransactionReport reportModel = com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser
.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "transaction", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
TransactionReport transactionReport = merger.getTransactionReport();
transactionReport.setStartTime(start);
transactionReport.setEndTime(end);
return transactionReport;
}
@Override
public EventReport queryEventReport(String domain, Date start, Date end) {
EventReportMerger merger = new EventReportMerger(new EventReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "event",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
EventReport reportModel = com.dianping.cat.consumer.event.model.transform.DefaultSaxParser.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "event", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
EventReport eventReport = merger.getEventReport();
eventReport.setStartTime(start);
eventReport.setEndTime(end);
return eventReport;
}
@Override
public ProblemReport queryProblemReport(String domain, Date start, Date end) {
ProblemReportMerger merger = new ProblemReportMerger(new ProblemReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "problem",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
ProblemReport reportModel = com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser
.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "problem", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
ProblemReport problemReport = merger.getProblemReport();
problemReport.setStartTime(start);
problemReport.setEndTime(end);
return problemReport;
}
@Override
public HeartbeatReport queryHeartbeatReport(String domain, Date start, Date end) {
HeartbeatReportMerger merger = new HeartbeatReportMerger(new HeartbeatReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "heartbeat",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
HeartbeatReport reportModel = com.dianping.cat.consumer.heartbeat.model.transform.DefaultSaxParser
.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logHeartbeat("ErrorXML", "heartbeat", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
HeartbeatReport heartbeatReport = merger.getHeartbeatReport();
heartbeatReport.setStartTime(start);
heartbeatReport.setEndTime(end);
return heartbeatReport;
}
@Override
public MatrixReport queryMatrixReport(String domain, Date start, Date end) {
MatrixReportMerger merger = new MatrixReportMerger(new MatrixReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "matrix",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
MatrixReport reportModel = com.dianping.cat.consumer.matrix.model.transform.DefaultSaxParser.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "matrix", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
MatrixReport matrixReport = merger.getMatrixReport();
matrixReport.setStartTime(start);
matrixReport.setEndTime(end);
return matrixReport;
}
@Override
public CrossReport queryCrossReport(String domain, Date start, Date end) {
CrossReportMerger merger = new CrossReportMerger(new CrossReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "cross",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
CrossReport reportModel = com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "cross", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
CrossReport crossReport = merger.getCrossReport();
crossReport.setStartTime(start);
crossReport.setEndTime(end);
return crossReport;
}
@Override
public SqlReport querySqlReport(String domain, Date start, Date end) {
SqlReportMerger merger = new SqlReportMerger(new SqlReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "sql",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
SqlReport reportModel = com.dianping.cat.consumer.sql.model.transform.DefaultSaxParser.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "sql", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
SqlReport sqlReport = merger.getSqlReport();
sqlReport.setStartTime(start);
sqlReport.setEndTime(end);
return sqlReport;
}
@Override
public DatabaseReport queryDatabaseReport(String database, Date start, Date end) {
DatabaseReportMerger merger = new DatabaseReportMerger(new DatabaseReport(database));
try {
List<Dailyreport> reports = m_dailyreportDao.findDatabaseAllByDomainNameDuration(start, end, database, "database",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
DatabaseReport reportModel = com.dianping.cat.consumer.database.model.transform.DefaultSaxParser
.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "database", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
DatabaseReport databaseReport = merger.getDatabaseReport();
databaseReport.setStartTime(start);
databaseReport.setEndTime(end);
return databaseReport;
}
@Override
public HealthReport queryHealthReport(String domain, Date start, Date end) {
HealthReportMerger merger = new HealthReportMerger(new HealthReport(domain));
try {
List<Dailyreport> reports = m_dailyreportDao.findAllByDomainNameDuration(start, end, domain, "health",
DailyreportEntity.READSET_FULL);
for (Dailyreport report : reports) {
String xml = report.getContent();
try {
HealthReport reportModel = com.dianping.cat.consumer.health.model.transform.DefaultSaxParser
.parse(xml);
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
Cat.getProducer().logEvent("ErrorXML", "health", Event.SUCCESS, xml);
}
}
} catch (Exception e) {
Cat.logError(e);
}
HealthReport healthReport = merger.getHealthReport();
healthReport.setStartTime(start);
healthReport.setEndTime(end);
return healthReport;
}
}
package com.dianping.cat.system.alarm.entity;
import java.util.Date;
public class RowData {
private Date m_date;
private long m_count;
public Date getDate() {
return m_date;
}
public void setDate(Date date) {
m_date = date;
}
public long getCount() {
return m_count;
}
public void setCount(long count) {
m_count = count;
}
}
package com.dianping.cat.system.event;
import java.util.List;
import com.dianping.cat.Cat;
import com.site.lookup.annotation.Inject;
public class DefaultEventDispatcher implements EventDispatcher {
@Inject
private EventListenerRegistry m_registry;
@Override
public void dispatch(Event event) {
List<EventListener> listeners = m_registry.getListeners();
if (listeners != null && !listeners.isEmpty()) {
for (EventListener listener : listeners) {
try {
if (listener.isEligible(event)) {
listener.onEvent(event);
}
} catch (Exception e) {
Cat.getProducer().logError(e);
}
}
} else {
Cat.getProducer().logEvent("UnhandledEvent", event.getEventType().getClass().getName(), "0", null);
}
}
}
package com.dianping.cat.system.event;
import java.util.ArrayList;
import java.util.List;
public class DefaultEventListenerRegistry implements EventListenerRegistry {
private List<EventListener> m_listeners = new ArrayList<EventListener>();
@Override
public List<EventListener> getListeners() {
List<EventListener> listeners = new ArrayList<EventListener>();
synchronized (m_listeners) {
for (EventListener listener : m_listeners) {
listeners.add(listener);
}
}
return listeners;
}
@Override
public void register(EventListener listener) {
synchronized (m_listeners) {
if (m_listeners == null) {
m_listeners = new ArrayList<EventListener>();
}
m_listeners.add((EventListener) listener);
}
}
}
package com.dianping.cat.system.event;
public interface Event {
public EventType getEventType();
}
package com.dianping.cat.system.event;
public interface EventDispatcher {
public void dispatch(Event event);
}
package com.dianping.cat.system.event;
public interface EventListener{
public boolean isEligible(Event event);
public void onEvent(Event event);
}
package com.dianping.cat.system.event;
import java.util.List;
public interface EventListenerRegistry{
public List<EventListener> getListeners();
public void register(EventListener listener);
}
package com.dianping.cat.system.event;
public interface EventQueue<T extends Event> {
public int size();
public T poll();
public boolean offer(T event);
}
package com.dianping.cat.system.event;
public enum EventType {
ProblemDataEvent,
ProblemViolationEvent,
ProblemAlarmEvent,
}
package com.dianping.cat.system.notify;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
public interface ReportRender {
public String renderReport(TransactionReport report);
public String renderReport(EventReport report);
public String renderReport(ProblemReport report);
public String renderReport(HealthReport report);
}
package com.dianping.cat.system.notify;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.home.dal.alarm.ScheduledReport;
import com.dianping.cat.message.Event;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.report.service.DailyReportService;
import com.dianping.cat.system.page.alarm.ScheduledManager;
import com.dianping.cat.system.tool.MailSMS;
import com.site.dal.jdbc.DalException;
import com.site.helper.Threads.Task;
import com.site.lookup.annotation.Inject;
public class ScheduledTask implements Task {
@Inject
private MailSMS m_mailSms;
@Inject
private ReportRender m_render;
@Inject
private DailyReportService m_dailyReportService;
@Inject
private ScheduledManager m_scheduledManager;
@Override
public String getName() {
return "ScheduledDailyReport";
}
private long getSleepTime() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR, 1);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis() - System.currentTimeMillis();
}
private String renderContent(String names, String domain) {
int healthFlag = names.indexOf("health");
int transactionFlag = names.indexOf("transaction");
int eventFlag = names.indexOf("event");
int problemFlag = names.indexOf("problem");
Date end = TimeUtil.getCurrentDay();
Date start = new Date(end.getTime() - TimeUtil.ONE_DAY);
TransactionReport transactionReport = m_dailyReportService.queryTransactionReport(domain, start, end);
EventReport eventReport = m_dailyReportService.queryEventReport(domain, start, end);
ProblemReport problemReport = m_dailyReportService.queryProblemReport(domain, start, end);
HealthReport heathReport = m_dailyReportService.queryHealthReport(domain, start, end);
StringBuilder sb = new StringBuilder(10240);
if (healthFlag > -1) {
sb.append(m_render.renderReport(heathReport)).append("</br>");
}
if (transactionFlag > -1) {
sb.append(m_render.renderReport(transactionReport)).append("</br>");
}
if (eventFlag > -1) {
sb.append(m_render.renderReport(eventReport)).append("</br>");
}
if (problemFlag > -1) {
sb.append(m_render.renderReport(problemReport)).append("</br>");
}
return sb.toString();
}
private String renderTitle(String names, String domain) {
return "CAT Daily Report[ " + domain + " ]";
}
@Override
public void run() {
while (true) {
try {
List<ScheduledReport> reports = m_scheduledManager.queryScheduledReports();
for (ScheduledReport report : reports) {
String domain = report.getDomain();
Transaction t = Cat.newTransaction("ScheduledReport", domain);
try {
String names = report.getNames();
String content = renderContent(names, domain);
String title = renderTitle(names, domain);
List<String> emails = m_scheduledManager.queryEmailsBySchReportId(report.getId());
m_mailSms.sendEmail(title, content, emails);
t.setStatus(Transaction.SUCCESS);
Cat.getProducer().logEvent("ScheduledReport", "Email", Event.SUCCESS, emails.toString());
} catch (DalException e) {
Cat.logError(e);
t.setStatus(e);
}
t.complete();
break;
}
} catch (Exception e) {
Cat.logError(e);
}
try {
Thread.sleep(getSleepTime());
} catch (Exception e) {
// ignore;
}
}
}
@Override
public void shutdown() {
}
}
package com.dianping.cat.system.notify.render;
import java.io.StringWriter;
import java.util.Map;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.health.model.entity.HealthReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.system.notify.ReportRender;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class ReportRenderImpl implements ReportRender, Initializable {
public Configuration m_configuration;
@Override
public String renderReport(TransactionReport report) {
TransactionRender entity =new TransactionRender(report.getStartTime(),report.getDomain());
entity.visitTransactionReport(report);
Map<Object, Object> root = entity.getRenderResult();
StringWriter sw = new StringWriter(5000);
try {
Template t = m_configuration.getTemplate("transaction.ftl");
t.process(root, sw);
} catch (Exception e) {
e.printStackTrace();
Cat.logError(e);
}
return sw.toString();
}
@Override
public String renderReport(EventReport report) {
return "";
}
@Override
public String renderReport(ProblemReport report) {
return "";
}
@Override
public String renderReport(HealthReport report) {
return "";
}
@Override
public void initialize() throws InitializationException {
m_configuration = new Configuration();
m_configuration.setDefaultEncoding("UTF-8");
try {
m_configuration.setClassForTemplateLoading(ReportRenderImpl.class, "/freemaker");
} catch (Exception e) {
Cat.logError(e);
}
}
}
package com.dianping.cat.system.notify.render;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionType;
import com.dianping.cat.consumer.transaction.model.transform.BaseVisitor;
import com.dianping.cat.helper.TimeUtil;
public class TransactionRender extends BaseVisitor {
private String m_domain;
private String m_dateStr;
private Date m_date;
private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMddHH");
private List<Type> m_types = new ArrayList<Type>();
private String m_transactionLink = "http://cat.dianpingoa.com/cat/r/t?op=history&domain=%s&date=%s&reportType=day";
private String m_typeGraphLink = "http://cat.dianpingoa.com/cat/r/t?op=historyGraph&domain=%s&date=%s&ip=All&reportType=day&type=%s";
private Map<Object, Object> m_result = new HashMap<Object, Object>();
public Map<Object, Object> getRenderResult() {
return m_result;
}
public TransactionRender(Date date, String domain) {
m_domain = domain;
m_date = date;
m_dateStr = m_sdf.format(date);
}
@Override
public void visitTransactionReport(TransactionReport transactionReport) {
super.visitTransactionReport(transactionReport);
Date lastDay = new Date(m_date.getTime() - TimeUtil.ONE_DAY);
Date lastWeek = new Date(m_date.getTime() - 7 * TimeUtil.ONE_DAY);
String currentUrl = buildTransactionUrl(m_date);
String lastDayUrl = buildTransactionUrl(lastDay);
String lastWeekUrl = buildTransactionUrl(lastWeek);
m_result.put("current", currentUrl);
m_result.put("lastDay", lastDayUrl);
m_result.put("lastWeek", lastWeekUrl);
m_result.put("types", m_types);
}
@Override
public void visitType(TransactionType type) {
Type temp = new Type();
type.setTps(type.getTotalCount() / (double) TimeUtil.ONE_DAY);
temp.setType(type);
temp.setUrl(buildGraphUrl(type));
m_types.add(temp);
}
private String buildTransactionUrl(Date date) {
String dateStr = m_sdf.format(m_date);
return String.format(m_transactionLink, m_domain, dateStr);
}
private String buildGraphUrl(TransactionType type) {
return String.format(m_typeGraphLink, m_domain, m_dateStr, type.getId());
}
public static class Type {
private TransactionType m_type;
private String m_url;
public TransactionType getType() {
return m_type;
}
public void setType(TransactionType type) {
m_type = type;
}
public String getUrl() {
return m_url;
}
public void setUrl(String url) {
m_url = url;
}
}
}
......@@ -3,6 +3,9 @@ package com.dianping.cat.system.page.alarm;
import java.util.ArrayList;
import java.util.List;
import com.dainping.cat.home.dal.user.DpAdminLogin;
import com.dainping.cat.home.dal.user.DpAdminLoginDao;
import com.dainping.cat.home.dal.user.DpAdminLoginEntity;
import com.dianping.cat.Cat;
import com.dianping.cat.home.dal.alarm.ScheduledReport;
import com.dianping.cat.home.dal.alarm.ScheduledReportDao;
......@@ -22,6 +25,30 @@ public class ScheduledManager {
@Inject
private ScheduledReportSubscriptionDao m_scheduledReportSubscriptionDao;
@Inject
private DpAdminLoginDao m_loginDao;
public List<ScheduledReport> queryScheduledReports() throws DalException{
List<ScheduledReport> reports = m_scheduledReportDao.findAll(ScheduledReportEntity.READSET_FULL);
return reports;
}
public List<String> queryEmailsBySchReportId(int scheduledReportId) throws DalException {
List<String> emails = new ArrayList<String>();
List<ScheduledReportSubscription> subscriptions = m_scheduledReportSubscriptionDao.findByScheduledReportId(scheduledReportId,
ScheduledReportSubscriptionEntity.READSET_FULL);
for (ScheduledReportSubscription subscription : subscriptions) {
DpAdminLogin login = m_loginDao.findByPK(subscription.getUserId(), DpAdminLoginEntity.READSET_FULL);
emails.add(login.getEmail());
}
if (emails.size() == 0) {
emails.add("yong.you@dianping.com");
}
return emails;
}
public void queryScheduledReports(Model model,int userId) {
List<UserReportSubState> userRules = new ArrayList<UserReportSubState>();
try {
......
package com.dianping.cat.system.tool;
import java.util.List;
public interface MailSMS {
public boolean sendEmail(String title,String content,List<String>emails);
public boolean sendSMS(String content,List<String> phones);
}
package com.dianping.cat.system.tool;
import java.util.List;
public class MailSMSImpl implements MailSMS {
@Override
public boolean sendEmail(String title, String content, List<String> emails) {
System.out.println(title);
System.out.println(content);
System.out.println(emails);
return false;
}
@Override
public boolean sendSMS(String content, List<String> phones) {
return false;
}
}
......@@ -92,7 +92,7 @@
]]></statement>
</query>
<query name="find-by-scheduled-report-id" type="SELECT" multiple="true">
<param name="user-id" />
<param name="scheduled-report-id" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
......
......@@ -23,6 +23,33 @@
(<VALUES/>)
]]></statement>
</query>
<query name="find-report-by-domain-name-period" type="SELECT">
<param name="start-date" />
<param name="domain" />
<param name="name" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='period'/> == ${start-date}
AND <FIELD name='domain'/> = ${domain}
AND <FIELD name='name'/> = ${name}
]]></statement>
</query>
<query name="find-all-by-domain-name-duration" type="SELECT" multiple="true">
<param name="start-date" />
<param name="end-date" />
<param name="domain" />
<param name="name" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='period'/> >= ${start-date}
AND <FIELD name='period'/> < ${end-date}
AND <FIELD name='domain'/> = ${domain}
AND <FIELD name='name'/> = ${name}
AND type = 1
]]></statement>
</query>
<query name="find-all-by-domain-name-duration" type="SELECT" multiple="true">
<param name="start-date" />
<param name="end-date" />
......
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="threshold-template" root="true">
<entity-ref name="connection" />
<entity-ref name="threshold" />
</entity>
<entity name="connection">
<attribute name="baseUrl" value-type="String" />
<entity-ref name="param" type="list" names="params" />
</entity>
<entity name="param">
<attribute name="type" value-type="String" key="true"/>
<attribute name="value" value-type="String" />
</entity>
<entity name="threshold">
<attribute name="period" value-type="int" />
<entity-ref name="duration" type="list" names="durations" />
</entity>
<entity name="duration">
<attribute name="id" value-type="String" />
<attribute name="min" value-type="int" />
<attribute name="max" value-type="int" />
<attribute name="interval" value-type="int" />
<attribute name="alarm" value-type="String"/>
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="threshold-template-codegen.xml" />
<file path="threshold-template-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.home.template" enable-merger="true" enable-json-builder="true"
enable-xml-parser="true" enable-sax-parser="true" enable-json-parser="true" enable-base-visitor="true">
<entity name="threshold-template" root="true">
<entity-ref name="connection" />
<entity-ref name="threshold" />
</entity>
<entity name="connection">
<attribute name="baseUrl" value-type="String" />
<entity-ref name="param" type="map" names="params" method-find-or-create="true" />
</entity>
<entity name="param">
<attribute name="type" value-type="String" key="true"/>
<attribute name="value" value-type="String" />
</entity>
<entity name="threshold">
<attribute name="period" value-type="int" />
<entity-ref name="duration" type="map" names="durations" method-find-or-create="true" />
</entity>
<entity name="duration">
<attribute name="id" value-type="String" key="true"/>
<attribute name="min" value-type="int" />
<attribute name="max" value-type="int" />
<attribute name="interval" value-type="int" />
</entity>
</model>
......@@ -379,6 +379,15 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.service.DailyReportService</role>
<implementation>com.dianping.cat.report.service.impl.DailyReportServiceImpl</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.DailyreportDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
<role-hint>transaction-local</role-hint>
......@@ -2505,6 +2514,9 @@
<requirement>
<role>com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.home.dal.user.DpAdminLoginDao</role>
</requirement>
</requirements>
</component>
<component>
......@@ -2516,6 +2528,15 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dainping.cat.home.dal.user.DpAdminLoginDao</role>
<implementation>com.dainping.cat.home.dal.user.DpAdminLoginDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.login.Handler</role>
<implementation>com.dianping.cat.system.page.login.Handler</implementation>
......@@ -2573,15 +2594,6 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dainping.cat.home.dal.user.DpAdminLoginDao</role>
<implementation>com.dainping.cat.home.dal.user.DpAdminLoginDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.alarm.DefaultAlarmCreator</role>
<implementation>com.dianping.cat.system.alarm.DefaultAlarmCreator</implementation>
......@@ -2604,5 +2616,31 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.tool.MailSMS</role>
<implementation>com.dianping.cat.system.tool.MailSMSImpl</implementation>
</component>
<component>
<role>com.dianping.cat.system.notify.ReportRender</role>
<implementation>com.dianping.cat.system.notify.render.ReportRenderImpl</implementation>
</component>
<component>
<role>com.dianping.cat.system.notify.ScheduledTask</role>
<implementation>com.dianping.cat.system.notify.ScheduledTask</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.notify.ReportRender</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.service.DailyReportService</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.page.alarm.ScheduledManager</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
<html>
<body>
<br/>
<h3><a href="${current} target="_blank">TransactionReport</a></h3>
<table rules="all">
<tr>
</tr>
<tr>
<td></td>
<td>Type</td>
<td>Total Count</td>
<td>Failure Count</td>
<td>Failure%</td>
<td>Avg(ms)</td>
<td>TPS</td>
<td>Link</td>
<td></td>
</tr>
<#list types as item>
<tr>
<td></td>
<td>${item.type.id}</td>
<td>${item.type.totalCount}</td>
<td>${item.type.failCount}</td>
<td>${item.type.failPercent?string("percent")}</td>
<td>${item.type.avg?string("0.00")}</td>
<td>${item.type.tps?string("0.00")}</td>
<td><a href="${item.url}">Graph</a></td>
</tr>
</#list>
<tr></tr>
</table>
</body>
</html>
......@@ -32,6 +32,7 @@ import com.dianping.cat.report.task.problem.ProblemGraphCreatorTest;
import com.dianping.cat.report.task.transaction.HistoryTransactionMergerTest;
import com.dianping.cat.report.task.transaction.TransactionDailyGraphMergerTest;
import com.dianping.cat.report.task.transaction.TransactionGraphCreatorTest;
import com.dianping.cat.system.notify.TransactionRenderTest;
@RunWith(Suite.class)
@SuiteClasses({
......@@ -89,6 +90,9 @@ import com.dianping.cat.report.task.transaction.TransactionGraphCreatorTest;
TransactionGraphCreatorTest.class, EventGraphCreatorTest.class, EventDailyGraphMergerTest.class,
TransactionDailyGraphMergerTest.class, ProblemDailyGraphMergerTest.class })
TransactionDailyGraphMergerTest.class, ProblemDailyGraphMergerTest.class,
/* .render*/
TransactionRenderTest.class})
public class AllTests {
}
package com.dianping.cat.system.notify;
import junit.framework.Assert;
import org.junit.Test;
import org.unidal.webres.helper.Files;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.consumer.transaction.model.transform.DefaultDomParser;
import com.site.lookup.ComponentTestCase;
public class TransactionRenderTest extends ComponentTestCase {
@Test
public void test() throws Exception {
ReportRender render = lookup(ReportRender.class);
String excepted = Files.forIO().readFrom(getClass().getResourceAsStream("TransactionRender.txt"), "utf-8");
String oldXml = Files.forIO().readFrom(getClass().getResourceAsStream("Transaction.xml"), "utf-8");
TransactionReport report = new DefaultDomParser().parse(oldXml);
String result = render.renderReport(report);
Assert.assertEquals(excepted.replaceAll("\\s*", ""), result.replaceAll("\\s*", ""));
}
}
<transaction-report domain="Cat" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<domain>Cat</domain>
<ip>192.168.165.1</ip>
<machine ip="192.168.165.1">
<type id="Task1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.955555555" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status1" totalCount="2" failCount="0" failPercent="0.00" min="21.422" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line95Sum="28.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.333333" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model2" totalCount="1" failCount="0" failPercent="0.00" min="39780.276" max="39780.276" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line95Sum="39780.00" line95Count="1">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
</machine>
</transaction-report>
<html>
<body>
<br/>
<h3><a href="http://cat.dianpingoa.com/cat/r/t?op=history&domain=Cat&date=2012051713&reportType=day target="_blank">TransactionReport</a></h3>
<table rules="all">
<tr>
</tr>
<tr>
<td></td>
<td>Type</td>
<td>Total Count</td>
<td>Failure Count</td>
<td>Failure%</td>
<td>Avg(ms)</td>
<td>TPS</td>
<td>Link</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Task1</td>
<td>2</td>
<td>0</td>
<td>0%</td>
<td>24.96</td>
<td>0.00</td>
<td><a href="http://cat.dianpingoa.com/cat/r/t?op=historyGraph&domain=Cat&date=2012051713&ip=All&reportType=day&type=Task1">Graph</a></td>
</tr>
<tr>
<td></td>
<td>URL</td>
<td>1</td>
<td>0</td>
<td>0%</td>
<td>39780.33</td>
<td>0.00</td>
<td><a href="http://cat.dianpingoa.com/cat/r/t?op=historyGraph&domain=Cat&date=2012051713&ip=All&reportType=day&type=URL">Graph</a></td>
</tr>
<tr></tr>
</table>
</body>
</html>
......@@ -19,6 +19,26 @@
<td >Link</td>
<td ></td>
</tr>
<#list type as typeList>
<tr>
<td>${type.totalCount}</td>
<td>${type.failCount}</td>
<td>${type.failPercent}</td>
<td a href="${type.link}">趋势图</td>
<td>${service.avg[0]}</td>
<td>${service.count[1]}</td>
<td>${service.avg[1]}</td>
<td>${service.max[1]}</td>
<td>${service.count[2]}</td>
<td>${service.avg[2]}</td>
<td>${service.max[2]}</td>
<td>${service.count[3]}</td>
<td>${service.count[4]}</td>
<td>${service.avg[4]}</td>
<td>${service.max[4]}</td>
</tr>
</#list>
#foreach( $type in $typeList)
<tr>
<td ></td>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册