提交 4e7b5d09 编写于 作者: Y yong.you

add the service report

上级 85bd770d
......@@ -31,6 +31,7 @@ public class StateDelegate implements ReportDelegate<StateReport> {
@Override
public boolean createHourlyTask(StateReport report) {
m_taskManager.createTask(report.getStartTime(), report.getDomain(), "service", TaskProlicy.ALL);
m_taskManager.createTask(report.getStartTime(), report.getDomain(), "bug", TaskProlicy.ALL);
return m_taskManager.createTask(report.getStartTime(), report.getDomain(), StateAnalyzer.ID, TaskProlicy.ALL_EXCLUED_HOURLY);
}
......
......@@ -49,8 +49,6 @@ public class TransactionReportMerger extends DefaultMerger {
old.setSum(old.getSum() + other.getSum());
old.setSum2(old.getSum2() + other.getSum2());
if (old.getTotalCount() > 0) {
old.setFailPercent(old.getFailCount() * 100.0 / old.getTotalCount());
old.setAvg(old.getSum() / old.getTotalCount());
......
......@@ -186,7 +186,8 @@
${basedir}/src/main/resources/META-INF/dal/model/exception-threshold-config-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/threshold-template-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/bug-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/bug-config-manifest.xml,</manifest>
${basedir}/src/main/resources/META-INF/dal/model/bug-config-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/service-report-manifest.xml,</manifest>
</configuration>
</execution>
<execution>
......
......@@ -7,6 +7,7 @@ import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import org.unidal.lookup.configuration.Component;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.consumer.DomainManager;
import com.dianping.cat.consumer.advanced.MetricConfigManager;
import com.dianping.cat.consumer.advanced.ProductLineConfigManager;
import com.dianping.cat.core.dal.DailyGraphDao;
......@@ -38,6 +39,7 @@ import com.dianping.cat.report.task.metric.MetricPointParser;
import com.dianping.cat.report.task.problem.ProblemGraphCreator;
import com.dianping.cat.report.task.problem.ProblemMerger;
import com.dianping.cat.report.task.problem.ProblemReportBuilder;
import com.dianping.cat.report.task.service.ServiceReportBuilder;
import com.dianping.cat.report.task.spi.ReportFacade;
import com.dianping.cat.report.task.sql.SqlMerger;
import com.dianping.cat.report.task.sql.SqlReportBuilder;
......@@ -94,8 +96,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(BugReportBuilder.class).req(ReportService.class));
all.add(C(ServiceReportBuilder.class).req(ReportService.class, DomainManager.class));
all.add(C(MatrixReportBuilder.class).req(ReportService.class));
......@@ -111,10 +114,10 @@ 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,BugReportBuilder.class,
MetricBaselineReportBuilder.class));
.req(TransactionReportBuilder.class, EventReportBuilder.class, ProblemReportBuilder.class,
HeartbeatReportBuilder.class, MatrixReportBuilder.class, CrossReportBuilder.class,
SqlReportBuilder.class, StateReportBuilder.class, DependencyReportBuilder.class,
BugReportBuilder.class, ServiceReportBuilder.class, MetricBaselineReportBuilder.class));
return all;
}
......
......@@ -41,7 +41,7 @@ public enum ReportPage implements Page {
EXTERNALERROR("externalError", "externalError", "externalError", "ExternalError", true),
BUG("bug", "bug", "Bug", "Bug", true);
BUG("bug", "bug", "Statistics", "Bug", true);
private String m_name;
......
package com.dianping.cat.report.page.bug;
public enum Action implements org.unidal.web.mvc.Action {
HISTORY_REPORT("history"),
HOURLY_REPORT("view"),
HTTP_JSON("json")
;
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;
}
}
package com.dianping.cat.report.page.bug;
public enum Action implements org.unidal.web.mvc.Action {
HISTORY_REPORT("historyBug"),
HOURLY_REPORT("view"),
HTTP_JSON("json"),
SERVICE_REPORT("service"),
SERVICE_HISTORY_REPORT("historyService");
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;
}
}
package com.dianping.cat.report.page.bug;
import com.dianping.cat.report.ReportContext;
public class Context extends ReportContext<Payload> {
}
package com.dianping.cat.report.page.bug;
import com.dianping.cat.report.ReportContext;
public class Context extends ReportContext<Payload> {
}
package com.dianping.cat.report.page.bug;
import java.io.IOException;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
import com.dianping.cat.core.dal.Project;
import com.dianping.cat.helper.CatString;
import com.dianping.cat.helper.MapUtils;
import com.dianping.cat.helper.TimeUtil;
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.BaseVisitor;
import com.dianping.cat.report.ReportPage;
import com.dianping.cat.report.page.PayloadNormalizer;
import com.dianping.cat.report.service.ReportService;
import com.dianping.cat.report.view.DomainNavManager;
import com.dianping.cat.system.config.BugConfigManager;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
private ReportService m_reportService;
@Inject
private DomainNavManager m_domainManager;
@Inject
private BugConfigManager m_bugConfigManager;
@Inject
private PayloadNormalizer m_normalizePayload;
public Project findByDomain(String domain) {
return m_domainManager.getProjectByName(domain);
}
@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);
Payload payload = ctx.getPayload();
m_normalizePayload.normalize(model, payload);
BugReport bugReport = queryBugReport(payload);
BugReportVisitor visitor = new BugReportVisitor();
visitor.visitBugReport(bugReport);
Map<String, ErrorStatis> errors = visitor.getErrors();
errors = sortErrorStatis(errors);
model.setErrorStatis(errors);
if (payload.getAction() == Action.HTTP_JSON) {
new ClearBugReport().visitBugReport(bugReport);
}
model.setBugReport(bugReport);
model.setPage(ReportPage.BUG);
m_jspViewer.view(ctx, model);
}
private boolean isBug(String domain, String exception) {
Set<String> bugConfig = m_bugConfigManager.queryBugConfigsByDomain(domain);
return !bugConfig.contains(exception);
}
private BugReport queryBugReport(Payload payload) {
Date start = null;
Date end = null;
if (payload.getAction() == Action.HOURLY_REPORT) {
if (payload.getPeriod().isCurrent()) {
start = new Date(payload.getDate() - TimeUtil.ONE_HOUR);
end = new Date(start.getTime() + TimeUtil.ONE_HOUR);
} else {
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);
}
private Map<String, ErrorStatis> sortErrorStatis(Map<String, ErrorStatis> errors) {
Comparator<java.util.Map.Entry<String, ErrorStatis>> errorCompator = new Comparator<java.util.Map.Entry<String, ErrorStatis>>() {
@Override
public int compare(java.util.Map.Entry<String, ErrorStatis> o1, java.util.Map.Entry<String, ErrorStatis> o2) {
String department1 = o1.getValue().getDepartment();
String department2 = o2.getValue().getDepartment();
String productLine1 = o1.getValue().getProductLine();
String productLine2 = o2.getValue().getProductLine();
if (department1.equals(department2)) {
return productLine1.compareTo(productLine2);
} else {
return department1.compareTo(department2);
}
}
};
errors = MapUtils.sortMap(errors, errorCompator);
for (ErrorStatis temp : errors.values()) {
Comparator<java.util.Map.Entry<String, ExceptionItem>> compator = new Comparator<java.util.Map.Entry<String, ExceptionItem>>() {
@Override
public int compare(java.util.Map.Entry<String, ExceptionItem> o1,
java.util.Map.Entry<String, ExceptionItem> o2) {
return o2.getValue().getCount() - o1.getValue().getCount();
}
};
Map<String, ExceptionItem> bugs = temp.getBugs();
Map<String, ExceptionItem> exceptions = temp.getExceptions();
temp.setBugs(MapUtils.sortMap(bugs, compator));
temp.setExceptions(MapUtils.sortMap(exceptions, compator));
}
return errors;
}
public class BugReportVisitor extends BaseVisitor {
private String m_domain;
private Map<String, ErrorStatis> m_errors = new HashMap<String, ErrorStatis>();
public ErrorStatis findOrCreateErrorStatis(String productLine) {
ErrorStatis statis = m_errors.get(productLine);
if (statis == null) {
statis = new ErrorStatis();
m_errors.put(productLine, statis);
}
return statis;
}
public Map<String, ErrorStatis> getErrors() {
return m_errors;
}
@Override
public void visitDomain(Domain domain) {
m_domain = domain.getId();
super.visitDomain(domain);
}
@Override
public void visitExceptionItem(ExceptionItem exceptionItem) {
String exception = exceptionItem.getId();
int count = exceptionItem.getCount();
Project project = findByDomain(m_domain);
if (project != null) {
String productLine = project.getProjectLine();
String department = project.getDepartment();
ErrorStatis statis = findOrCreateErrorStatis(productLine);
statis.setDepartment(department);
statis.setProductLine(productLine);
Map<String, ExceptionItem> items = null;
if (isBug(m_domain, exception)) {
items = statis.getBugs();
} else {
items = statis.getExceptions();
}
ExceptionItem item = items.get(exception);
if (item == null) {
item = new ExceptionItem(exception);
item.setCount(count);
item.getMessages().addAll(exceptionItem.getMessages());
items.put(exception, item);
} else {
List<String> messages = item.getMessages();
item.setCount(item.getCount() + count);
messages.addAll(exceptionItem.getMessages());
if (messages.size() > 10) {
messages = messages.subList(0, 10);
}
}
}
}
}
public class ClearBugReport extends BaseVisitor {
@Override
public void visitDomain(Domain domain) {
String domainName = domain.getId();
Project project = findByDomain(domainName);
if (project != null) {
domain.setDepartment(project.getDepartment());
domain.setProductLine(project.getProjectLine());
}
Set<String> removes = new HashSet<String>();
Map<String, ExceptionItem> items = domain.getExceptionItems();
for (ExceptionItem item : items.values()) {
if (!isBug(domainName, item.getId())) {
removes.add(item.getId());
}
}
for (String remove : removes) {
items.remove(remove);
}
}
}
public static class ErrorStatis {
private String m_productLine;
private String m_department;
private Map<String, ExceptionItem> m_bugs = new HashMap<String, ExceptionItem>();
private Map<String, ExceptionItem> m_exceptions = new HashMap<String, ExceptionItem>();
public Map<String, ExceptionItem> getBugs() {
return m_bugs;
}
public String getDepartment() {
return m_department;
}
public Map<String, ExceptionItem> getExceptions() {
return m_exceptions;
}
public String getProductLine() {
return m_productLine;
}
public void setBugs(Map<String, ExceptionItem> bugs) {
m_bugs = bugs;
}
public void setDepartment(String department) {
m_department = department;
}
public void setExceptions(Map<String, ExceptionItem> exceptions) {
m_exceptions = exceptions;
}
public void setProductLine(String productLine) {
m_productLine = productLine;
}
}
}
package com.dianping.cat.report.page.bug;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
import com.dianping.cat.Cat;
import com.dianping.cat.core.dal.Project;
import com.dianping.cat.core.dal.ProjectDao;
import com.dianping.cat.core.dal.ProjectEntity;
import com.dianping.cat.helper.CatString;
import com.dianping.cat.helper.MapUtils;
import com.dianping.cat.helper.TimeUtil;
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.BaseVisitor;
import com.dianping.cat.home.service.entity.ServiceReport;
import com.dianping.cat.report.ReportPage;
import com.dianping.cat.report.page.PayloadNormalizer;
import com.dianping.cat.report.service.ReportService;
import com.dianping.cat.system.config.BugConfigManager;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
private ReportService m_reportService;
@Inject
private ProjectDao m_projectDao;
@Inject
private BugConfigManager m_bugConfigManager;
@Inject
private PayloadNormalizer m_normalizePayload;
public Project findByDomain(String domain) {
try {
return m_projectDao.findByDomain(domain, ProjectEntity.READSET_FULL);
} catch (DalException e) {
Cat.logError(e);
}
return null;
}
@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);
Payload payload = ctx.getPayload();
m_normalizePayload.normalize(model, payload);
switch (payload.getAction()) {
case SERVICE_REPORT:
ServiceReport serviceReport = queryServiceReport(payload);
List<com.dianping.cat.home.service.entity.Domain> dList = sort(serviceReport, payload.getSortBy());
model.setServiceList(dList);
model.setServiceReport(serviceReport);
break;
case SERVICE_HISTORY_REPORT:
serviceReport = queryServiceReport(payload);
List<com.dianping.cat.home.service.entity.Domain> dHisList = sort(serviceReport, payload.getSortBy());
model.setServiceList(dHisList);
model.setServiceReport(serviceReport);
break;
case HISTORY_REPORT:
case HOURLY_REPORT:
case HTTP_JSON:
BugReport bugReport = queryBugReport(payload);
BugReportVisitor visitor = new BugReportVisitor();
visitor.visitBugReport(bugReport);
model.setBugReport(bugReport);
bugReport = queryBugReport(payload);
visitor = new BugReportVisitor();
visitor.visitBugReport(bugReport);
Map<String, ErrorStatis> errors = visitor.getErrors();
errors = sortErrorStatis(errors);
model.setErrorStatis(errors);
if (payload.getAction() == Action.HTTP_JSON) {
new ClearBugReport().visitBugReport(bugReport);
}
model.setBugReport(bugReport);
model.setPage(ReportPage.BUG);
break;
}
m_jspViewer.view(ctx, model);
}
private ServiceReport queryServiceReport(Payload payload) {
Date start = null;
Date end = null;
if (payload.getAction() == Action.SERVICE_REPORT) {
if (payload.getPeriod().isCurrent()) {
start = new Date(payload.getDate() - TimeUtil.ONE_HOUR);
end = new Date(start.getTime() + TimeUtil.ONE_HOUR);
} else {
start = new Date(payload.getDate());
end = new Date(start.getTime() + TimeUtil.ONE_HOUR);
}
} else {
start = payload.getHistoryStartDate();
end = payload.getHistoryEndDate();
}
return m_reportService.queryServiceReport(CatString.CAT, start, end);
}
private List<com.dianping.cat.home.service.entity.Domain> sort(ServiceReport serviceReport, final String sortBy) {
List<com.dianping.cat.home.service.entity.Domain> result = new ArrayList<com.dianping.cat.home.service.entity.Domain>(
serviceReport.getDomains().values());
Collections.sort(result, new Comparator<com.dianping.cat.home.service.entity.Domain>() {
public int compare(com.dianping.cat.home.service.entity.Domain d1,
com.dianping.cat.home.service.entity.Domain d2) {
if (sortBy.equals("failure")) {
return (int) (d2.getFailureCount() - d1.getFailureCount());
} else if (sortBy.equals("total")) {
return (int) (d2.getTotalCount() - d1.getTotalCount());
} else if (sortBy.equals("failurePercent")) {
return (int) (100000 * d2.getFailurePercent() - 100000 * d1.getFailurePercent());
} else {
return (int) (d2.getAvg() - d1.getAvg());
}
}
});
return result;
}
private boolean isBug(String domain, String exception) {
Set<String> bugConfig = m_bugConfigManager.queryBugConfigsByDomain(domain);
return !bugConfig.contains(exception);
}
private BugReport queryBugReport(Payload payload) {
Date start = null;
Date end = null;
if (payload.getAction() == Action.HOURLY_REPORT) {
if (payload.getPeriod().isCurrent()) {
start = new Date(payload.getDate() - TimeUtil.ONE_HOUR);
end = new Date(start.getTime() + TimeUtil.ONE_HOUR);
} else {
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);
}
private Map<String, ErrorStatis> sortErrorStatis(Map<String, ErrorStatis> errors) {
Comparator<java.util.Map.Entry<String, ErrorStatis>> errorCompator = new Comparator<java.util.Map.Entry<String, ErrorStatis>>() {
@Override
public int compare(java.util.Map.Entry<String, ErrorStatis> o1, java.util.Map.Entry<String, ErrorStatis> o2) {
String department1 = o1.getValue().getDepartment();
String department2 = o2.getValue().getDepartment();
String productLine1 = o1.getValue().getProductLine();
String productLine2 = o2.getValue().getProductLine();
if (department1.equals(department2)) {
return productLine1.compareTo(productLine2);
} else {
return department1.compareTo(department2);
}
}
};
errors = MapUtils.sortMap(errors, errorCompator);
for (ErrorStatis temp : errors.values()) {
Comparator<java.util.Map.Entry<String, ExceptionItem>> compator = new Comparator<java.util.Map.Entry<String, ExceptionItem>>() {
@Override
public int compare(java.util.Map.Entry<String, ExceptionItem> o1,
java.util.Map.Entry<String, ExceptionItem> o2) {
return o2.getValue().getCount() - o1.getValue().getCount();
}
};
Map<String, ExceptionItem> bugs = temp.getBugs();
Map<String, ExceptionItem> exceptions = temp.getExceptions();
temp.setBugs(MapUtils.sortMap(bugs, compator));
temp.setExceptions(MapUtils.sortMap(exceptions, compator));
}
return errors;
}
public class BugReportVisitor extends BaseVisitor {
private String m_domain;
private Map<String, ErrorStatis> m_errors = new HashMap<String, ErrorStatis>();
public ErrorStatis findOrCreateErrorStatis(String productLine) {
ErrorStatis statis = m_errors.get(productLine);
if (statis == null) {
statis = new ErrorStatis();
m_errors.put(productLine, statis);
}
return statis;
}
public Map<String, ErrorStatis> getErrors() {
return m_errors;
}
@Override
public void visitDomain(Domain domain) {
m_domain = domain.getId();
super.visitDomain(domain);
}
@Override
public void visitExceptionItem(ExceptionItem exceptionItem) {
String exception = exceptionItem.getId();
int count = exceptionItem.getCount();
Project project = findByDomain(m_domain);
if (project != null) {
String productLine = project.getProjectLine();
String department = project.getDepartment();
ErrorStatis statis = findOrCreateErrorStatis(productLine);
statis.setDepartment(department);
statis.setProductLine(productLine);
Map<String, ExceptionItem> items = null;
if (isBug(m_domain, exception)) {
items = statis.getBugs();
} else {
items = statis.getExceptions();
}
ExceptionItem item = items.get(exception);
if (item == null) {
item = new ExceptionItem(exception);
item.setCount(count);
item.getMessages().addAll(exceptionItem.getMessages());
items.put(exception, item);
} else {
List<String> messages = item.getMessages();
item.setCount(item.getCount() + count);
messages.addAll(exceptionItem.getMessages());
if (messages.size() > 10) {
messages = messages.subList(0, 10);
}
}
}
}
}
public class ClearBugReport extends BaseVisitor {
@Override
public void visitDomain(Domain domain) {
String domainName = domain.getId();
Set<String> removes = new HashSet<String>();
Map<String, ExceptionItem> items = domain.getExceptionItems();
for (ExceptionItem item : items.values()) {
if (!isBug(domainName, item.getId())) {
removes.add(item.getId());
}
}
for (String remove : removes) {
items.remove(remove);
}
}
}
public static class ErrorStatis {
private String m_productLine;
private String m_department;
private Map<String, ExceptionItem> m_bugs = new HashMap<String, ExceptionItem>();
private Map<String, ExceptionItem> m_exceptions = new HashMap<String, ExceptionItem>();
public Map<String, ExceptionItem> getBugs() {
return m_bugs;
}
public String getDepartment() {
return m_department;
}
public Map<String, ExceptionItem> getExceptions() {
return m_exceptions;
}
public String getProductLine() {
return m_productLine;
}
public void setBugs(Map<String, ExceptionItem> bugs) {
m_bugs = bugs;
}
public void setDepartment(String department) {
m_department = department;
}
public void setExceptions(Map<String, ExceptionItem> exceptions) {
m_exceptions = exceptions;
}
public void setProductLine(String productLine) {
m_productLine = productLine;
}
}
}
package com.dianping.cat.report.page.bug;
public enum JspFile {
HOURLY_REPORT("/jsp/report/bug/bug.jsp"),
HISTORY_REPORT("/jsp/report/bug/bugHistory.jsp"),
HTTP_JSON("/jsp/report/bug/bugApi.jsp"),
;
private String m_path;
private JspFile(String path) {
m_path = path;
}
public String getPath() {
return m_path;
}
}
package com.dianping.cat.report.page.bug;
public enum JspFile {
HOURLY_REPORT("/jsp/report/bug/bug.jsp"),
HISTORY_REPORT("/jsp/report/bug/bugHistory.jsp"),
HTTP_JSON("/jsp/report/bug/bugApi.jsp"),
SERVICE_REPORT("/jsp/report/service/service.jsp"),
SERVICE_HISTORY_REPORT("/jsp/report/service/serviceHistory.jsp");
private String m_path;
private JspFile(String path) {
m_path = path;
}
public String getPath() {
return m_path;
}
}
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<ReportPage, Action, Context, Model> {
@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();
case HTTP_JSON:
return JspFile.HTTP_JSON.getPath();
}
throw new RuntimeException("Unknown action: " + action);
}
}
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<ReportPage, Action, Context, Model> {
@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();
case HTTP_JSON:
return JspFile.HTTP_JSON.getPath();
case SERVICE_REPORT:
return JspFile.SERVICE_REPORT.getPath();
case SERVICE_HISTORY_REPORT:
return JspFile.SERVICE_HISTORY_REPORT.getPath();
}
throw new RuntimeException("Unknown action: " + action);
}
}
package com.dianping.cat.report.page.bug;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import com.dianping.cat.helper.CatString;
import com.dianping.cat.home.bug.entity.BugReport;
import com.dianping.cat.home.bug.transform.DefaultJsonBuilder;
import com.dianping.cat.report.page.AbstractReportModel;
import com.dianping.cat.report.page.bug.Handler.ErrorStatis;
public class Model extends AbstractReportModel<Action, Context> {
private BugReport m_bugReport;
private Map<String, ErrorStatis> m_errorStatis;
public BugReport getBugReport() {
return m_bugReport;
}
public void setBugReport(BugReport bugReport) {
m_bugReport = bugReport;
}
public Map<String, ErrorStatis> getErrorStatis() {
return m_errorStatis;
}
public void setErrorStatis(Map<String, ErrorStatis> errorStatis) {
m_errorStatis = errorStatis;
}
public Model(Context ctx) {
super(ctx);
}
public String getBugs() {
return new DefaultJsonBuilder().buildJson(m_bugReport);
}
@Override
public Action getDefaultAction() {
return Action.HOURLY_REPORT;
}
@Override
public String getDomain() {
return CatString.CAT;
}
@Override
public Collection<String> getDomains() {
return new ArrayList<String>();
}
}
package com.dianping.cat.report.page.bug;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.dianping.cat.helper.CatString;
import com.dianping.cat.home.bug.entity.BugReport;
import com.dianping.cat.home.bug.transform.DefaultJsonBuilder;
import com.dianping.cat.home.service.entity.ServiceReport;
import com.dianping.cat.report.page.AbstractReportModel;
import com.dianping.cat.report.page.bug.Handler.ErrorStatis;
public class Model extends AbstractReportModel<Action, Context> {
private BugReport m_bugReport;
private ServiceReport m_serviceReport;
private List<com.dianping.cat.home.service.entity.Domain> serviceList;
public ServiceReport getServiceReport() {
return m_serviceReport;
}
public void setServiceReport(ServiceReport serviceReport) {
m_serviceReport = serviceReport;
}
public List<com.dianping.cat.home.service.entity.Domain> getServiceList() {
return serviceList;
}
public void setServiceList(List<com.dianping.cat.home.service.entity.Domain> serviceList) {
this.serviceList = serviceList;
}
private Map<String, ErrorStatis> m_errorStatis;
public BugReport getBugReport() {
return m_bugReport;
}
public void setBugReport(BugReport bugReport) {
m_bugReport = bugReport;
}
public Map<String, ErrorStatis> getErrorStatis() {
return m_errorStatis;
}
public void setErrorStatis(Map<String, ErrorStatis> errorStatis) {
m_errorStatis = errorStatis;
}
public Model(Context ctx) {
super(ctx);
}
public String getBugs() {
return new DefaultJsonBuilder().buildJson(m_bugReport);
}
@Override
public Action getDefaultAction() {
return Action.HOURLY_REPORT;
}
@Override
public String getDomain() {
return CatString.CAT;
}
@Override
public Collection<String> getDomains() {
return new ArrayList<String>();
}
}
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<Action> {
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;
}
}
}
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<Action> {
private ReportPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("sort")
private String m_sortBy = "avg";
public String getSortBy() {
return m_sortBy;
}
public void setSortBy(String sortBy) {
m_sortBy = sortBy;
}
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;
}
}
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.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 {
public CrossReport queryCrossReport(String domain, Date start, Date end);
public EventReport queryEventReport(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 ProblemReport queryProblemReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public StateReport queryStateReport(String domain,Date start,Date end);
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
public boolean insert(DailyReport report);
public BugReport queryBugReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.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;
import com.dianping.cat.home.service.entity.ServiceReport;
public interface DailyReportService {
public boolean insert(DailyReport report);
public BugReport queryBugReport(String domain, Date start, Date end);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public EventReport queryEventReport(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 ProblemReport queryProblemReport(String domain, Date start, Date end);
public ServiceReport queryServiceReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public StateReport queryStateReport(String domain,Date start,Date end);
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.Set;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.dependency.model.entity.DependencyReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
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<String> queryAllDomainNames(Date start, Date end, String reportName);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public EventReport queryEventReport(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 MetricReport queryMetricReport(String group, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public StateReport queryStateReport(String domain,Date start,Date end);
public TopReport queryTopReport(String domain,Date start,Date end);
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);
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.Set;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.dependency.model.entity.DependencyReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
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;
import com.dianping.cat.home.service.entity.ServiceReport;
public interface HourlyReportService {
public boolean insert(HourlyReport report);
public Set<String> queryAllDomainNames(Date start, Date end, String reportName);
public BugReport queryBugReport(String domain, Date start, Date end);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public DependencyReport queryDependencyReport(String domain, Date start, Date end);
public EventReport queryEventReport(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 MetricReport queryMetricReport(String group, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public ServiceReport queryServiceReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public StateReport queryStateReport(String domain,Date start,Date end);
public TopReport queryTopReport(String domain,Date start,Date end);
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.MatrixReportFilter;
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.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 {
private long m_end;
private Map<String, TransactionReport> m_transactionReports = new HashMap<String, TransactionReport>();
private Map<String, EventReport> m_eventReports = new HashMap<String, EventReport>();
private Map<String, ProblemReport> m_problemReports = new HashMap<String, ProblemReport>();
private Map<String, MatrixReport> m_matrixReports = new HashMap<String, MatrixReport>();
private Map<String, CrossReport> m_crossReports = new HashMap<String, CrossReport>();
private Map<String, SqlReport> m_sqlReports = new HashMap<String, SqlReport>();
private Map<String, StateReport> m_stateReports = new HashMap<String, StateReport>();
private Map<String, BugReport> m_bugReports = new HashMap<String, BugReport>();
@Inject
private DailyReportService m_dailyReportService;
@Inject
private HourlyReportService m_hourReportService;
@Inject
private ServerConfigManager m_serverConfigManager;
@Override
public void initialize() throws InitializationException {
if (m_serverConfigManager.isJobMachine()) {
Threads.forGroup("Cat").start(new Reload());
}
}
public CrossReport queryCrossReport(String domain, Date start) {
return m_crossReports.get(domain);
}
public EventReport queryEventReport(String domain, Date start) {
return m_eventReports.get(domain);
}
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
return null;
}
public MatrixReport queryMatrixReport(String domain, Date start) {
return m_matrixReports.get(domain);
}
public ProblemReport queryProblemReport(String domain, Date start) {
return m_problemReports.get(domain);
}
public SqlReport querySqlReport(String domain, Date start) {
return m_sqlReports.get(domain);
}
public StateReport queryStateReport(String domain, Date start) {
return m_stateReports.get(domain);
}
public TransactionReport queryTransactionReport(String domain, Date start) {
return m_transactionReports.get(domain);
}
public class Reload implements Task {
@Override
public String getName() {
return "Month-Report-Cache";
}
private void reload() {
Date start = TimeUtil.getCurrentMonth();
Date end = TimeUtil.getCurrentDay();
Set<String> domains = m_hourReportService.queryAllDomainNames(start, end, "transaction");
for (String domain : domains) {
TransactionReport transactionReport = m_dailyReportService.queryTransactionReport(domain, start, end);
new TransactionReportUrlFilter().visitTransactionReport(transactionReport);
m_transactionReports.put(domain, transactionReport);
m_eventReports.put(domain, m_dailyReportService.queryEventReport(domain, start, end));
m_problemReports.put(domain, m_dailyReportService.queryProblemReport(domain, start, end));
m_crossReports.put(domain, m_dailyReportService.queryCrossReport(domain, start, end));
MatrixReport matrixReport = m_dailyReportService.queryMatrixReport(domain, start, end);
m_matrixReports.put(domain, matrixReport);
new MatrixReportFilter().visitMatrixReport(matrixReport);
m_sqlReports.put(domain, m_dailyReportService.querySqlReport(domain, start, end));
}
String cat = "Cat";
m_stateReports.put(cat, m_dailyReportService.queryStateReport(cat, start, end));
m_bugReports.put(cat, m_dailyReportService.queryBugReport(cat, start, end));
m_end = end.getTime();
}
@Override
public void run() {
boolean active = true;
while (active) {
Date date = TimeUtil.getCurrentDay();
long time = date.getTime();
if (time > m_end) {
Transaction t = Cat.newTransaction("ReportReload", "Month");
try {
reload();
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
Cat.logError(e);
t.setStatus(e);
} finally {
t.complete();
}
}
try {
Thread.sleep(60 * 60 * 1000);
} catch (InterruptedException e) {
active = false;
}
}
}
@Override
public void shutdown() {
}
}
public BugReport queryBugReport(String domain, Date start) {
return m_bugReports.get(domain);
}
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.MatrixReportFilter;
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.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.home.service.entity.ServiceReport;
import com.dianping.cat.message.Transaction;
public class MonthlyReportCache implements Initializable {
private long m_end;
private Map<String, TransactionReport> m_transactionReports = new HashMap<String, TransactionReport>();
private Map<String, EventReport> m_eventReports = new HashMap<String, EventReport>();
private Map<String, ProblemReport> m_problemReports = new HashMap<String, ProblemReport>();
private Map<String, MatrixReport> m_matrixReports = new HashMap<String, MatrixReport>();
private Map<String, CrossReport> m_crossReports = new HashMap<String, CrossReport>();
private Map<String, SqlReport> m_sqlReports = new HashMap<String, SqlReport>();
private Map<String, StateReport> m_stateReports = new HashMap<String, StateReport>();
private Map<String, BugReport> m_bugReports = new HashMap<String, BugReport>();
private Map<String, ServiceReport> m_serviceReports = new HashMap<String, ServiceReport>();
@Inject
private DailyReportService m_dailyReportService;
@Inject
private HourlyReportService m_hourReportService;
@Inject
private ServerConfigManager m_serverConfigManager;
@Override
public void initialize() throws InitializationException {
if (m_serverConfigManager.isJobMachine()) {
Threads.forGroup("Cat").start(new Reload());
}
}
public BugReport queryBugReport(String domain, Date start) {
return m_bugReports.get(domain);
}
public CrossReport queryCrossReport(String domain, Date start) {
return m_crossReports.get(domain);
}
public EventReport queryEventReport(String domain, Date start) {
return m_eventReports.get(domain);
}
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
return null;
}
public MatrixReport queryMatrixReport(String domain, Date start) {
return m_matrixReports.get(domain);
}
public ProblemReport queryProblemReport(String domain, Date start) {
return m_problemReports.get(domain);
}
public ServiceReport queryServiceReport(String domain, Date start) {
return m_serviceReports.get(domain);
}
public SqlReport querySqlReport(String domain, Date start) {
return m_sqlReports.get(domain);
}
public StateReport queryStateReport(String domain, Date start) {
return m_stateReports.get(domain);
}
public TransactionReport queryTransactionReport(String domain, Date start) {
return m_transactionReports.get(domain);
}
public class Reload implements Task {
@Override
public String getName() {
return "Month-Report-Cache";
}
private void reload() {
Date start = TimeUtil.getCurrentMonth();
Date end = TimeUtil.getCurrentDay();
Set<String> domains = m_hourReportService.queryAllDomainNames(start, end, "transaction");
for (String domain : domains) {
TransactionReport transactionReport = m_dailyReportService.queryTransactionReport(domain, start, end);
new TransactionReportUrlFilter().visitTransactionReport(transactionReport);
m_transactionReports.put(domain, transactionReport);
m_eventReports.put(domain, m_dailyReportService.queryEventReport(domain, start, end));
m_problemReports.put(domain, m_dailyReportService.queryProblemReport(domain, start, end));
m_crossReports.put(domain, m_dailyReportService.queryCrossReport(domain, start, end));
MatrixReport matrixReport = m_dailyReportService.queryMatrixReport(domain, start, end);
m_matrixReports.put(domain, matrixReport);
new MatrixReportFilter().visitMatrixReport(matrixReport);
m_sqlReports.put(domain, m_dailyReportService.querySqlReport(domain, start, end));
}
String cat = "Cat";
m_stateReports.put(cat, m_dailyReportService.queryStateReport(cat, start, end));
m_bugReports.put(cat, m_dailyReportService.queryBugReport(cat, start, end));
m_serviceReports.put(cat, m_dailyReportService.queryServiceReport(cat, start, end));
m_end = end.getTime();
}
@Override
public void run() {
boolean active = true;
while (active) {
Date date = TimeUtil.getCurrentDay();
long time = date.getTime();
if (time > m_end) {
Transaction t = Cat.newTransaction("ReportReload", "Month");
try {
reload();
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
Cat.logError(e);
t.setStatus(e);
} finally {
t.complete();
}
}
try {
Thread.sleep(60 * 60 * 1000);
} catch (InterruptedException e) {
active = false;
}
}
}
@Override
public void shutdown() {
}
}
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.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 {
public CrossReport queryCrossReport(String domain, Date start);
public EventReport queryEventReport(String domain, Date start);
public HeartbeatReport queryHeartbeatReport(String domain, Date start);
public MatrixReport queryMatrixReport(String domain, Date start);
public ProblemReport queryProblemReport(String domain, Date start);
public SqlReport querySqlReport(String domain, Date start);
public StateReport queryStateReport(String domain, Date start);
public TransactionReport queryTransactionReport(String domain, Date start);
public boolean insert(MonthlyReport report);
public BugReport queryBugReport(String domain, Date start);
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.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;
import com.dianping.cat.home.service.entity.ServiceReport;
public interface MonthlyReportService {
public boolean insert(MonthlyReport report);
public BugReport queryBugReport(String domain, Date start);
public CrossReport queryCrossReport(String domain, Date start);
public EventReport queryEventReport(String domain, Date start);
public HeartbeatReport queryHeartbeatReport(String domain, Date start);
public MatrixReport queryMatrixReport(String domain, Date start);
public ProblemReport queryProblemReport(String domain, Date start);
public ServiceReport queryServiceReport(String domain, Date start);
public SqlReport querySqlReport(String domain, Date start);
public StateReport queryStateReport(String domain, Date start);
public TransactionReport queryTransactionReport(String domain, Date start);
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.Set;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.dependency.model.entity.DependencyReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
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.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 {
public Set<String> queryAllDomainNames(Date start, Date end, String reportName);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public EventReport queryEventReport(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 MetricReport queryMetricReport(String domain, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public StateReport queryStateReport(String domain,Date start,Date end);
public TopReport queryTopReport(String domain,Date start,Date end);
public DependencyReport queryDependencyReport(String domain,Date start,Date end);
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);
public boolean insertMonthlyReport(MonthlyReport report);
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.Set;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.dependency.model.entity.DependencyReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
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.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;
import com.dianping.cat.home.service.entity.ServiceReport;
public interface ReportService {
public boolean insertDailyReport(DailyReport report);
public boolean insertHourlyReport(HourlyReport report);
public boolean insertMonthlyReport(MonthlyReport report);
public boolean insertWeeklyReport(WeeklyReport report);
public Set<String> queryAllDomainNames(Date start, Date end, String reportName);
public BugReport queryBugReport(String domain, Date start, Date end);
public CrossReport queryCrossReport(String domain, Date start, Date end);
public DependencyReport queryDependencyReport(String domain,Date start,Date end);
public EventReport queryEventReport(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 MetricReport queryMetricReport(String domain, Date start, Date end);
public ProblemReport queryProblemReport(String domain, Date start, Date end);
public ServiceReport queryServiceReport(String domain, Date start, Date end);
public SqlReport querySqlReport(String domain, Date start, Date end);
public StateReport queryStateReport(String domain,Date start,Date end);
public TopReport queryTopReport(String domain,Date start,Date end);
public TransactionReport queryTransactionReport(String domain, Date start, Date end);
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.MatrixReportFilter;
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.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 {
private long m_end;
private Map<String, TransactionReport> m_transactionReports = new HashMap<String, TransactionReport>();
private Map<String, EventReport> m_eventReports = new HashMap<String, EventReport>();
private Map<String, ProblemReport> m_problemReports = new HashMap<String, ProblemReport>();
private Map<String, MatrixReport> m_matrixReports = new HashMap<String, MatrixReport>();
private Map<String, CrossReport> m_crossReports = new HashMap<String, CrossReport>();
private Map<String, SqlReport> m_sqlReports = new HashMap<String, SqlReport>();
private Map<String, StateReport> m_stateReports = new HashMap<String, StateReport>();
private Map<String, BugReport> m_bugReports = new HashMap<String, BugReport>();
@Inject
private DailyReportService m_dailyReportService;
@Inject
private HourlyReportService m_hourReportService;
@Inject
private ServerConfigManager m_serverConfigManager;
@Override
public void initialize() throws InitializationException {
if (m_serverConfigManager.isJobMachine()) {
Threads.forGroup("Cat").start(new Reload());
}
}
public CrossReport queryCrossReport(String domain, Date start) {
return m_crossReports.get(domain);
}
public EventReport queryEventReport(String domain, Date start) {
return m_eventReports.get(domain);
}
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
return null;
}
public MatrixReport queryMatrixReport(String domain, Date start) {
return m_matrixReports.get(domain);
}
public ProblemReport queryProblemReport(String domain, Date start) {
return m_problemReports.get(domain);
}
public SqlReport querySqlReport(String domain, Date start) {
return m_sqlReports.get(domain);
}
public StateReport queryStateReport(String domain, Date start) {
return m_stateReports.get(domain);
}
public TransactionReport queryTransactionReport(String domain, Date start) {
return m_transactionReports.get(domain);
}
public class Reload implements Task {
@Override
public String getName() {
return "Weekly-Report-Cache";
}
private void reload() {
Date start = TimeUtil.getCurrentWeek();
Date end = TimeUtil.getCurrentDay();
Set<String> domains = m_hourReportService.queryAllDomainNames(start, end, "transaction");
for (String domain : domains) {
TransactionReport transactionReport = m_dailyReportService.queryTransactionReport(domain, start, end);
new TransactionReportUrlFilter().visitTransactionReport(transactionReport);
m_transactionReports.put(domain, transactionReport);
m_eventReports.put(domain, m_dailyReportService.queryEventReport(domain, start, end));
m_problemReports.put(domain, m_dailyReportService.queryProblemReport(domain, start, end));
m_crossReports.put(domain, m_dailyReportService.queryCrossReport(domain, start, end));
MatrixReport matrixReport = m_dailyReportService.queryMatrixReport(domain, start, end);
m_matrixReports.put(domain, matrixReport);
new MatrixReportFilter().visitMatrixReport(matrixReport);
m_sqlReports.put(domain, m_dailyReportService.querySqlReport(domain, start, end));
}
String cat = "Cat";
m_stateReports.put(cat, m_dailyReportService.queryStateReport(cat, start, end));
m_bugReports.put(cat, m_dailyReportService.queryBugReport(cat, start, end));
m_end = end.getTime();
}
@Override
public void run() {
boolean active = true;
while (active) {
Date date = TimeUtil.getCurrentDay();
long time = date.getTime();
if (time > m_end) {
Transaction t = Cat.newTransaction("ReportReload", "Week");
try {
reload();
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
Cat.logError(e);
t.setStatus(e);
} finally {
t.complete();
}
}
try {
Thread.sleep(60 * 60 * 1000);
} catch (InterruptedException e) {
active = false;
}
}
}
@Override
public void shutdown() {
}
}
public BugReport queryBugReport(String domain, Date start) {
return m_bugReports.get(domain);
}
}
package com.dianping.cat.report.service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.heartbeat.model.entity.HeartbeatReport;
import com.dianping.cat.consumer.matrix.MatrixReportFilter;
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.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.home.service.entity.ServiceReport;
import com.dianping.cat.message.Transaction;
public class WeeklyReportCache implements Initializable {
private long m_end;
private Map<String, TransactionReport> m_transactionReports = new HashMap<String, TransactionReport>();
private Map<String, EventReport> m_eventReports = new HashMap<String, EventReport>();
private Map<String, ProblemReport> m_problemReports = new HashMap<String, ProblemReport>();
private Map<String, MatrixReport> m_matrixReports = new HashMap<String, MatrixReport>();
private Map<String, CrossReport> m_crossReports = new HashMap<String, CrossReport>();
private Map<String, SqlReport> m_sqlReports = new HashMap<String, SqlReport>();
private Map<String, StateReport> m_stateReports = new HashMap<String, StateReport>();
private Map<String, BugReport> m_bugReports = new HashMap<String, BugReport>();
private Map<String, ServiceReport> m_serviceReports = new HashMap<String, ServiceReport>();
@Inject
private DailyReportService m_dailyReportService;
@Inject
private HourlyReportService m_hourReportService;
@Inject
private ServerConfigManager m_serverConfigManager;
@Override
public void initialize() throws InitializationException {
if (m_serverConfigManager.isJobMachine()) {
Threads.forGroup("Cat").start(new Reload());
}
}
public BugReport queryBugReport(String domain, Date start) {
return m_bugReports.get(domain);
}
public CrossReport queryCrossReport(String domain, Date start) {
return m_crossReports.get(domain);
}
public EventReport queryEventReport(String domain, Date start) {
return m_eventReports.get(domain);
}
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
return null;
}
public MatrixReport queryMatrixReport(String domain, Date start) {
return m_matrixReports.get(domain);
}
public ProblemReport queryProblemReport(String domain, Date start) {
return m_problemReports.get(domain);
}
public ServiceReport queryServiceReport(String domain, Date start) {
return m_serviceReports.get(domain);
}
public SqlReport querySqlReport(String domain, Date start) {
return m_sqlReports.get(domain);
}
public StateReport queryStateReport(String domain, Date start) {
return m_stateReports.get(domain);
}
public TransactionReport queryTransactionReport(String domain, Date start) {
return m_transactionReports.get(domain);
}
public class Reload implements Task {
@Override
public String getName() {
return "Weekly-Report-Cache";
}
private void reload() {
Date start = TimeUtil.getCurrentWeek();
Date end = TimeUtil.getCurrentDay();
Set<String> domains = m_hourReportService.queryAllDomainNames(start, end, "transaction");
for (String domain : domains) {
TransactionReport transactionReport = m_dailyReportService.queryTransactionReport(domain, start, end);
new TransactionReportUrlFilter().visitTransactionReport(transactionReport);
m_transactionReports.put(domain, transactionReport);
m_eventReports.put(domain, m_dailyReportService.queryEventReport(domain, start, end));
m_problemReports.put(domain, m_dailyReportService.queryProblemReport(domain, start, end));
m_crossReports.put(domain, m_dailyReportService.queryCrossReport(domain, start, end));
MatrixReport matrixReport = m_dailyReportService.queryMatrixReport(domain, start, end);
m_matrixReports.put(domain, matrixReport);
new MatrixReportFilter().visitMatrixReport(matrixReport);
m_sqlReports.put(domain, m_dailyReportService.querySqlReport(domain, start, end));
}
String cat = "Cat";
m_stateReports.put(cat, m_dailyReportService.queryStateReport(cat, start, end));
m_bugReports.put(cat, m_dailyReportService.queryBugReport(cat, start, end));
m_serviceReports.put(cat, m_dailyReportService.queryServiceReport(cat, start, end));
m_end = end.getTime();
}
@Override
public void run() {
boolean active = true;
while (active) {
Date date = TimeUtil.getCurrentDay();
long time = date.getTime();
if (time > m_end) {
Transaction t = Cat.newTransaction("ReportReload", "Week");
try {
reload();
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
Cat.logError(e);
t.setStatus(e);
} finally {
t.complete();
}
}
try {
Thread.sleep(60 * 60 * 1000);
} catch (InterruptedException e) {
active = false;
}
}
}
@Override
public void shutdown() {
}
}
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.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 {
public CrossReport queryCrossReport(String domain, Date start);
public EventReport queryEventReport(String domain, Date start);
public HeartbeatReport queryHeartbeatReport(String domain, Date start);
public MatrixReport queryMatrixReport(String domain, Date start);
public ProblemReport queryProblemReport(String domain, Date start);
public SqlReport querySqlReport(String domain, Date start);
public StateReport queryStateReport(String domain, Date start);
public TransactionReport queryTransactionReport(String domain, Date start);
public boolean insert(WeeklyReport report);
public BugReport queryBugReport(String domain, Date start);
}
package com.dianping.cat.report.service;
import java.util.Date;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.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;
import com.dianping.cat.home.service.entity.ServiceReport;
public interface WeeklyReportService {
public boolean insert(WeeklyReport report);
public BugReport queryBugReport(String domain, Date start);
public CrossReport queryCrossReport(String domain, Date start);
public EventReport queryEventReport(String domain, Date start);
public HeartbeatReport queryHeartbeatReport(String domain, Date start);
public MatrixReport queryMatrixReport(String domain, Date start);
public ProblemReport queryProblemReport(String domain, Date start);
public ServiceReport queryServiceReport(String domain, Date start);
public SqlReport querySqlReport(String domain, Date start);
public StateReport queryStateReport(String domain, Date start);
public TransactionReport queryTransactionReport(String domain, Date start);
}
package com.dianping.cat.report.service.impl;
import java.util.Date;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.state.model.entity.StateReport;
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 {
@Inject
private MonthlyReportDao m_monthlyReportDao;
@Override
public CrossReport queryCrossReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "cross",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new CrossReport(domain);
}
@Override
public EventReport queryEventReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "event",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.event.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new EventReport(domain);
}
@Override
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "heartbeat",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.heartbeat.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new HeartbeatReport(domain);
}
@Override
public MatrixReport queryMatrixReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "matrix",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.matrix.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new MatrixReport(domain);
}
@Override
public ProblemReport queryProblemReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "problem",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new ProblemReport(domain);
}
@Override
public SqlReport querySqlReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "sql",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.sql.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new SqlReport(domain);
}
@Override
public StateReport queryStateReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "state",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.state.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new StateReport(domain);
}
@Override
public TransactionReport queryTransactionReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "transaction",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
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) {
try {
m_monthlyReportDao.insert(report);
return true;
} catch (DalException e) {
Cat.logError(e);
return false;
}
}
}
package com.dianping.cat.report.service.impl;
import java.util.Date;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.state.model.entity.StateReport;
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.home.service.entity.ServiceReport;
import com.dianping.cat.report.service.MonthlyReportService;
public class MonthlyReportServiceImpl implements MonthlyReportService {
@Inject
private MonthlyReportDao m_monthlyReportDao;
@Override
public boolean insert(MonthlyReport report) {
try {
m_monthlyReportDao.insert(report);
return true;
} catch (DalException e) {
Cat.logError(e);
return false;
}
}
@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 CrossReport queryCrossReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "cross",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new CrossReport(domain);
}
@Override
public EventReport queryEventReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "event",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.event.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new EventReport(domain);
}
@Override
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "heartbeat",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.heartbeat.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new HeartbeatReport(domain);
}
@Override
public MatrixReport queryMatrixReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "matrix",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.matrix.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new MatrixReport(domain);
}
@Override
public ProblemReport queryProblemReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "problem",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new ProblemReport(domain);
}
@Override
public ServiceReport queryServiceReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "service",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.home.service.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new ServiceReport(domain);
}
@Override
public SqlReport querySqlReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "sql",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.sql.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new SqlReport(domain);
}
@Override
public StateReport queryStateReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "state",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.state.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new StateReport(domain);
}
@Override
public TransactionReport queryTransactionReport(String domain, Date start) {
try {
MonthlyReport entity = m_monthlyReportDao.findReportByDomainNamePeriod(start, domain, "transaction",
MonthlyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new TransactionReport(domain);
}
}
package com.dianping.cat.report.service.impl;
import java.util.Date;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.state.model.entity.StateReport;
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 {
@Inject
private WeeklyReportDao m_weeklyReportDao;
@Override
public CrossReport queryCrossReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "cross",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new CrossReport(domain);
}
@Override
public EventReport queryEventReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "event",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.event.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new EventReport(domain);
}
@Override
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "heartbeat",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.heartbeat.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new HeartbeatReport(domain);
}
@Override
public MatrixReport queryMatrixReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "matrix",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.matrix.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new MatrixReport(domain);
}
@Override
public ProblemReport queryProblemReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "problem",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new ProblemReport(domain);
}
@Override
public SqlReport querySqlReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "sql",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.sql.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new SqlReport(domain);
}
@Override
public StateReport queryStateReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "state",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.state.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new StateReport(domain);
}
@Override
public TransactionReport queryTransactionReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "transaction",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
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) {
try {
m_weeklyReportDao.insert(report);
return true;
} catch (DalException e) {
Cat.logError(e);
return false;
}
}
}
package com.dianping.cat.report.service.impl;
import java.util.Date;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
import com.dianping.cat.consumer.event.model.entity.EventReport;
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.state.model.entity.StateReport;
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.home.service.entity.ServiceReport;
import com.dianping.cat.report.service.WeeklyReportService;
public class WeeklyReportServiceImpl implements WeeklyReportService {
@Inject
private WeeklyReportDao m_weeklyReportDao;
@Override
public boolean insert(WeeklyReport report) {
try {
m_weeklyReportDao.insert(report);
return true;
} catch (DalException e) {
Cat.logError(e);
return false;
}
}
@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 CrossReport queryCrossReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "cross",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.cross.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new CrossReport(domain);
}
@Override
public EventReport queryEventReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "event",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.event.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new EventReport(domain);
}
@Override
public HeartbeatReport queryHeartbeatReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "heartbeat",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.heartbeat.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new HeartbeatReport(domain);
}
@Override
public MatrixReport queryMatrixReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "matrix",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.matrix.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new MatrixReport(domain);
}
@Override
public ProblemReport queryProblemReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "problem",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new ProblemReport(domain);
}
@Override
public ServiceReport queryServiceReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "service",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.home.service.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new ServiceReport(domain);
}
@Override
public SqlReport querySqlReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "sql",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.sql.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new SqlReport(domain);
}
@Override
public StateReport queryStateReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "state",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.state.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new StateReport(domain);
}
@Override
public TransactionReport queryTransactionReport(String domain, Date start) {
try {
WeeklyReport entity = m_weeklyReportDao.findReportByDomainNamePeriod(start, domain, "transaction",
WeeklyReportEntity.READSET_FULL);
String content = entity.getContent();
return com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser.parse(content);
} catch (Exception e) {
Cat.logError(e);
}
return new TransactionReport(domain);
}
}
package com.dianping.cat.report.task.service;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
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.DomainManager;
import com.dianping.cat.consumer.cross.model.entity.CrossReport;
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.service.entity.Domain;
import com.dianping.cat.home.service.entity.ServiceReport;
import com.dianping.cat.report.page.cross.display.ProjectInfo;
import com.dianping.cat.report.page.cross.display.TypeDetailInfo;
import com.dianping.cat.report.service.ReportService;
import com.dianping.cat.report.task.TaskHelper;
import com.dianping.cat.report.task.spi.ReportTaskBuilder;
public class ServiceReportBuilder implements ReportTaskBuilder {
@Inject
protected ReportService m_reportService;
@Inject
private DomainManager m_domainManager;
Map<String, Domain> stat = new HashMap<String, Domain>();
@Override
public boolean buildDailyTask(String name, String domain, Date period) {
ServiceReport serviceReport = queryHourlyReportsByDuration(name, domain, period, TaskHelper.tomorrowZero(period));
DailyReport report = new DailyReport();
report.setContent(serviceReport.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) {
ServiceReport serviceReport = new ServiceReport(CatString.CAT);
Date end = new Date(start.getTime() + TimeUtil.ONE_HOUR);
Set<String> domains = m_reportService.queryAllDomainNames(start, end, "cross");
for (String domainName : domains) {
CrossReport crossReport = m_reportService.queryCrossReport(domainName, start, end);
ProjectInfo projectInfo = new ProjectInfo(TimeUtil.ONE_HOUR);
projectInfo.setDomainManager(m_domainManager);
projectInfo.setClientIp(CatString.ALL);
projectInfo.visitCrossReport(crossReport);
Collection<TypeDetailInfo> callInfos = projectInfo.getCallProjectsInfo();
for (TypeDetailInfo typeInfo : callInfos) {
if (!validataService(typeInfo)) {
merge(serviceReport.findOrCreateDomain(typeInfo.getProjectName()), typeInfo);
}
}
}
HourlyReport report = new HourlyReport();
report.setContent(serviceReport.toString());
report.setCreationDate(new Date());
report.setDomain(domain);
report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress());
report.setName(name);
report.setPeriod(start);
report.setType(1);
System.out.println(report);
return m_reportService.insertHourlyReport(report);
}
public void merge(Domain domain, TypeDetailInfo info) {
domain.setTotalCount(domain.getTotalCount() + info.getTotalCount());
domain.setFailureCount(domain.getFailureCount() + info.getFailureCount());
domain.setSum(domain.getSum() + info.getSum());
if (domain.getTotalCount() > 0) {
domain.setAvg(domain.getSum() / domain.getTotalCount());
domain.setFailurePercent((double) domain.getFailureCount() / domain.getTotalCount());
}
}
private boolean validataService(TypeDetailInfo typeInfo) {
return typeInfo.getProjectName().equalsIgnoreCase(ProjectInfo.ALL_SERVER)
|| typeInfo.getProjectName().equalsIgnoreCase("UnknownProject");
}
public Domain findOrCreate(String project, Map<String, Domain> sdMap) {
Domain d = sdMap.get(project);
if (d == null) {
d = new Domain();
sdMap.put(project, d);
}
return d;
}
@Override
public boolean buildMonthlyTask(String name, String domain, Date period) {
ServiceReport serviceReport = queryDailyReportsByDuration(domain, period, TaskHelper.nextMonthStart(period));
MonthlyReport report = new MonthlyReport();
report.setContent(serviceReport.toString());
report.setCreationDate(new Date());
report.setDomain(domain);
report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress());
report.setName(name);
report.setPeriod(period);
report.setType(1);
System.out.println(report);
return m_reportService.insertMonthlyReport(report);
}
@Override
public boolean buildWeeklyTask(String name, String domain, Date period) {
ServiceReport serviceReport = queryDailyReportsByDuration(domain, period, new Date(period.getTime()
+ TimeUtil.ONE_WEEK));
WeeklyReport report = new WeeklyReport();
String content = serviceReport.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 ServiceReport queryDailyReportsByDuration(String domain, Date start, Date end) {
long startTime = start.getTime();
long endTime = end.getTime();
ServiceReportMerger merger = new ServiceReportMerger(new ServiceReport(domain));
for (; startTime < endTime; startTime += TimeUtil.ONE_DAY) {
try {
ServiceReport reportModel = m_reportService.queryServiceReport(domain, new Date(startTime), new Date(
startTime + TimeUtil.ONE_DAY));
reportModel.accept(merger);
} catch (Exception e) {
Cat.logError(e);
}
}
ServiceReport serviceReport = merger.getServiceReport();
serviceReport.setStartTime(start);
serviceReport.setEndTime(end);
return serviceReport;
}
private ServiceReport queryHourlyReportsByDuration(String name, String domain, Date period, Date endDate) {
long startTime = period.getTime();
long endTime = endDate.getTime();
ServiceReportMerger merger = new ServiceReportMerger(new ServiceReport(domain));
for (; startTime < endTime; startTime = startTime + TimeUtil.ONE_HOUR) {
Date date = new Date(startTime);
ServiceReport reportModel = m_reportService.queryServiceReport(domain, date, new Date(date.getTime()
+ TimeUtil.ONE_HOUR));
reportModel.accept(merger);
}
return merger.getServiceReport();
}
}
package com.dianping.cat.report.task.service;
import com.dianping.cat.home.service.entity.ServiceReport;
import com.dianping.cat.home.service.entity.Domain;
import com.dianping.cat.home.service.transform.DefaultMerger;
public class ServiceReportMerger extends DefaultMerger {
public ServiceReportMerger(ServiceReport serviceReport) {
super(serviceReport);
}
@Override
protected void mergeServiceReport(ServiceReport old, ServiceReport bugReport) {
old.setStartTime(bugReport.getStartTime());
old.setEndTime(bugReport.getEndTime());
old.setDomain(bugReport.getDomain());
super.mergeServiceReport(old, bugReport);
}
@Override
protected void mergeDomain(Domain old, Domain domain) {
old.setTotalCount(old.getTotalCount() + domain.getTotalCount());
old.setFailureCount(old.getFailureCount() + domain.getFailureCount());
old.setFailurePercent(old.getFailureCount() * 1.0 / old.getTotalCount());
old.setSum(old.getSum() + domain.getSum());
old.setAvg(old.getSum() / old.getTotalCount());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="service-report" root="true">
<attribute name="startTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="domain" value-type="String" />
<attribute name="endTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<entity-ref name="domain" type="list" names="domains" />
</entity>
<entity name="domain">
<attribute name="id" value-type="String" />
<element name="totalCount" value-type="int" />
<element name="failureCount" value-type="int" />
<element name="failurePercent" value-type="double" />
<element name="sum" value-type="int" />
<element name="avg" value-type="int" />
<element name="qps" value-type="int" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="service-report-codegen.xml" />
<file path="service-report-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.home.service" enable-merger="true" enable-sax-parser="true"
enable-base-visitor="true" enable-json-parser="true" enable-json-builder="true" enable-native-parser="true" enable-native-builder="true"
enable-xml-parser="false" enable-xml-builder="false">
<entity name="service-report" root="true">
<attribute name="startTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="domain" value-type="String" key="true"/>
<attribute name="endTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<entity-ref name="domain" type="map" names="domains" method-find-or-create="true"/>
</entity>
<entity name="domain">
<attribute name="id" value-type="String" key="true"/>
<element name="totalCount" value-type="long" primitive="true"/>
<element name="failureCount" value-type="long" primitive="true"/>
<element name="failurePercent" value-type="double" primitive="true"/>
<element name="sum" value-type="double" primitive="true" />
<element name="avg" value-type="double" primitive="true" />
<element name="qps" value-type="double" primitive="true" />
</entity>
</model>
......@@ -450,6 +450,15 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.service.ServiceReportBuilder</role>
<implementation>com.dianping.cat.report.task.service.ServiceReportBuilder</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.service.ReportService</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.matrix.MatrixReportBuilder</role>
<implementation>com.dianping.cat.report.task.matrix.MatrixReportBuilder</implementation>
......@@ -547,6 +556,9 @@
<requirement>
<role>com.dianping.cat.report.task.bug.BugReportBuilder</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.service.ServiceReportBuilder</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.metric.MetricBaselineReportBuilder</role>
</requirement>
......@@ -2495,7 +2507,7 @@
<role>com.dianping.cat.report.service.ReportService</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.view.DomainNavManager</role>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.BugConfigManager</role>
......
......@@ -18,4 +18,7 @@
<model package="com.dianping.cat.home.bug.config" name="bug-config">
<sample-model>src/test/resources/com/dianping/cat/report/page/bug/bug-config.xml</sample-model>
</model>
<model package="com.dianping.cat.home.service" name="service-report">
<sample-model>src\test\resources\com\dianping\cat\report\page\service\service.xml</sample-model>
</model>
</wizard>
......@@ -56,7 +56,7 @@
<page name="externalError" title="externalError" path="externalError" template="default">
<description>ExternalError</description>
</page>
<page name="bug" title="Bug" path="bug" view="/jsp/report/bug/bug.jsp" template="default">
<page name="bug" title="Statistics" path="bug" view="/jsp/report/bug/bug.jsp" template="default">
<description>Bug</description>
</page>
</module>
......
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="model" type="com.dianping.cat.report.page.bug.Model" scope="request"/>
${model.bugs}
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="model" type="com.dianping.cat.report.page.bug.Model" scope="request"/>
${model.bugs}
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册