From 6f6c23437c60ad2a7986e6f3e62d2d8e4450ff18 Mon Sep 17 00:00:00 2001 From: "yong.you" Date: Sun, 11 Aug 2013 16:52:35 +0800 Subject: [PATCH] modify the dao and service --- .../advanced/ProductLineConfigManager.java | 5 +- .../cat/consumer/state/StateDelegate.java | 1 + .../cat/build/ComponentsConfigurator.java | 3 + .../cat/build/TaskComponentConfigurator.java | 12 +- .../com/dianping/cat/report/ReportModule.java | 4 +- .../com/dianping/cat/report/ReportPage.java | 4 +- .../dianping/cat/report/page/bug/Action.java | 28 ++++ .../dianping/cat/report/page/bug/Context.java | 7 + .../dianping/cat/report/page/bug/Handler.java | 60 ++++++++ .../dianping/cat/report/page/bug/JspFile.java | 19 +++ .../cat/report/page/bug/JspViewer.java | 20 +++ .../dianping/cat/report/page/bug/Model.java | 28 ++++ .../dianping/cat/report/page/bug/Payload.java | 44 ++++++ .../report/service/DailyReportService.java | 3 + .../report/service/HourlyReportService.java | 6 + .../report/service/MonthlyReportCache.java | 6 + .../report/service/MonthlyReportService.java | 3 + .../cat/report/service/ReportService.java | 6 + .../cat/report/service/WeeklyReportCache.java | 6 + .../report/service/WeeklyReportService.java | 3 + .../service/impl/DailyReportServiceImpl.java | 29 ++++ .../service/impl/HourlyReportServiceImpl.java | 53 +++++++ .../impl/MonthlyReportServiceImpl.java | 15 ++ .../service/impl/ReportServiceImpl.java | 36 +++++ .../service/impl/WeeklyReportServiceImpl.java | 15 ++ .../cat/report/task/bug/BugReportBuilder.java | 132 ++++++++++++++++++ .../cat/report/task/bug/BugReportMerger.java | 42 ++++++ .../report/task/bug/ProblemReportVisitor.java | 74 ++++++++++ .../cat/report/task/spi/ReportFacade.java | 5 + .../cat/system/config/BugConfigManager.java | 123 ++++++++++++++++ .../cat/system/page/config/Action.java | 2 + .../cat/system/page/config/Handler.java | 15 +- .../cat/system/page/config/JspFile.java | 4 +- .../cat/system/page/config/JspViewer.java | 3 + .../cat/system/page/config/Model.java | 10 ++ .../cat/system/page/config/Payload.java | 11 ++ .../META-INF/dal/model/bug-codegen.xml | 12 +- .../META-INF/dal/model/bug-config-codegen.xml | 9 +- .../META-INF/dal/model/bug-config-model.xml | 13 +- .../META-INF/dal/model/bug-model.xml | 22 ++- .../resources/META-INF/plexus/components.xml | 57 ++++++++ .../META-INF/wizard/webapp/wizard.xml | 3 + .../resources/config/default-bug-config.xml | 9 ++ cat-home/src/main/webapp/jsp/report/bug.jsp | 5 + .../main/webapp/jsp/system/bug/bugConfig.jsp | 49 +++++++ .../src/main/webapp/jsp/system/configTree.jsp | 2 + .../cat/report/page/bug/bug-config.xml | 20 +-- .../com/dianping/cat/report/page/bug/bug.xml | 14 +- 48 files changed, 1010 insertions(+), 42 deletions(-) create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/Action.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/Context.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/Handler.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/JspFile.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/JspViewer.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/Model.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/page/bug/Payload.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportBuilder.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportMerger.java create mode 100644 cat-home/src/main/java/com/dianping/cat/report/task/bug/ProblemReportVisitor.java create mode 100644 cat-home/src/main/java/com/dianping/cat/system/config/BugConfigManager.java create mode 100644 cat-home/src/main/resources/config/default-bug-config.xml create mode 100644 cat-home/src/main/webapp/jsp/report/bug.jsp create mode 100644 cat-home/src/main/webapp/jsp/system/bug/bugConfig.jsp diff --git a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/ProductLineConfigManager.java b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/ProductLineConfigManager.java index fe044bf27..6e8fe87a8 100644 --- a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/ProductLineConfigManager.java +++ b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/advanced/ProductLineConfigManager.java @@ -15,6 +15,7 @@ import org.codehaus.plexus.logging.LogEnabled; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; +import org.hsqldb.lib.StringUtil; import org.unidal.dal.jdbc.DalException; import org.unidal.dal.jdbc.DalNotFoundException; import org.unidal.helper.Files; @@ -129,7 +130,9 @@ public class ProductLineConfigManager implements Initializable, LogEnabled { Map productLines = new TreeMap(); for (ProductLine line : getCompany().getProductLines().values()) { - productLines.put(line.getId(), line); + if (!StringUtil.isEmpty(line.getId())) { + productLines.put(line.getId(), line); + } } return sortMap(productLines, new Comparator>() { diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateDelegate.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateDelegate.java index 3c68faae1..0d18c3946 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateDelegate.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateDelegate.java @@ -31,6 +31,7 @@ public class StateDelegate implements ReportDelegate { @Override public boolean createHourlyTask(StateReport report) { + m_taskManager.createTask(report.getStartTime(), report.getDomain(), "bug", TaskProlicy.ALL_EXCLUED_HOURLY); return m_taskManager.createTask(report.getStartTime(), report.getDomain(), StateAnalyzer.ID, TaskProlicy.ALL_EXCLUED_HOURLY); } 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 5c95349b2..da617488a 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 @@ -32,6 +32,7 @@ import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.page.state.StateGraphs; import com.dianping.cat.report.service.ReportService; import com.dianping.cat.report.view.DomainNavManager; +import com.dianping.cat.system.config.BugConfigManager; import com.dianping.cat.system.config.ConfigReloadTask; import com.dianping.cat.system.config.ExceptionThresholdConfigManager; @@ -63,6 +64,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(TopologyGraphConfigManager.class).req(ConfigDao.class)); all.add(C(ExceptionThresholdConfigManager.class).req(ConfigDao.class)); + + all.add(C(BugConfigManager.class).req(ConfigDao.class)); all.add(C(TopologyGraphItemBuilder.class).req(TopologyGraphConfigManager.class)); diff --git a/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java index 5306041e0..f9bd5e655 100644 --- a/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java @@ -23,6 +23,7 @@ import com.dianping.cat.report.page.dependency.graph.TopologyGraphBuilder; import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.service.ReportService; import com.dianping.cat.report.task.DefaultTaskConsumer; +import com.dianping.cat.report.task.bug.BugReportBuilder; import com.dianping.cat.report.task.cross.CrossReportBuilder; import com.dianping.cat.report.task.dependency.DependencyReportBuilder; import com.dianping.cat.report.task.event.EventGraphCreator; @@ -93,6 +94,9 @@ public class TaskComponentConfigurator extends AbstractResourceConfigurator { .req(GraphDao.class, ReportService.class) // .req(HeartbeatGraphCreator.class)); + all.add(C(BugReportBuilder.class) + .req( ReportService.class)); + all.add(C(MatrixReportBuilder.class).req(ReportService.class)); all.add(C(SqlReportBuilder.class).req(ReportService.class, SqlMerger.class)); @@ -107,11 +111,9 @@ public class TaskComponentConfigurator extends AbstractResourceConfigurator { TopologyGraphDao.class)); all.add(C(ReportFacade.class)// - .req(TransactionReportBuilder.class, EventReportBuilder.class, - ProblemReportBuilder.class // - , HeartbeatReportBuilder.class, MatrixReportBuilder.class, - CrossReportBuilder.class // - , SqlReportBuilder.class, StateReportBuilder.class, DependencyReportBuilder.class, + .req(TransactionReportBuilder.class, EventReportBuilder.class, ProblemReportBuilder.class // + , HeartbeatReportBuilder.class, MatrixReportBuilder.class, CrossReportBuilder.class // + , SqlReportBuilder.class, StateReportBuilder.class, DependencyReportBuilder.class,BugReportBuilder.class, MetricBaselineReportBuilder.class)); return all; diff --git a/cat-home/src/main/java/com/dianping/cat/report/ReportModule.java b/cat-home/src/main/java/com/dianping/cat/report/ReportModule.java index 2021b66f1..267c687fe 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/ReportModule.java +++ b/cat-home/src/main/java/com/dianping/cat/report/ReportModule.java @@ -41,7 +41,9 @@ com.dianping.cat.report.page.jsError.Handler.class, com.dianping.cat.report.page.dependency.Handler.class, -com.dianping.cat.report.page.externalError.Handler.class +com.dianping.cat.report.page.externalError.Handler.class, + +com.dianping.cat.report.page.bug.Handler.class }) public class ReportModule extends AbstractModule { diff --git a/cat-home/src/main/java/com/dianping/cat/report/ReportPage.java b/cat-home/src/main/java/com/dianping/cat/report/ReportPage.java index 3c264db5f..f5005155d 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/ReportPage.java +++ b/cat-home/src/main/java/com/dianping/cat/report/ReportPage.java @@ -39,7 +39,9 @@ public enum ReportPage implements Page { DEPENDENCY("dependency", "dependency", "Dependency", "Dependency", true), - EXTERNALERROR("externalError", "externalError", "externalError", "ExternalError", true); + EXTERNALERROR("externalError", "externalError", "externalError", "ExternalError", true), + + BUG("bug", "bug", "Bug", "Bug", true); private String m_name; diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/Action.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Action.java new file mode 100644 index 000000000..b2ac51272 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Action.java @@ -0,0 +1,28 @@ +package com.dianping.cat.report.page.bug; + +public enum Action implements org.unidal.web.mvc.Action { + HISTORY_REPORT("history"), + + HOURLY_REPORT("view"); + + private String m_name; + + private Action(String name) { + m_name = name; + } + + public static Action getByName(String name, Action defaultAction) { + for (Action action : Action.values()) { + if (action.getName().equals(name)) { + return action; + } + } + + return defaultAction; + } + + @Override + public String getName() { + return m_name; + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/Context.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Context.java new file mode 100644 index 000000000..b77a03081 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Context.java @@ -0,0 +1,7 @@ +package com.dianping.cat.report.page.bug; + +import com.dianping.cat.report.ReportContext; + +public class Context extends ReportContext { + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Handler.java new file mode 100644 index 000000000..83d9c6646 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Handler.java @@ -0,0 +1,60 @@ +package com.dianping.cat.report.page.bug; + +import java.io.IOException; +import java.util.Date; + +import javax.servlet.ServletException; + +import com.dianping.cat.consumer.advanced.ProductLineConfigManager; +import com.dianping.cat.helper.CatString; +import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; +import com.dianping.cat.report.ReportPage; +import com.dianping.cat.report.service.ReportService; + +import org.unidal.lookup.annotation.Inject; +import org.unidal.web.mvc.PageHandler; +import org.unidal.web.mvc.annotation.InboundActionMeta; +import org.unidal.web.mvc.annotation.OutboundActionMeta; +import org.unidal.web.mvc.annotation.PayloadMeta; + +public class Handler implements PageHandler { + @Inject + private JspViewer m_jspViewer; + + @Inject + private ReportService m_reportService; + + @Inject + private ProductLineConfigManager m_configManager; + + @Override + @PayloadMeta(Payload.class) + @InboundActionMeta(name = "bug") + public void handleInbound(Context ctx) throws ServletException, IOException { + // display only, no action here + } + + @Override + @OutboundActionMeta(name = "bug") + public void handleOutbound(Context ctx) throws ServletException, IOException { + Model model = new Model(ctx); + + model.setPage(ReportPage.BUG); + m_jspViewer.view(ctx, model); + } + + private BugReport queryBugReport(Payload payload) { + Date start = null; + Date end = null; + if (payload.getAction() == Action.HOURLY_REPORT) { + start = new Date(payload.getDate()); + end = new Date(start.getTime() + TimeUtil.ONE_HOUR); + } else { + start = payload.getHistoryStartDate(); + end = payload.getHistoryEndDate(); + } + + return m_reportService.queryBugReport(CatString.CAT, start, end); + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/JspFile.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/JspFile.java new file mode 100644 index 000000000..6a744a06c --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/JspFile.java @@ -0,0 +1,19 @@ +package com.dianping.cat.report.page.bug; + +public enum JspFile { + HOURLY_REPORT("/jsp/report/bug/bug.jsp"), + + HISTORY_REPORT("/jsp/report/bug/bugHistory.jsp"), + + ; + + private String m_path; + + private JspFile(String path) { + m_path = path; + } + + public String getPath() { + return m_path; + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/JspViewer.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/JspViewer.java new file mode 100644 index 000000000..c86320e6d --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/JspViewer.java @@ -0,0 +1,20 @@ +package com.dianping.cat.report.page.bug; + +import com.dianping.cat.report.ReportPage; +import org.unidal.web.mvc.view.BaseJspViewer; + +public class JspViewer extends BaseJspViewer { + @Override + protected String getJspFilePath(Context ctx, Model model) { + Action action = model.getAction(); + + switch (action) { + case HOURLY_REPORT: + return JspFile.HOURLY_REPORT.getPath(); + case HISTORY_REPORT: + return JspFile.HISTORY_REPORT.getPath(); + } + + throw new RuntimeException("Unknown action: " + action); + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/Model.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Model.java new file mode 100644 index 000000000..1188d52e8 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Model.java @@ -0,0 +1,28 @@ +package com.dianping.cat.report.page.bug; + +import java.util.ArrayList; +import java.util.Collection; + +import com.dianping.cat.helper.CatString; +import com.dianping.cat.report.page.AbstractReportModel; + +public class Model extends AbstractReportModel { + public Model(Context ctx) { + super(ctx); + } + + @Override + public Action getDefaultAction() { + return Action.HOURLY_REPORT; + } + + @Override + public String getDomain() { + return CatString.CAT; + } + + @Override + public Collection getDomains() { + return new ArrayList(); + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/bug/Payload.java b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Payload.java new file mode 100644 index 000000000..df7454ca6 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/page/bug/Payload.java @@ -0,0 +1,44 @@ +package com.dianping.cat.report.page.bug; + +import org.unidal.web.mvc.ActionContext; +import org.unidal.web.mvc.payload.annotation.FieldMeta; + +import com.dianping.cat.report.ReportPage; +import com.dianping.cat.report.page.AbstractReportPayload; + +public class Payload extends AbstractReportPayload { + private ReportPage m_page; + + @FieldMeta("op") + private Action m_action; + + public Payload() { + super(ReportPage.BUG); + } + + @Override + public Action getAction() { + return m_action; + } + + @Override + public ReportPage getPage() { + return m_page; + } + + public void setAction(String action) { + m_action = Action.getByName(action, Action.HOURLY_REPORT); + } + + @Override + public void setPage(String page) { + m_page = ReportPage.getByName(page, ReportPage.BUG); + } + + @Override + public void validate(ActionContext ctx) { + if (m_action == null) { + m_action = Action.HOURLY_REPORT; + } + } +} 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 index 4c7e67f72..a899c5aa1 100644 --- 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 @@ -11,6 +11,7 @@ import com.dianping.cat.consumer.sql.model.entity.SqlReport; import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.DailyReport; +import com.dianping.cat.home.bug.entity.BugReport; public interface DailyReportService { @@ -31,4 +32,6 @@ public interface DailyReportService { public TransactionReport queryTransactionReport(String domain, Date start, Date end); public boolean insert(DailyReport report); + + public BugReport queryBugReport(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 index abb394fc7..430fda2d5 100644 --- 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 @@ -14,6 +14,8 @@ import com.dianping.cat.consumer.sql.model.entity.SqlReport; import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.top.model.entity.TopReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; +import com.dianping.cat.core.dal.HourlyReport; +import com.dianping.cat.home.bug.entity.BugReport; public interface HourlyReportService { public Set queryAllDomainNames(Date start, Date end, String reportName); @@ -39,4 +41,8 @@ public interface HourlyReportService { public TransactionReport queryTransactionReport(String domain, Date start, Date end); public DependencyReport queryDependencyReport(String domain, Date start, Date end); + + public BugReport queryBugReport(String domain, Date start, Date end); + + public boolean insert(HourlyReport report); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportCache.java b/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportCache.java index 5a12867bd..63454295a 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportCache.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportCache.java @@ -24,6 +24,7 @@ import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.transaction.TransactionReportUrlFilter; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.message.Transaction; public class MonthlyReportCache implements Initializable { @@ -158,4 +159,9 @@ public class MonthlyReportCache implements Initializable { } } + public BugReport queryBugReport(String domain, Date start) { + // TODO Auto-generated method stub + return null; + } + } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportService.java b/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportService.java index 9a20d2830..1d5e56020 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/MonthlyReportService.java @@ -11,6 +11,7 @@ import com.dianping.cat.consumer.sql.model.entity.SqlReport; import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.MonthlyReport; +import com.dianping.cat.home.bug.entity.BugReport; public interface MonthlyReportService { @@ -31,4 +32,6 @@ public interface MonthlyReportService { public TransactionReport queryTransactionReport(String domain, Date start); public boolean insert(MonthlyReport report); + + public BugReport queryBugReport(String domain, Date start); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/ReportService.java b/cat-home/src/main/java/com/dianping/cat/report/service/ReportService.java index ff0fbbe36..da7fd059c 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/ReportService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/ReportService.java @@ -15,8 +15,10 @@ import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.top.model.entity.TopReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.DailyReport; +import com.dianping.cat.core.dal.HourlyReport; import com.dianping.cat.core.dal.MonthlyReport; import com.dianping.cat.core.dal.WeeklyReport; +import com.dianping.cat.home.bug.entity.BugReport; public interface ReportService { @@ -44,6 +46,10 @@ public interface ReportService { public TransactionReport queryTransactionReport(String domain, Date start, Date end); + public BugReport queryBugReport(String domain, Date start, Date end); + + public boolean insertHourlyReport(HourlyReport report); + public boolean insertDailyReport(DailyReport report); public boolean insertWeeklyReport(WeeklyReport report); diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportCache.java b/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportCache.java index ad769341c..920bca63b 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportCache.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportCache.java @@ -24,6 +24,7 @@ import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.transaction.TransactionReportUrlFilter; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.message.Transaction; public class WeeklyReportCache implements Initializable { @@ -157,4 +158,9 @@ public class WeeklyReportCache implements Initializable { } + public BugReport queryBugReport(String domain, Date start) { + // TODO Auto-generated method stub + return null; + } + } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportService.java b/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportService.java index 52387235d..0fc8fca11 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/WeeklyReportService.java @@ -11,6 +11,7 @@ import com.dianping.cat.consumer.sql.model.entity.SqlReport; import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.WeeklyReport; +import com.dianping.cat.home.bug.entity.BugReport; public interface WeeklyReportService { @@ -31,4 +32,6 @@ public interface WeeklyReportService { public TransactionReport queryTransactionReport(String domain, Date start); public boolean insert(WeeklyReport report); + + public BugReport queryBugReport(String domain, Date start); } 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 index eaa0c543c..f62a1d2fe 100644 --- 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 @@ -26,7 +26,9 @@ import com.dianping.cat.core.dal.DailyReport; import com.dianping.cat.core.dal.DailyReportDao; import com.dianping.cat.core.dal.DailyReportEntity; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.report.service.DailyReportService; +import com.dianping.cat.report.task.bug.BugReportMerger; public class DailyReportServiceImpl implements DailyReportService { @@ -240,6 +242,33 @@ public class DailyReportServiceImpl implements DailyReportService { transactionReport.setEndTime(end); return transactionReport; } + + @Override + public BugReport queryBugReport(String domain, Date start, Date end) { + BugReportMerger merger = new BugReportMerger(new BugReport(domain)); + long startTime = start.getTime(); + long endTime = end.getTime(); + String name = "bug"; + + for (; startTime < endTime; startTime = startTime + TimeUtil.ONE_DAY) { + try { + DailyReport report = m_dailyReportDao.findByDomainNamePeriod(domain, name, new Date(startTime), + DailyReportEntity.READSET_FULL); + String xml = report.getContent(); + BugReport reportModel = com.dianping.cat.home.bug.transform.DefaultSaxParser + .parse(xml); + reportModel.accept(merger); + } catch (Exception e) { + Cat.logError(e); + } + } + BugReport bugReport = merger.getBugReport(); + + bugReport.setStartTime(start); + bugReport.setEndTime(end); + return bugReport; + } + @Override public boolean insert(DailyReport report) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/impl/HourlyReportServiceImpl.java b/cat-home/src/main/java/com/dianping/cat/report/service/impl/HourlyReportServiceImpl.java index 129edcc51..2222693a1 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/impl/HourlyReportServiceImpl.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/impl/HourlyReportServiceImpl.java @@ -38,9 +38,11 @@ import com.dianping.cat.core.dal.HourlyReport; import com.dianping.cat.core.dal.HourlyReportDao; import com.dianping.cat.core.dal.HourlyReportEntity; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.message.Event; import com.dianping.cat.report.page.model.metric.MetricReportMerger; import com.dianping.cat.report.service.HourlyReportService; +import com.dianping.cat.report.task.bug.BugReportMerger; public class HourlyReportServiceImpl implements HourlyReportService { @@ -503,5 +505,56 @@ public class HourlyReportServiceImpl implements HourlyReportService { transactionReport.getDomainNames().addAll(domains); return transactionReport; } + + @Override + public BugReport queryBugReport(String domain, Date start, Date end) { + BugReportMerger merger = new BugReportMerger(new BugReport(domain)); + long startTime = start.getTime(); + long endTime = end.getTime(); + String name = "bug"; + + for (; startTime < endTime; startTime = startTime + TimeUtil.ONE_HOUR) { + List reports = null; + try { + reports = m_reportDao.findAllByDomainNamePeriod(new Date(startTime), domain, name, + HourlyReportEntity.READSET_FULL); + } catch (DalException e) { + Cat.logError(e); + } + if (reports != null) { + for (HourlyReport report : reports) { + String xml = report.getContent(); + + try { + BugReport reportModel = com.dianping.cat.home.bug.transform.DefaultSaxParser + .parse(xml); + reportModel.accept(merger); + } catch (Exception e) { + Cat.logError(e); + Cat.getProducer().logEvent("ErrorXML", name, Event.SUCCESS, + report.getDomain() + " " + report.getPeriod() + " " + report.getId()); + } + } + } + } + BugReport bugReport = merger.getBugReport(); + + bugReport.setStartTime(start); + bugReport.setEndTime(new Date(end.getTime() - 1)); + + return bugReport; + } + + @Override + public boolean insert(HourlyReport report) { + try { + m_reportDao.insert(report); + return true; + } catch (DalException e) { + Cat.logError(e); + return false; + } + } + } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/impl/MonthlyReportServiceImpl.java b/cat-home/src/main/java/com/dianping/cat/report/service/impl/MonthlyReportServiceImpl.java index 6f832335e..a0251f2c2 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/impl/MonthlyReportServiceImpl.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/impl/MonthlyReportServiceImpl.java @@ -17,6 +17,7 @@ import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.MonthlyReport; import com.dianping.cat.core.dal.MonthlyReportDao; import com.dianping.cat.core.dal.MonthlyReportEntity; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.report.service.MonthlyReportService; public class MonthlyReportServiceImpl implements MonthlyReportService { @@ -135,6 +136,20 @@ public class MonthlyReportServiceImpl implements MonthlyReportService { } return new TransactionReport(domain); } + + @Override + public BugReport queryBugReport(String domain, Date start) { + try { + MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "bug", + MonthlyReportEntity.READSET_FULL); + String content = entity.getContent(); + + return com.dianping.cat.home.bug.transform.DefaultSaxParser.parse(content); + } catch (Exception e) { + Cat.logError(e); + } + return new BugReport(domain); + } @Override public boolean insert(MonthlyReport report) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/impl/ReportServiceImpl.java b/cat-home/src/main/java/com/dianping/cat/report/service/impl/ReportServiceImpl.java index ac537b689..a6d2be150 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/impl/ReportServiceImpl.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/impl/ReportServiceImpl.java @@ -18,9 +18,11 @@ import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.consumer.top.model.entity.TopReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.DailyReport; +import com.dianping.cat.core.dal.HourlyReport; import com.dianping.cat.core.dal.MonthlyReport; import com.dianping.cat.core.dal.WeeklyReport; import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.report.service.DailyReportService; import com.dianping.cat.report.service.HourlyReportService; import com.dianping.cat.report.service.MonthlyReportCache; @@ -374,6 +376,35 @@ public class ReportServiceImpl implements ReportService { } return report; } + + @Override + public BugReport queryBugReport(String domain, Date start, Date end) { + int type = getQueryType(start, end); + BugReport report = null; + + if (type == s_hourly) { + report = m_hourlyReportService.queryBugReport(domain, start, end); + } else if (type == s_daily) { + report = m_dailyReportService.queryBugReport(domain, start, end); + } else if (type == s_historyDaily) { + report = m_dailyReportService.queryBugReport(domain, start, end); + } else if (type == s_historyWeekly) { + report = m_weeklyReportService.queryBugReport(domain, start); + } else if (type == s_currentWeekly) { + report = m_weeklyReportCache.queryBugReport(domain, start); + } else if (type == s_historyMonth) { + report = m_monthlyReportService.queryBugReport(domain, start); + } else if (type == s_currentMonth) { + report = m_monthReportCache.queryBugReport(domain, start); + } else { + report = m_dailyReportService.queryBugReport(domain, start, end); + } + if (report == null) { + report = new BugReport(domain); + report.setStartTime(start).setEndTime(end); + } + return report; + } @Override public boolean insertDailyReport(DailyReport report) { @@ -390,4 +421,9 @@ public class ReportServiceImpl implements ReportService { return m_monthlyReportService.insert(report); } + @Override + public boolean insertHourlyReport(HourlyReport report) { + return m_hourlyReportService.insert(report); + } + } diff --git a/cat-home/src/main/java/com/dianping/cat/report/service/impl/WeeklyReportServiceImpl.java b/cat-home/src/main/java/com/dianping/cat/report/service/impl/WeeklyReportServiceImpl.java index ea1a8b723..04a8545bf 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/service/impl/WeeklyReportServiceImpl.java +++ b/cat-home/src/main/java/com/dianping/cat/report/service/impl/WeeklyReportServiceImpl.java @@ -17,6 +17,7 @@ import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.core.dal.WeeklyReport; import com.dianping.cat.core.dal.WeeklyReportDao; import com.dianping.cat.core.dal.WeeklyReportEntity; +import com.dianping.cat.home.bug.entity.BugReport; import com.dianping.cat.report.service.WeeklyReportService; public class WeeklyReportServiceImpl implements WeeklyReportService { @@ -135,6 +136,20 @@ public class WeeklyReportServiceImpl implements WeeklyReportService { } return new TransactionReport(domain); } + + @Override + public BugReport queryBugReport(String domain, Date start) { + try { + WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "bug", + WeeklyReportEntity.READSET_FULL); + String content = entity.getContent(); + + return com.dianping.cat.home.bug.transform.DefaultSaxParser.parse(content); + } catch (Exception e) { + Cat.logError(e); + } + return new BugReport(domain); + } @Override public boolean insert(WeeklyReport report) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportBuilder.java new file mode 100644 index 000000000..02c023627 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportBuilder.java @@ -0,0 +1,132 @@ +package com.dianping.cat.report.task.bug; + +import java.util.Date; +import java.util.Set; + +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; +import com.dianping.cat.configuration.NetworkInterfaceManager; +import com.dianping.cat.consumer.problem.model.entity.ProblemReport; +import com.dianping.cat.core.dal.DailyReport; +import com.dianping.cat.core.dal.HourlyReport; +import com.dianping.cat.core.dal.MonthlyReport; +import com.dianping.cat.core.dal.WeeklyReport; +import com.dianping.cat.helper.CatString; +import com.dianping.cat.helper.TimeUtil; +import com.dianping.cat.home.bug.entity.BugReport; +import com.dianping.cat.report.service.ReportService; +import com.dianping.cat.report.task.TaskHelper; +import com.dianping.cat.report.task.spi.ReportTaskBuilder; + +public class BugReportBuilder implements ReportTaskBuilder { + + @Inject + protected ReportService m_reportService; + + @Override + public boolean buildDailyTask(String name, String domain, Date period) { + BugReport bugReport = queryHourlyReportsByDuration(name, domain, period, TaskHelper.tomorrowZero(period)); + DailyReport report = new DailyReport(); + + report.setContent(bugReport.toString()); + report.setCreationDate(new Date()); + report.setDomain(domain); + report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); + report.setName(name); + report.setPeriod(period); + report.setType(1); + return m_reportService.insertDailyReport(report); + } + + @Override + public boolean buildHourlyTask(String name, String domain, Date start) { + BugReport bugReport = new BugReport(CatString.CAT); + ProblemReportVisitor visitor = new ProblemReportVisitor().setReport(bugReport); + Date end = new Date(start.getTime() + TimeUtil.ONE_HOUR); + Set domains = m_reportService.queryAllDomainNames(start, end, "problem"); + + for (String domainName : domains) { + ProblemReport problemReport = m_reportService.queryProblemReport(domainName, start, end); + visitor.visitProblemReport(problemReport); + } + HourlyReport report = new HourlyReport(); + + report.setContent(bugReport.toString()); + report.setCreationDate(new Date()); + report.setDomain(domain); + report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); + report.setName(name); + report.setPeriod(start); + report.setType(1); + return m_reportService.insertHourlyReport(report); + } + + @Override + public boolean buildMonthlyTask(String name, String domain, Date period) { + BugReport bugReport = queryDailyReportsByDuration(domain, period, TaskHelper.nextMonthStart(period)); + MonthlyReport report = new MonthlyReport(); + + report.setContent(bugReport.toString()); + report.setCreationDate(new Date()); + report.setDomain(domain); + report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); + report.setName(name); + report.setPeriod(period); + report.setType(1); + return m_reportService.insertMonthlyReport(report); + } + + @Override + public boolean buildWeeklyTask(String name, String domain, Date period) { + BugReport bugReport = queryDailyReportsByDuration(domain, period, new Date(period.getTime() + TimeUtil.ONE_WEEK)); + WeeklyReport report = new WeeklyReport(); + String content = bugReport.toString(); + + report.setContent(content); + report.setCreationDate(new Date()); + report.setDomain(domain); + report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress()); + report.setName(name); + report.setPeriod(period); + report.setType(1); + return m_reportService.insertWeeklyReport(report); + } + + private BugReport queryDailyReportsByDuration(String domain, Date start, Date end) { + long startTime = start.getTime(); + long endTime = end.getTime(); + BugReportMerger merger = new BugReportMerger(new BugReport(domain)); + + for (; startTime < endTime; startTime += TimeUtil.ONE_DAY) { + try { + BugReport reportModel = m_reportService.queryBugReport(domain, new Date(startTime), new Date(startTime + + TimeUtil.ONE_DAY)); + reportModel.accept(merger); + } catch (Exception e) { + Cat.logError(e); + } + } + BugReport bugReport = merger.getBugReport(); + bugReport.setStartTime(start); + bugReport.setEndTime(end); + return bugReport; + } + + private BugReport queryHourlyReportsByDuration(String name, String domain, Date period, Date endDate) { + long startTime = period.getTime(); + long endTime = endDate.getTime(); + BugReportMerger merger = new BugReportMerger(new BugReport(domain)); + + for (; startTime < endTime; startTime = startTime + TimeUtil.ONE_HOUR) { + Date date = new Date(startTime); + BugReport reportModel = m_reportService.queryBugReport(domain, date, new Date(date.getTime() + + TimeUtil.ONE_HOUR)); + + reportModel.accept(merger); + } + com.dianping.cat.home.bug.entity.BugReport bugReport = merger.getBugReport(); + + return bugReport; + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportMerger.java b/cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportMerger.java new file mode 100644 index 000000000..520284614 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/bug/BugReportMerger.java @@ -0,0 +1,42 @@ +package com.dianping.cat.report.task.bug; + +import java.util.List; + +import com.dianping.cat.home.bug.entity.BugReport; +import com.dianping.cat.home.bug.entity.Domain; +import com.dianping.cat.home.bug.entity.ExceptionItem; +import com.dianping.cat.home.bug.transform.DefaultMerger; + +public class BugReportMerger extends DefaultMerger { + + public BugReportMerger(BugReport bugReport) { + super(bugReport); + } + + @Override + protected void mergeBugReport(BugReport old, BugReport bugReport) { + old.setStartTime(bugReport.getStartTime()); + old.setEndTime(bugReport.getEndTime()); + old.setDomain(bugReport.getDomain()); + super.mergeBugReport(old, bugReport); + } + + @Override + protected void mergeDomain(Domain old, Domain domain) { + super.mergeDomain(old, domain); + } + + @Override + protected void mergeExceptionItem(ExceptionItem old, ExceptionItem exceptionItem) { + old.setCount(old.getCount() + exceptionItem.getCount()); + old.getMessages().addAll(exceptionItem.getMessages()); + + List oldMessages = old.getMessages(); + + if (oldMessages.size() > 10) { + oldMessages = oldMessages.subList(0, 10); + } + + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/bug/ProblemReportVisitor.java b/cat-home/src/main/java/com/dianping/cat/report/task/bug/ProblemReportVisitor.java new file mode 100644 index 000000000..f0b200c90 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/task/bug/ProblemReportVisitor.java @@ -0,0 +1,74 @@ +package com.dianping.cat.report.task.bug; + +import java.util.List; + +import com.dianping.cat.consumer.problem.ProblemType; +import com.dianping.cat.consumer.problem.model.entity.Duration; +import com.dianping.cat.consumer.problem.model.entity.Entry; +import com.dianping.cat.consumer.problem.model.entity.Machine; +import com.dianping.cat.consumer.problem.model.entity.ProblemReport; +import com.dianping.cat.consumer.problem.model.entity.Segment; +import com.dianping.cat.consumer.problem.model.transform.BaseVisitor; +import com.dianping.cat.home.bug.entity.BugReport; +import com.dianping.cat.home.bug.entity.Domain; +import com.dianping.cat.home.bug.entity.ExceptionItem; + +public class ProblemReportVisitor extends BaseVisitor { + + private BugReport m_report; + + private String m_currentDomain; + + private String m_exception; + + @Override + public void visitDuration(Duration duration) { + int count = duration.getCount(); + List messages = duration.getMessages(); + Domain domainInfo = m_report.findOrCreateDomain(m_currentDomain); + ExceptionItem target = domainInfo.findOrCreateExceptionItem(m_exception); + List oldMessages = target.getMessages(); + + target.setCount(target.getCount() + count); + oldMessages.addAll(messages); + if (oldMessages.size() > 10) { + oldMessages = oldMessages.subList(0, 10); + } + } + + @Override + public void visitEntry(Entry entry) { + String type = entry.getType(); + + if (ProblemType.ERROR.equals(type)) { + m_exception = entry.getStatus(); + super.visitEntry(entry); + } + } + + @Override + public void visitMachine(Machine machine) { + super.visitMachine(machine); + } + + @Override + public void visitProblemReport(ProblemReport problemReport) { + m_currentDomain = problemReport.getDomain(); + super.visitProblemReport(problemReport); + } + + @Override + public void visitSegment(Segment segment) { + super.visitSegment(segment); + } + + public BugReport getReport() { + return m_report; + } + + public ProblemReportVisitor setReport(BugReport report) { + m_report = report; + return this; + } + +} diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java b/cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java index 4a36e2021..94e066ca8 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/spi/ReportFacade.java @@ -13,6 +13,7 @@ import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; import com.dianping.cat.ReportType; import com.dianping.cat.core.dal.Task; +import com.dianping.cat.report.task.bug.BugReportBuilder; import com.dianping.cat.report.task.cross.CrossReportBuilder; import com.dianping.cat.report.task.dependency.DependencyReportBuilder; import com.dianping.cat.report.task.event.EventReportBuilder; @@ -57,6 +58,9 @@ public class ReportFacade implements LogEnabled, Initializable { @Inject private StateReportBuilder m_stateReportBuilder; + + @Inject + private BugReportBuilder m_bugReportBuilder; @Inject private DependencyReportBuilder m_dependendcyReportBuilder; @@ -133,6 +137,7 @@ public class ReportFacade implements LogEnabled, Initializable { m_reportBuilders.put("state", m_stateReportBuilder); m_reportBuilders.put("dependency", m_dependendcyReportBuilder); m_reportBuilders.put("metric", m_metricBaselineReportBuilder); + m_reportBuilders.put("bug", m_bugReportBuilder); } } diff --git a/cat-home/src/main/java/com/dianping/cat/system/config/BugConfigManager.java b/cat-home/src/main/java/com/dianping/cat/system/config/BugConfigManager.java new file mode 100644 index 000000000..92efb2657 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/system/config/BugConfigManager.java @@ -0,0 +1,123 @@ +package com.dianping.cat.system.config; + +import java.util.ArrayList; +import java.util.List; + +import org.codehaus.plexus.logging.LogEnabled; +import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; +import org.unidal.dal.jdbc.DalNotFoundException; +import org.unidal.helper.Files; +import org.unidal.lookup.annotation.Inject; + +import com.dianping.cat.Cat; +import com.dianping.cat.core.config.Config; +import com.dianping.cat.core.config.ConfigDao; +import com.dianping.cat.core.config.ConfigEntity; +import com.dianping.cat.home.bug.config.entity.BugConfig; +import com.dianping.cat.home.bug.config.entity.Domain; +import com.dianping.cat.home.bug.config.transform.DefaultSaxParser; + +public class BugConfigManager implements Initializable, LogEnabled { + + @Inject + private ConfigDao m_configDao; + + private int m_configId; + + private BugConfig m_bugConfig; + + private Logger m_logger; + + private static final String CONFIG_NAME = "bugConfig"; + + public List queryBugConfigsByDomain(String domain) { + Domain config = m_bugConfig.findDomain(domain); + + if (config == null) { + return m_bugConfig.getExceptions(); + } else { + if (config.getAdditivity() == true) { + List result = new ArrayList(); + + result.addAll(m_bugConfig.getExceptions()); + result.addAll(config.getExceptions()); + + return result; + } else { + return config.getExceptions(); + } + } + } + + public BugConfig getBugConfig() { + return m_bugConfig; + } + + public boolean insert(String xml) { + try { + m_bugConfig = DefaultSaxParser.parse(xml); + return storeConfig(); + } catch (Exception e) { + Cat.logError(e); + m_logger.error(e.getMessage(), e); + return false; + } + } + + @Override + public void initialize() throws InitializationException { + try { + Config config = m_configDao.findByName(CONFIG_NAME, ConfigEntity.READSET_FULL); + String content = config.getContent(); + + m_bugConfig = DefaultSaxParser.parse(content); + m_configId = config.getId(); + } catch (DalNotFoundException e) { + try { + String content = Files.forIO().readFrom( + this.getClass().getResourceAsStream("/config/default-bug-config.xml"), "utf-8"); + Config config = m_configDao.createLocal(); + + config.setName(CONFIG_NAME); + config.setContent(content); + m_configDao.insert(config); + + m_bugConfig = DefaultSaxParser.parse(content); + m_configId = config.getId(); + } catch (Exception ex) { + Cat.logError(ex); + } + } catch (Exception e) { + Cat.logError(e); + } + if (m_bugConfig == null) { + m_bugConfig = new BugConfig(); + } + } + + private boolean storeConfig() { + synchronized (this) { + try { + Config config = m_configDao.createLocal(); + + config.setId(m_configId); + config.setKeyId(m_configId); + config.setName(CONFIG_NAME); + config.setContent(m_bugConfig.toString()); + m_configDao.updateByPK(config, ConfigEntity.UPDATESET_FULL); + } catch (Exception e) { + Cat.logError(e); + return false; + } + } + return true; + } + + @Override + public void enableLogging(Logger logger) { + m_logger = logger; + } + +} \ No newline at end of file diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/config/Action.java b/cat-home/src/main/java/com/dianping/cat/system/page/config/Action.java index 82b88195d..49d6edcba 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/config/Action.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/config/Action.java @@ -54,6 +54,8 @@ public enum Action implements org.unidal.web.mvc.Action { EXCEPTION_THRESHOLD_UPDATE_SUBMIT("exceptionThresholdUpdateSubmit"), EXCEPTION_THRESHOLD_DELETE("exceptionThresholdDelete"), + + BUG_CONFIG_UPDATE("bugConfigUpdate"), ; private String m_name; diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/config/Handler.java b/cat-home/src/main/java/com/dianping/cat/system/page/config/Handler.java index 5a510a7bb..3120fa3bf 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/config/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/config/Handler.java @@ -38,6 +38,7 @@ import com.dianping.cat.home.dependency.exception.entity.ExceptionLimit; import com.dianping.cat.report.page.dependency.graph.TopologyGraphConfigManager; import com.dianping.cat.report.view.DomainNavManager; import com.dianping.cat.system.SystemPage; +import com.dianping.cat.system.config.BugConfigManager; import com.dianping.cat.system.config.ExceptionThresholdConfigManager; public class Handler implements PageHandler { @@ -61,6 +62,9 @@ public class Handler implements PageHandler { @Inject private ExceptionThresholdConfigManager m_exceptionConfigManager; + + @Inject + private BugConfigManager m_bugConfigManager; @Inject private DomainNavManager m_manager; @@ -266,6 +270,15 @@ public class Handler implements PageHandler { updateExceptionLimit(payload); model.setExceptionLimits(m_exceptionConfigManager.queryAllExceptionLimits()); break; + case BUG_CONFIG_UPDATE: + String xml = payload.getBug(); + if(!StringUtils.isEmpty(xml)){ + model.setOpState(m_bugConfigManager.insert(payload.getBug())); + }else{ + model.setOpState(true); + } + model.setBug(m_bugConfigManager.getBugConfig().toString()); + break; } m_jspViewer.view(ctx, model); } @@ -368,5 +381,5 @@ public class Handler implements PageHandler { } } } - + } diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/config/JspFile.java b/cat-home/src/main/java/com/dianping/cat/system/page/config/JspFile.java index 4038aad21..a7090f50f 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/config/JspFile.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/config/JspFile.java @@ -29,7 +29,9 @@ public enum JspFile { EXCEPTION_THRESHOLD("/jsp/system/exception/exceptionThreshold.jsp"), - EXCEPTION_THRESHOLD_CONFIG("/jsp/system/exception/exceptionThresholdConfig.jsp") + EXCEPTION_THRESHOLD_CONFIG("/jsp/system/exception/exceptionThresholdConfig.jsp"), + + BUG_CONFIG_UPDATE("/jsp/system/bug/bugConfig.jsp"), ; private String m_path; diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/config/JspViewer.java b/cat-home/src/main/java/com/dianping/cat/system/page/config/JspViewer.java index 8be515e01..88a025a13 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/config/JspViewer.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/config/JspViewer.java @@ -69,6 +69,9 @@ public class JspViewer extends BaseJspViewer return JspFile.EXCEPTION_THRESHOLD.getPath(); case EXCEPTION_THRESHOLD_UPDATE: return JspFile.EXCEPTION_THRESHOLD_CONFIG.getPath(); + //Bug + case BUG_CONFIG_UPDATE: + return JspFile.BUG_CONFIG_UPDATE.getPath(); } throw new RuntimeException("Unknown action: " + action); diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/config/Model.java b/cat-home/src/main/java/com/dianping/cat/system/page/config/Model.java index 2399f942a..739071c56 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/config/Model.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/config/Model.java @@ -51,6 +51,8 @@ public class Model extends ViewModel { private MetricItemConfig m_metricItemConfig; private Map> m_productMetricConfigs; + + private String m_bug; public Model(Context ctx) { super(ctx); @@ -217,6 +219,14 @@ public class Model extends ViewModel { m_exceptionLimits = exceptionLimits; } + public String getBug() { + return m_bug; + } + + public void setBug(String bug) { + m_bug = bug; + } + public static class Edge { private List m_edgeConfigs; diff --git a/cat-home/src/main/java/com/dianping/cat/system/page/config/Payload.java b/cat-home/src/main/java/com/dianping/cat/system/page/config/Payload.java index 995376d90..fb5bc59ed 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/page/config/Payload.java +++ b/cat-home/src/main/java/com/dianping/cat/system/page/config/Payload.java @@ -74,6 +74,9 @@ public class Payload implements ActionPayload { @FieldMeta("exception") private String m_exception; + @FieldMeta("bug") + private String m_bug; + @Override public Action getAction() { if (m_action == null) { @@ -260,4 +263,12 @@ public class Payload implements ActionPayload { m_exceptionLimit = exceptionLimit; } + public String getBug() { + return m_bug; + } + + public void setBug(String bug) { + m_bug = bug; + } + } diff --git a/cat-home/src/main/resources/META-INF/dal/model/bug-codegen.xml b/cat-home/src/main/resources/META-INF/dal/model/bug-codegen.xml index c4501e5c1..debee2a73 100644 --- a/cat-home/src/main/resources/META-INF/dal/model/bug-codegen.xml +++ b/cat-home/src/main/resources/META-INF/dal/model/bug-codegen.xml @@ -2,21 +2,19 @@ + - - + + - + - - - - + diff --git a/cat-home/src/main/resources/META-INF/dal/model/bug-config-codegen.xml b/cat-home/src/main/resources/META-INF/dal/model/bug-config-codegen.xml index 36768e3dc..063669d8e 100644 --- a/cat-home/src/main/resources/META-INF/dal/model/bug-config-codegen.xml +++ b/cat-home/src/main/resources/META-INF/dal/model/bug-config-codegen.xml @@ -1,16 +1,13 @@ - - - - - + + - + diff --git a/cat-home/src/main/resources/META-INF/dal/model/bug-config-model.xml b/cat-home/src/main/resources/META-INF/dal/model/bug-config-model.xml index e16c662bc..3ac370312 100644 --- a/cat-home/src/main/resources/META-INF/dal/model/bug-config-model.xml +++ b/cat-home/src/main/resources/META-INF/dal/model/bug-config-model.xml @@ -1,4 +1,13 @@ - + + + + + + + + + + diff --git a/cat-home/src/main/resources/META-INF/dal/model/bug-model.xml b/cat-home/src/main/resources/META-INF/dal/model/bug-model.xml index 2e0b0b6dd..298914496 100644 --- a/cat-home/src/main/resources/META-INF/dal/model/bug-model.xml +++ b/cat-home/src/main/resources/META-INF/dal/model/bug-model.xml @@ -1,4 +1,22 @@ - + + + + + + + + + + + + + + + + + + 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 9c8a2bd79..eba13beea 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -82,6 +82,15 @@ + + com.dianping.cat.system.config.BugConfigManager + com.dianping.cat.system.config.BugConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + com.dianping.cat.report.page.dependency.graph.TopologyGraphItemBuilder com.dianping.cat.report.page.dependency.graph.TopologyGraphItemBuilder @@ -432,6 +441,15 @@ + + com.dianping.cat.report.task.bug.BugReportBuilder + com.dianping.cat.report.task.bug.BugReportBuilder + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.report.task.matrix.MatrixReportBuilder com.dianping.cat.report.task.matrix.MatrixReportBuilder @@ -526,6 +544,9 @@ com.dianping.cat.report.task.dependency.DependencyReportBuilder + + com.dianping.cat.report.task.bug.BugReportBuilder + com.dianping.cat.report.task.metric.MetricBaselineReportBuilder @@ -2463,6 +2484,30 @@ + + com.dianping.cat.report.page.bug.Handler + com.dianping.cat.report.page.bug.Handler + + + com.dianping.cat.report.page.bug.JspViewer + + + com.dianping.cat.report.service.ReportService + + + com.dianping.cat.consumer.advanced.ProductLineConfigManager + + + + + com.dianping.cat.report.page.bug.JspViewer + com.dianping.cat.report.page.bug.JspViewer + + + org.unidal.web.mvc.view.model.ModelHandler + + + com.dianping.cat.system.SystemModule com.dianping.cat.system.SystemModule @@ -2704,6 +2749,9 @@ com.dianping.cat.system.config.ExceptionThresholdConfigManager + + com.dianping.cat.system.config.BugConfigManager + com.dianping.cat.report.view.DomainNavManager @@ -2727,6 +2775,15 @@ + + com.dianping.cat.system.config.BugConfigManager + com.dianping.cat.system.config.BugConfigManager + + + com.dianping.cat.core.config.ConfigDao + + + com.dianping.cat.system.page.abtest.Handler com.dianping.cat.system.page.abtest.Handler diff --git a/cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml b/cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml index 3ad5f8d97..831105802 100755 --- a/cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml +++ b/cat-home/src/main/resources/META-INF/wizard/webapp/wizard.xml @@ -56,6 +56,9 @@ ExternalError + + Bug + diff --git a/cat-home/src/main/resources/config/default-bug-config.xml b/cat-home/src/main/resources/config/default-bug-config.xml new file mode 100644 index 000000000..e83515f5c --- /dev/null +++ b/cat-home/src/main/resources/config/default-bug-config.xml @@ -0,0 +1,9 @@ + + + om.dianping.dpsf.exception.NetTimeoutException + com.dianping.dpsf.exception.DPSFTimeoutException + org.apache.http.conn.HttpHostConnectException + net.spy.memcached.internal.CheckedOperationTimeoutException + net.spy.memcached.internal.CheckedOperationTimeoutException + java.net.ConnectException + \ No newline at end of file diff --git a/cat-home/src/main/webapp/jsp/report/bug.jsp b/cat-home/src/main/webapp/jsp/report/bug.jsp new file mode 100644 index 000000000..f38b57f2c --- /dev/null +++ b/cat-home/src/main/webapp/jsp/report/bug.jsp @@ -0,0 +1,5 @@ +<%@ page contentType="text/html; charset=utf-8" %> + + + +View of bug page under report \ No newline at end of file diff --git a/cat-home/src/main/webapp/jsp/system/bug/bugConfig.jsp b/cat-home/src/main/webapp/jsp/system/bug/bugConfig.jsp new file mode 100644 index 000000000..1ec2c7040 --- /dev/null +++ b/cat-home/src/main/webapp/jsp/system/bug/bugConfig.jsp @@ -0,0 +1,49 @@ +<%@ page contentType="text/html; charset=utf-8" %> +<%@ taglib prefix="a" uri="/WEB-INF/app.tld"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="res" uri="http://www.unidal.org/webres"%> +<%@ taglib prefix="w" uri="http://www.unidal.org/web/core"%> + + + + + + + + +
+
+ <%@include file="../configTree.jsp"%> +
+
+
+

 

+

异常规范配置

+ + + + + + + +
+
+
+
+
+ \ No newline at end of file diff --git a/cat-home/src/main/webapp/jsp/system/configTree.jsp b/cat-home/src/main/webapp/jsp/system/configTree.jsp index ff1e86836..558068df9 100644 --- a/cat-home/src/main/webapp/jsp/system/configTree.jsp +++ b/cat-home/src/main/webapp/jsp/system/configTree.jsp @@ -14,6 +14,8 @@
  • 业务监控规则
  • 异常监控规则
  • + +
  • 异常规范配置