提交 4dbd2a75 编写于 作者: Y youyong205

modify the cat problem all report

上级 6e6b30c5
......@@ -138,8 +138,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
.req(ServerConfigManager.class));
all.add(C(MessageAnalyzer.class, ID, ProblemAnalyzer.class).is(PER_LOOKUP) //
.req(ReportManager.class, ID).req(ReportDelegate.class, ID) //
.req(ProblemHandler.class, //
.req(ReportManager.class, ID).req(ProblemHandler.class, //
new String[] { DefaultProblemHandler.ID, LongExecutionProblemHandler.ID }, "m_handlers"));
all.add(C(ReportManager.class, ID, DefaultReportManager.class) //
.req(ReportDelegate.class, ID) //
......@@ -196,7 +195,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
return all;
}
private Collection<Component> defineMetricComponents() {
final List<Component> all = new ArrayList<Component>();
......
......@@ -2,7 +2,6 @@ package com.dianping.cat.consumer.problem;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
......@@ -10,7 +9,6 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Constants;
import com.dianping.cat.analysis.AbstractMessageAnalyzer;
import com.dianping.cat.consumer.problem.model.entity.Machine;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
......@@ -24,9 +22,6 @@ public class ProblemAnalyzer extends AbstractMessageAnalyzer<ProblemReport> impl
@Inject(ID)
private ReportManager<ProblemReport> m_reportManager;
@Inject
private ProblemDelegate m_problemDelegate;
@Inject
private List<ProblemHandler> m_handlers;
......@@ -46,17 +41,11 @@ public class ProblemAnalyzer extends AbstractMessageAnalyzer<ProblemReport> impl
@Override
public ProblemReport getReport(String domain) {
if (!Constants.ALL.equals(domain)) {
ProblemReport report = m_reportManager.getHourlyReport(getStartTime(), domain, false);
ProblemReport report = m_reportManager.getHourlyReport(getStartTime(), domain, false);
report.getDomainNames().addAll(m_reportManager.getDomains(getStartTime()));
report.getDomainNames().addAll(m_reportManager.getDomains(getStartTime()));
return report;
} else {
Map<String, ProblemReport> reports = m_reportManager.getHourlyReports(getStartTime());
return m_problemDelegate.createAggregatedReport(reports);
}
return report;
}
@Override
......
......@@ -39,12 +39,6 @@ public class ProblemDelegate implements ReportDelegate<ProblemReport> {
domainNames.addAll(reports.keySet());
}
if (reports.size() > 0) {
ProblemReport all = createAggregatedReport(reports);
reports.put(all.getDomain(), all);
}
try {
ProblemReportURLFilter problemReportURLFilter = new ProblemReportURLFilter();
......@@ -68,26 +62,6 @@ public class ProblemDelegate implements ReportDelegate<ProblemReport> {
return report.toString();
}
public ProblemReport createAggregatedReport(Map<String, ProblemReport> reports) {
ProblemReport report = new ProblemReport(Constants.ALL);
ProblemReportAllBuilder visitor = new ProblemReportAllBuilder(report);
try {
for (ProblemReport r : reports.values()) {
String domain = r.getDomain();
if (m_manager.validateDomain(domain)) {
report.getIps().add(domain);
report.getDomainNames().add(domain);
visitor.visitProblemReport(r);
}
}
} catch (Exception e) {
Cat.logError(e);
}
return report;
}
@Override
public boolean createHourlyTask(ProblemReport report) {
String domain = report.getDomain();
......
package com.dianping.cat.consumer.problem;
import java.util.List;
import com.dianping.cat.consumer.problem.model.entity.Duration;
import com.dianping.cat.consumer.problem.model.entity.Entry;
import com.dianping.cat.consumer.problem.model.entity.JavaThread;
import com.dianping.cat.consumer.problem.model.entity.Machine;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.problem.model.entity.Segment;
import com.dianping.cat.consumer.problem.model.transform.BaseVisitor;
public class ProblemReportAllBuilder extends BaseVisitor {
private ProblemReport m_report;
private String m_currentDomain;
private String m_currentType;
private String m_currentState;
private String m_currentThread;
public ProblemReportAllBuilder(ProblemReport report) {
m_report = report;
}
protected Entry findOrCreatEntry(Machine machine, String type, String status) {
List<Entry> entries = machine.getEntries();
for (Entry entry : entries) {
if (entry.getType().equals(type) && entry.getStatus().equals(status)) {
return entry;
}
}
Entry entry = new Entry();
entry.setStatus(status);
entry.setType(type);
entries.add(entry);
return entry;
}
@Override
public void visitDuration(Duration duration) {
int value = duration.getValue();
Machine machine = m_report.findOrCreateMachine(m_currentDomain);
Entry entry = findOrCreatEntry(machine, m_currentType, m_currentState);
Duration temp = entry.findOrCreateDuration(value);
temp.setCount(temp.getCount() + duration.getCount());
}
@Override
public void visitEntry(Entry entry) {
m_currentType = entry.getType();
m_currentState = entry.getStatus();
super.visitEntry(entry);
}
@Override
public void visitProblemReport(ProblemReport problemReport) {
m_currentDomain = problemReport.getDomain();
if (m_report.getStartTime() == null) {
m_report.setStartTime(problemReport.getStartTime());
}
if (m_report.getEndTime() == null) {
m_report.setEndTime(problemReport.getEndTime());
}
super.visitProblemReport(problemReport);
}
@Override
public void visitSegment(Segment segment) {
int minute = segment.getId();
int count = segment.getCount();
Machine machine = m_report.findOrCreateMachine(m_currentDomain);
Entry entry = findOrCreatEntry(machine, m_currentType, m_currentState);
JavaThread thread = entry.findOrCreateThread(m_currentThread);
Segment temp = thread.findOrCreateSegment(minute);
temp.setCount(temp.getCount() + count);
}
@Override
public void visitThread(JavaThread thread) {
m_currentThread = thread.getId();
super.visitThread(thread);
}
}
\ No newline at end of file
......@@ -144,10 +144,6 @@
<role>com.dianping.cat.service.ReportManager</role>
<role-hint>problem</role-hint>
</requirement>
<requirement>
<role>com.dianping.cat.service.ReportDelegate</role>
<role-hint>problem</role-hint>
</requirement>
<requirement>
<role>com.dianping.cat.consumer.problem.ProblemHandler</role>
<role-hints>
......
......@@ -26,7 +26,6 @@ import com.dianping.cat.consumer.metric.MetricAnalyzerTest;
import com.dianping.cat.consumer.metric.ProductLineConfigManagerTest;
import com.dianping.cat.consumer.problem.ProblemAnalyzerTest;
import com.dianping.cat.consumer.problem.ProblemHandlerTest;
import com.dianping.cat.consumer.problem.ProblemReportAllBuilderTest;
import com.dianping.cat.consumer.problem.ProblemReportMergerTest;
import com.dianping.cat.consumer.problem.ProblemReportTest;
import com.dianping.cat.consumer.problem.ProblemURLFilterTest;
......@@ -91,8 +90,6 @@ ProblemAnalyzerTest.class,
ProblemReportMergerTest.class,
ProblemReportAllBuilderTest.class,
CompositeFormatTest.class,
DefaultFormatTest.class,
......
package com.dianping.cat.consumer.problem;
import junit.framework.Assert;
import org.junit.Test;
import org.unidal.helper.Files;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.problem.model.transform.DefaultSaxParser;
public class ProblemReportAllBuilderTest {
@Test
public void test() throws Exception{
ProblemReport report = new ProblemReport("All");
ProblemReportAllBuilder builder = new ProblemReportAllBuilder(report);
String oldXml = Files.forIO().readFrom(getClass().getResourceAsStream("problem-report-builder1.xml"), "utf-8");
String newXml = Files.forIO().readFrom(getClass().getResourceAsStream("problem-report-builder2.xml"), "utf-8");
String expected = Files.forIO().readFrom(getClass().getResourceAsStream("problem-report-builder-all.xml"), "utf-8");
ProblemReport reportOld = DefaultSaxParser.parse(oldXml);
ProblemReport reportNew = DefaultSaxParser.parse(newXml);
builder.visitProblemReport(reportOld);
builder.visitProblemReport(reportNew);
Assert.assertEquals(expected.replaceAll("\r", ""), report.toString().replaceAll("\r", ""));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册