diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/matrix/MatrixAnalyzer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/matrix/MatrixAnalyzer.java index c01c57cf22d94fa321d35ccd4c8a10cf5555994d..7063ac5e755d095f2afcfd14745800f70ee7c9a8 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/matrix/MatrixAnalyzer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/matrix/MatrixAnalyzer.java @@ -115,7 +115,7 @@ public class MatrixAnalyzer extends AbstractMessageAnalyzer 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 implem try { report.accept(new MatrixReportFilter(50)); } catch (Exception e) { - //ConcurrentModificationException + // ConcurrentModificationException report.accept(new MatrixReportFilter(50)); } Set domainNames = report.getDomainNames(); diff --git a/cat-consumer/src/test/java/com/dianping/cat/consumer/AllTests.java b/cat-consumer/src/test/java/com/dianping/cat/consumer/AllTests.java index a2b9694ff9344185d8d71e5b584582cf23edaf47..5170a618401e9f295e73dab5a0786181e2f68b42 100644 --- a/cat-consumer/src/test/java/com/dianping/cat/consumer/AllTests.java +++ b/cat-consumer/src/test/java/com/dianping/cat/consumer/AllTests.java @@ -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, diff --git a/cat-home/pom.xml b/cat-home/pom.xml index ff130153f39dfc3668950a56f97d3c9d80140f62..369f582599ccbdc4485bf7db06395814af476317 100755 --- a/cat-home/pom.xml +++ b/cat-home/pom.xml @@ -1,187 +1,203 @@ - - - com.dianping.cat - parent - 0.4.2 - - 4.0.0 - cat-home - CAT Home - war - - - com.dianping.cat - cat-consumer - - - com.dianping.cat - cat-job - - - com.google.code.gson - gson - 1.6 - - - com.site.common - web-framework - - - org.unidal.webres - WebResServer - - - javax.servlet - servlet-api - 2.5 - provided - - - javax.servlet - jstl - 1.2 - - - org.mortbay.jetty - jsp-api-2.1 - 6.1.14 - provided - - - org.mortbay.jetty - jsp-2.1 - 6.1.14 - provided - - - mysql - mysql-connector-java - runtime - - - com.site.common - test-framework - ${test-framework.scope} - - - com.site.dal - dal-jdbc - 1.1.7 - - - - cat - - - ${basedir}/src/main/resources - true - - - - - org.apache.maven.plugins - maven-war-plugin - 2.1.1 - - - - src/main/resources - false - WEB-INF/classes - - - src/main/webapp - false - - WEB-INF/web.xml - - - - - - - org.unidal.maven.plugins - codegen-maven-plugin - 1.1.9 - - - generate plexus component descriptor - process-classes - - plexus - - - com.dianping.cat.build.ComponentsConfigurator - dev - - - - generate dal jdbc model - generate-sources - - dal-jdbc - - - + + com.dianping.cat + parent + 0.4.2 + + 4.0.0 + cat-home + CAT Home + war + + + com.dianping.cat + cat-consumer + + + com.dianping.cat + cat-job + + + com.google.code.gson + gson + 1.6 + + + com.site.common + web-framework + + + org.unidal.webres + WebResServer + + + javax.servlet + servlet-api + 2.5 + provided + + + javax.servlet + jstl + 1.2 + + + org.mortbay.jetty + jsp-api-2.1 + 6.1.14 + provided + + + org.mortbay.jetty + jsp-2.1 + 6.1.14 + provided + + + mysql + mysql-connector-java + runtime + + + com.site.common + test-framework + ${test-framework.scope} + + + com.site.dal + dal-jdbc + 1.1.7 + + + freemarker + freemarker + 2.3.9 + + + + cat + + + ${basedir}/src/main/resources + true + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + + src/main/resources + false + WEB-INF/classes + + + src/main/webapp + false + + WEB-INF/web.xml + + + + + + + org.unidal.maven.plugins + codegen-maven-plugin + 1.1.9 + + + generate plexus component descriptor + process-classes + + plexus + + + com.dianping.cat.build.ComponentsConfigurator + dev + + + + generate report models + generate-sources + + dal-model + + + ${basedir}/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml, + + + + generate dal jdbc model + generate-sources + + dal-jdbc + + + - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - true - - true - lib/ - com.dianping.cat.Server - - - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.6 - 1.6 - - - - maven-eclipse-plugin - 2.8 - - true - none - - - .settings/org.eclipse.jdt.core.prefs - + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + true + + true + lib/ + com.dianping.cat.Server + + + + + + + + + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + + + maven-eclipse-plugin + 2.8 + + true + none + + + .settings/org.eclipse.jdt.core.prefs + - - - - - - - - - war - test - + + + + + + + + + war + test + diff --git a/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java b/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java index ea8480ea9c2f7bf913ea9629921181dee58c49dc..12108a3d821b71a1f25b1e170adaf8432b1fa86e 100644 --- a/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java +++ b/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java @@ -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); } diff --git a/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java index 53c99b2f9a3fe72f6616ea06ef10a3710da20224..9d6c7e423a9fe171d3f80708839683c4268dbc84 100644 --- a/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java @@ -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; } } 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 fc2fccea84e8efa1d3bce97da4e939cfe797248e..3cd84bf8d07f92414b3344cba8138528881430a7 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 @@ -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()); diff --git a/cat-home/src/main/java/com/dianping/cat/helper/TimeUtil.java b/cat-home/src/main/java/com/dianping/cat/helper/TimeUtil.java index cbf5f6228a07e32c02dc199f67aa0db6df26a075..dd612cf0f0bc2a4504b3d0384da03e036492b282 100644 --- a/cat-home/src/main/java/com/dianping/cat/helper/TimeUtil.java +++ b/cat-home/src/main/java/com/dianping/cat/helper/TimeUtil.java @@ -1,5 +1,8 @@ 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(); + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/DailyReportService.java b/cat-home/src/main/java/com/dianping/cat/report/service/DailyReportService.java new file mode 100644 index 0000000000000000000000000000000000000000..02c573aaa6b4c5cfd134bc19a64fc5baeb02508a --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/service/DailyReportService.java @@ -0,0 +1,37 @@ +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); + + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/HourlyReportService.java b/cat-home/src/main/java/com/dianping/cat/report/service/HourlyReportService.java new file mode 100644 index 0000000000000000000000000000000000000000..4d7fa4e07b975378af2fd4ded526594a0a758720 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/service/HourlyReportService.java @@ -0,0 +1,34 @@ +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); +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/MonthReportService.java b/cat-home/src/main/java/com/dianping/cat/report/service/MonthReportService.java new file mode 100644 index 0000000000000000000000000000000000000000..0c1c3ef870041645305e09abde7cadc8ad1ac214 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/service/MonthReportService.java @@ -0,0 +1,34 @@ +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); +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/impl/DailyReportServiceImpl.java b/cat-home/src/main/java/com/dianping/cat/report/service/impl/DailyReportServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..248312924cc99d02be82eb5dab9e26279f915db7 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/service/impl/DailyReportServiceImpl.java @@ -0,0 +1,294 @@ +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 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 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 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 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 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 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 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 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 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; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/alarm/entity/RowData.java b/cat-home/src/main/java/com/dianping/cat/system/alarm/entity/RowData.java new file mode 100644 index 0000000000000000000000000000000000000000..7467845f16399091adbf41cf63fc26097cb7f8a3 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/alarm/entity/RowData.java @@ -0,0 +1,26 @@ +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; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/DefaultEventDispatcher.java b/cat-home/src/main/java/com/dianping/cat/system/event/DefaultEventDispatcher.java new file mode 100644 index 0000000000000000000000000000000000000000..349ac3215a02b4d40e28c96e3852de559d8e7c74 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/DefaultEventDispatcher.java @@ -0,0 +1,30 @@ +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 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); + } + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/DefaultEventListenerRegistry.java b/cat-home/src/main/java/com/dianping/cat/system/event/DefaultEventListenerRegistry.java new file mode 100644 index 0000000000000000000000000000000000000000..ff936b891fdb2412206db66cacb8c2d58b7b3eff --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/DefaultEventListenerRegistry.java @@ -0,0 +1,30 @@ +package com.dianping.cat.system.event; + +import java.util.ArrayList; +import java.util.List; + +public class DefaultEventListenerRegistry implements EventListenerRegistry { + private List m_listeners = new ArrayList(); + + @Override + public List getListeners() { + List listeners = new ArrayList(); + 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(); + } + m_listeners.add((EventListener) listener); + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/Event.java b/cat-home/src/main/java/com/dianping/cat/system/event/Event.java new file mode 100644 index 0000000000000000000000000000000000000000..8738c67f08d06d681c69808c185d5cec891a0911 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/Event.java @@ -0,0 +1,7 @@ +package com.dianping.cat.system.event; + +public interface Event { + + public EventType getEventType(); + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/EventDispatcher.java b/cat-home/src/main/java/com/dianping/cat/system/event/EventDispatcher.java new file mode 100644 index 0000000000000000000000000000000000000000..895181cf058a58fc674b06d58769fac2c62ee169 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/EventDispatcher.java @@ -0,0 +1,5 @@ +package com.dianping.cat.system.event; + +public interface EventDispatcher { + public void dispatch(Event event); +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/EventListener.java b/cat-home/src/main/java/com/dianping/cat/system/event/EventListener.java new file mode 100644 index 0000000000000000000000000000000000000000..2cade62558f177c8c9dc8885641a4920f290a43b --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/EventListener.java @@ -0,0 +1,7 @@ +package com.dianping.cat.system.event; + +public interface EventListener{ + public boolean isEligible(Event event); + + public void onEvent(Event event); +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/EventListenerRegistry.java b/cat-home/src/main/java/com/dianping/cat/system/event/EventListenerRegistry.java new file mode 100644 index 0000000000000000000000000000000000000000..c11c9282da3f6a5b2027003662b2ddb05fa2e1fb --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/EventListenerRegistry.java @@ -0,0 +1,11 @@ +package com.dianping.cat.system.event; + +import java.util.List; + +public interface EventListenerRegistry{ + + public List getListeners(); + + public void register(EventListener listener); + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/EventQueue.java b/cat-home/src/main/java/com/dianping/cat/system/event/EventQueue.java new file mode 100644 index 0000000000000000000000000000000000000000..b9605cbf7891153e9b103dbdb0f121a114cca9c0 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/EventQueue.java @@ -0,0 +1,10 @@ +package com.dianping.cat.system.event; + + +public interface EventQueue { + public int size(); + + public T poll(); + + public boolean offer(T event); +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/event/EventType.java b/cat-home/src/main/java/com/dianping/cat/system/event/EventType.java new file mode 100644 index 0000000000000000000000000000000000000000..59a127fc08238e23ada9817cc586dffcfc5895f6 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/event/EventType.java @@ -0,0 +1,11 @@ +package com.dianping.cat.system.event; + +public enum EventType { + + ProblemDataEvent, + + ProblemViolationEvent, + + ProblemAlarmEvent, + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/notify/ReportRender.java b/cat-home/src/main/java/com/dianping/cat/system/notify/ReportRender.java new file mode 100644 index 0000000000000000000000000000000000000000..a7f73c25c2d230ae52d31592f08f152998db9971 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/notify/ReportRender.java @@ -0,0 +1,17 @@ +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); +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/notify/ScheduledTask.java b/cat-home/src/main/java/com/dianping/cat/system/notify/ScheduledTask.java new file mode 100644 index 0000000000000000000000000000000000000000..02587379bbfb2cac82a8e1cbe7b114dae78d91a7 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/notify/ScheduledTask.java @@ -0,0 +1,127 @@ +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("
"); + } + if (transactionFlag > -1) { + sb.append(m_render.renderReport(transactionReport)).append("
"); + } + if (eventFlag > -1) { + sb.append(m_render.renderReport(eventReport)).append("
"); + } + if (problemFlag > -1) { + sb.append(m_render.renderReport(problemReport)).append("
"); + } + return sb.toString(); + } + + private String renderTitle(String names, String domain) { + return "CAT Daily Report[ " + domain + " ]"; + } + + @Override + public void run() { + while (true) { + try { + List 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 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() { + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/notify/render/ReportRenderImpl.java b/cat-home/src/main/java/com/dianping/cat/system/notify/render/ReportRenderImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..3fd6c14195311241e01d7fdf5ef8352f2d6033ab --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/notify/render/ReportRenderImpl.java @@ -0,0 +1,68 @@ +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 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); + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/notify/render/TransactionRender.java b/cat-home/src/main/java/com/dianping/cat/system/notify/render/TransactionRender.java new file mode 100644 index 0000000000000000000000000000000000000000..6f0815e88bd8b62509e70355e649dc7ea9b3b68b --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/notify/render/TransactionRender.java @@ -0,0 +1,101 @@ +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 m_types = new ArrayList(); + + 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 m_result = new HashMap(); + + public Map 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; + } + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/alarm/ScheduledManager.java b/cat-home/src/main/java/com/dianping/cat/system/page/alarm/ScheduledManager.java index f4e8ec90dab1783c058e66b5d6f2c8a40df13322..02afdf10c8ad69d44b98c936d69090765073745c 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/alarm/ScheduledManager.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/alarm/ScheduledManager.java @@ -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 queryScheduledReports() throws DalException{ + List reports = m_scheduledReportDao.findAll(ScheduledReportEntity.READSET_FULL); + + return reports; + } + + public List queryEmailsBySchReportId(int scheduledReportId) throws DalException { + List emails = new ArrayList(); + List 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 userRules = new ArrayList(); try { diff --git a/cat-home/src/main/java/com/dianping/cat/system/tool/MailSMS.java b/cat-home/src/main/java/com/dianping/cat/system/tool/MailSMS.java new file mode 100644 index 0000000000000000000000000000000000000000..1b57a0e9fdf3b432d8b8fffaec7864fd632994fa --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/tool/MailSMS.java @@ -0,0 +1,10 @@ +package com.dianping.cat.system.tool; + +import java.util.List; + +public interface MailSMS { + + public boolean sendEmail(String title,String content,Listemails); + + public boolean sendSMS(String content,List phones); +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/tool/MailSMSImpl.java b/cat-home/src/main/java/com/dianping/cat/system/tool/MailSMSImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..10ba0198f36d05e94f04649feb0c8d6e33e2703d --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/tool/MailSMSImpl.java @@ -0,0 +1,21 @@ +package com.dianping.cat.system.tool; + +import java.util.List; + + +public class MailSMSImpl implements MailSMS { + + @Override + public boolean sendEmail(String title, String content, List emails) { + System.out.println(title); + System.out.println(content); + System.out.println(emails); + return false; + } + + @Override + public boolean sendSMS(String content, List phones) { + return false; + } + +} diff --git a/cat-home/src/main/resources/META-INF/dal/jdbc/alarm-dal.xml b/cat-home/src/main/resources/META-INF/dal/jdbc/alarm-dal.xml index f097fb48e579b3896e96581f8c846137f9f4d4a9..89ec3ed4237bf3f9ec26b5a44904a62a655257a3 100644 --- a/cat-home/src/main/resources/META-INF/dal/jdbc/alarm-dal.xml +++ b/cat-home/src/main/resources/META-INF/dal/jdbc/alarm-dal.xml @@ -92,7 +92,7 @@ ]]> - + FROM diff --git a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml index 09c2c5a190d99fc338ca986e06f120fab0d8a5fe..0d419adc8bfe3dcf05b1a91ec1c8345d9813ef08 100644 --- a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml +++ b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml @@ -23,6 +23,33 @@ () ]]> + + + + + + FROM
+ WHERE == ${start-date} + AND = ${domain} + AND = ${name} + ]]> + + + + + + + + FROM
+ WHERE >= ${start-date} + AND < ${end-date} + AND = ${domain} + AND = ${name} + AND type = 1 + ]]> + diff --git a/cat-home/src/main/resources/META-INF/dal/model/threshold-template-codegen.xml b/cat-home/src/main/resources/META-INF/dal/model/threshold-template-codegen.xml new file mode 100644 index 0000000000000000000000000000000000000000..f80b75929e852f7672ff69d6984c51d5b08c5e37 --- /dev/null +++ b/cat-home/src/main/resources/META-INF/dal/model/threshold-template-codegen.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cat-home/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml b/cat-home/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..4102d7732723d71f2bde801a1dd1c16c793ad334 --- /dev/null +++ b/cat-home/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/cat-home/src/main/resources/META-INF/dal/model/threshold-template-model.xml b/cat-home/src/main/resources/META-INF/dal/model/threshold-template-model.xml new file mode 100644 index 0000000000000000000000000000000000000000..9856f6f4392d3016603c6344bebefb3053932ff0 --- /dev/null +++ b/cat-home/src/main/resources/META-INF/dal/model/threshold-template-model.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 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 cec53af53b1d8ea98447f630cbb12a091a9ed3da..31eb3a85dbc5136739370e7791f0a1319af76897 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -379,6 +379,15 @@ + + com.dianping.cat.report.service.DailyReportService + com.dianping.cat.report.service.impl.DailyReportServiceImpl + + + com.dianping.cat.home.dal.report.DailyreportDao + + + com.dianping.cat.report.page.model.spi.ModelService transaction-local @@ -2505,6 +2514,9 @@ com.dianping.cat.home.dal.alarm.ScheduledReportSubscriptionDao + + com.dainping.cat.home.dal.user.DpAdminLoginDao + @@ -2516,6 +2528,15 @@ + + com.dainping.cat.home.dal.user.DpAdminLoginDao + com.dainping.cat.home.dal.user.DpAdminLoginDao + + + com.site.dal.jdbc.QueryEngine + + + com.dianping.cat.system.page.login.Handler com.dianping.cat.system.page.login.Handler @@ -2573,15 +2594,6 @@ - - com.dainping.cat.home.dal.user.DpAdminLoginDao - com.dainping.cat.home.dal.user.DpAdminLoginDao - - - com.site.dal.jdbc.QueryEngine - - - com.dianping.cat.system.alarm.DefaultAlarmCreator com.dianping.cat.system.alarm.DefaultAlarmCreator @@ -2604,5 +2616,31 @@ + + com.dianping.cat.system.tool.MailSMS + com.dianping.cat.system.tool.MailSMSImpl + + + com.dianping.cat.system.notify.ReportRender + com.dianping.cat.system.notify.render.ReportRenderImpl + + + com.dianping.cat.system.notify.ScheduledTask + com.dianping.cat.system.notify.ScheduledTask + + + com.dianping.cat.system.notify.ReportRender + + + com.dianping.cat.system.tool.MailSMS + + + com.dianping.cat.report.service.DailyReportService + + + com.dianping.cat.system.page.alarm.ScheduledManager + + + diff --git a/cat-home/src/main/resources/freemaker/transaction.ftl b/cat-home/src/main/resources/freemaker/transaction.ftl new file mode 100644 index 0000000000000000000000000000000000000000..be4faa0c9fa5f911eba5ed00d419442a933a58c4 --- /dev/null +++ b/cat-home/src/main/resources/freemaker/transaction.ftl @@ -0,0 +1,35 @@ + + +
+

TransactionReport

+
+ + + + + + + + + + + + + + <#list types as item> + + + + + + + + + + + + +
TypeTotal CountFailure CountFailure%Avg(ms)TPSLink
${item.type.id}${item.type.totalCount}${item.type.failCount}${item.type.failPercent?string("percent")}${item.type.avg?string("0.00")}${item.type.tps?string("0.00")}Graph
+ + + diff --git a/cat-home/src/test/java/com/dianping/cat/AllTests.java b/cat-home/src/test/java/com/dianping/cat/AllTests.java index cefe79c758b44f1be0981db6feeffc31d8ecd9c1..f43e643fb9f3148d11ea368f7047611e7a6e4b8d 100755 --- a/cat-home/src/test/java/com/dianping/cat/AllTests.java +++ b/cat-home/src/test/java/com/dianping/cat/AllTests.java @@ -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 { } diff --git a/cat-home/src/test/java/com/dianping/cat/system/notify/TransactionRenderTest.java b/cat-home/src/test/java/com/dianping/cat/system/notify/TransactionRenderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f7a9369eb63345fdafd5d6ac6092e1e5bbe20144 --- /dev/null +++ b/cat-home/src/test/java/com/dianping/cat/system/notify/TransactionRenderTest.java @@ -0,0 +1,25 @@ +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*", "")); + + } +} diff --git a/cat-home/src/test/resources/com/dianping/cat/system/notify/Transaction.xml b/cat-home/src/test/resources/com/dianping/cat/system/notify/Transaction.xml new file mode 100755 index 0000000000000000000000000000000000000000..3101ba3fd5a2547cc6ff6ed7cf46df1ae9c21e7a --- /dev/null +++ b/cat-home/src/test/resources/com/dianping/cat/system/notify/Transaction.xml @@ -0,0 +1,22 @@ + + Cat + 192.168.165.1 + + + Cat-c0a8a501-1337230848968-0 + + Cat-c0a8a501-1337230848968-0 + + + + + + Cat-c0a8a501-1337230896586-0 + + Cat-c0a8a501-1337230896586-0 + + + + + + diff --git a/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt b/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt new file mode 100644 index 0000000000000000000000000000000000000000..581dd4a3b1c6b0bec83b02d66d45f27bc32d9b54 --- /dev/null +++ b/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt @@ -0,0 +1,44 @@ + + +
+

TransactionReport

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeTotal CountFailure CountFailure%Avg(ms)TPSLink
Task1200%24.960.00Graph
URL100%39780.330.00Graph
+ + + + diff --git a/dog-home/src/main/webapp/template/event.vm b/dog-home/src/main/webapp/template/event.vm index 6bb740be5ccfeffc826b5f5e1c9ea8b3e6d54586..80ab7fd423b4f936e64c20c0db2cdad13e5cf06c 100644 --- a/dog-home/src/main/webapp/template/event.vm +++ b/dog-home/src/main/webapp/template/event.vm @@ -19,6 +19,26 @@ Link + + <#list type as typeList> + + ${type.totalCount} + ${type.failCount} + ${type.failPercent} + 趋势图 + ${service.avg[0]} + ${service.count[1]} + ${service.avg[1]} + ${service.max[1]} + ${service.count[2]} + ${service.avg[2]} + ${service.max[2]} + ${service.count[3]} + ${service.count[4]} + ${service.avg[4]} + ${service.max[4]} + + #foreach( $type in $typeList)