提交 dc3ee0ef 编写于 作者: A ainilife

Merge branch 'biz' of http://code.dianpingoa.com/arch/cat into biz

package com.dianping.cat.consumer.transaction;
import com.dianping.cat.consumer.transaction.model.entity.Machine;
import com.dianping.cat.consumer.transaction.model.entity.TransactionName;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionType;
import com.dianping.cat.consumer.transaction.model.transform.BaseVisitor;
......@@ -11,9 +12,49 @@ public class TransactionReportTypeAggregator extends BaseVisitor {
public String m_currentDomain;
private String m_currentType;
public TransactionReportTypeAggregator(TransactionReport report) {
m_report = report;
}
private void mergeName(TransactionName old, TransactionName other) {
long totalCountSum = old.getTotalCount() + other.getTotalCount();
old.setTotalCount(totalCountSum);
old.setFailCount(old.getFailCount() + other.getFailCount());
if (other.getMin() < old.getMin()) {
old.setMin(other.getMin());
}
if (other.getMax() > old.getMax()) {
old.setMax(other.getMax());
}
old.setSum(old.getSum() + other.getSum());
old.setSum2(old.getSum2() + other.getSum2());
if (totalCountSum > 0) {
double line95Values = old.getLine95Value() * old.getTotalCount() + other.getLine95Value()
* other.getTotalCount();
old.setLine95Value(line95Values / totalCountSum);
}
if (old.getTotalCount() > 0) {
old.setFailPercent(old.getFailCount() * 100.0 / old.getTotalCount());
old.setAvg(old.getSum() / old.getTotalCount());
}
if (old.getSuccessMessageUrl() == null) {
old.setSuccessMessageUrl(other.getSuccessMessageUrl());
}
if (old.getFailMessageUrl() == null) {
old.setFailMessageUrl(other.getFailMessageUrl());
}
}
private void mergeType(TransactionType old, TransactionType other) {
long totalCountSum = old.getTotalCount() + other.getTotalCount();
......@@ -67,6 +108,20 @@ public class TransactionReportTypeAggregator extends BaseVisitor {
String typeName = type.getId();
TransactionType result = machine.findOrCreateType(typeName);
m_currentType = typeName;
mergeType(result, type);
if (typeName.startsWith("Cache.")) {
super.visitType(type);
}
}
@Override
public void visitName(TransactionName name) {
Machine machine = m_report.findOrCreateMachine(m_currentDomain);
TransactionType curentType = machine.findOrCreateType(m_currentType);
TransactionName currentName = curentType.findOrCreateName(name.getId());
mergeName(currentName, name);
}
}
\ No newline at end of file
......@@ -24,6 +24,7 @@ import com.dianping.cat.consumer.transaction.TransactionAnalyzerTest;
import com.dianping.cat.consumer.transaction.TransactionReportFilterTest;
import com.dianping.cat.consumer.transaction.TransactionReportMergerTest;
import com.dianping.cat.consumer.transaction.TransactionReportTest;
import com.dianping.cat.consumer.transaction.TransactionReportTypeAggergatorTest;
@RunWith(Suite.class)
@SuiteClasses({
......@@ -77,7 +78,9 @@ ProblemReportMergerTest.class,
CompositeFormatTest.class,
DefaultFormatTest.class
DefaultFormatTest.class,
TransactionReportTypeAggergatorTest.class
})
public class AllTests {
......
package com.dianping.cat.consumer.transaction;
import junit.framework.Assert;
import org.junit.Test;
import org.unidal.helper.Files;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.consumer.transaction.model.transform.DefaultSaxParser;
public class TransactionReportTypeAggergatorTest {
@Test
public void test() throws Exception {
TransactionReport report1 = parse("transaction_report_aggergator1.xml");
TransactionReport report2 = parse("transaction_report_aggergator2.xml");
TransactionReport report3 = parse("transaction_report_aggergator3.xml");
TransactionReport report4 = parse("transaction_report_aggergator4.xml");
TransactionReport result = new TransactionReport("All");
TransactionReportTypeAggregator aggergator = new TransactionReportTypeAggregator(result);
aggergator.visitTransactionReport(report1);
aggergator.visitTransactionReport(report2);
aggergator.visitTransactionReport(report3);
aggergator.visitTransactionReport(report4);
String expected = Files.forIO().readFrom(getClass().getResourceAsStream("transaction_report_aggergatorAll.xml"), "utf-8");
Assert.assertEquals(expected.replaceAll("\\r", ""), result.toString().replaceAll("\\r", ""));
}
private TransactionReport parse(String name) throws Exception {
String source = Files.forIO().readFrom(getClass().getResourceAsStream(name), "utf-8");
return DefaultSaxParser.parse(source);
}
}
<?xml version="1.0" encoding="utf-8"?>
<transaction-report domain="Cat" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<domain>Cat</domain>
<ip>192.168.165.2</ip>
<machine ip="192.168.165.2">
<type id="Cache.Web" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
</machine>
</transaction-report>
<?xml version="1.0" encoding="utf-8"?>
<transaction-report domain="Cat2" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<domain>Cat</domain>
<ip>192.168.165.2</ip>
<machine ip="192.168.165.2">
<type id="Cache.memcached-membercard" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
</machine>
</transaction-report>
<?xml version="1.0" encoding="utf-8"?>
<transaction-report domain="Cat3" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<domain>Cat</domain>
<ip>192.168.165.2</ip>
<machine ip="192.168.165.2">
<type id="Cache.memcached-membercard" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
</machine>
</transaction-report>
<?xml version="1.0" encoding="utf-8"?>
<transaction-report domain="Cat3" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<domain>Cat</domain>
<ip>192.168.165.2</ip>
<machine ip="192.168.165.2">
<type id="Cache.memcached-membercard" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="3.5" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<range value="0" count="2" sum="49.772000000000006" avg="24.9" fails="0"/>
<duration value="32" count="2"/>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<name id="model" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
<range value="0" count="1" sum="39780.276" avg="39780.3" fails="0"/>
<duration value="65536" count="1"/>
</name>
</type>
</machine>
</transaction-report>
<?xml version="1.0" encoding="utf-8"?>
<transaction-report domain="All" startTime="2012-05-17 13:00:00" endTime="2012-05-17 13:59:59">
<machine ip="Cat">
<type id="Cache.Web" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="0.0" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="0.0" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
</type>
</machine>
<machine ip="Cat2">
<type id="Cache.memcached-membercard" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="0.0" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="2" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="49.8" sum2="1262.6" std="0.0" tps="0.00" line95Value="28.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
</name>
</type>
<type id="URL" totalCount="1" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="39780.3" sum2="1582470358.6" std="0.0" tps="0.00" line95Value="39780.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
</type>
</machine>
<machine ip="Cat3">
<type id="Cache.memcached-membercard" totalCount="4" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="99.6" sum2="2525.2" std="0.0" tps="0.00" line95Value="42.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
<name id="Status" totalCount="4" failCount="0" failPercent="0.00" min="21.42" max="28.35" avg="24.9" sum="99.6" sum2="2525.2" std="0.0" tps="0.00" line95Value="42.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230848968-0</successMessageUrl>
</name>
</type>
<type id="URL" totalCount="2" failCount="0" failPercent="0.00" min="39780.28" max="39780.28" avg="39780.3" sum="79560.6" sum2="3164940717.2" std="0.0" tps="0.00" line95Value="59670.00" line99Value="0.00">
<successMessageUrl>Cat-c0a8a501-1337230896586-0</successMessageUrl>
</type>
</machine>
</transaction-report>
package com.dianping.cat.report.task.state;
import static com.dianping.cat.consumer.state.model.Constants.ENTITY_PROCESSDOMAINS;
import java.util.Stack;
import com.dianping.cat.consumer.state.StateReportMerger;
......@@ -14,22 +16,18 @@ public class HistoryStateReportMerger extends StateReportMerger {
}
protected void visitMachineChildren(Machine old, Machine machine) {
Stack<Object> objs = getObjects();
for (ProcessDomain source : machine.getProcessDomains().values()) {
ProcessDomain target = old.findProcessDomain(source.getName());
if (target == null) {
target = new ProcessDomain(source.getName());
old.addProcessDomain(target);
if (old != null) {
Stack<Object> objs = getObjects();
Stack<String> tags = getTags();
objs.push(old);
for (ProcessDomain processDomain : machine.getProcessDomains().values()) {
tags.push(ENTITY_PROCESSDOMAINS);
visitProcessDomain(processDomain);
tags.pop();
}
objs.push(target);
source.accept(this);
objs.pop();
}
super.visitMachineChildren(machine, old);
}
}
var isCtrl = false;
function showGraphs(anchor,target) {
if (isCtrl) return true;
var cell = document.getElementById(target);
var text = anchor.innerHTML;
if (text == '[:: show ::]') {
anchor.innerHTML = '[:: hide ::]';
if (cell.nodeName == 'IMG') { // <img src='...'/>
cell.src = "?op=graphs&id="+id;
} else { // <div>...</div>
$.ajax({
type: "get",
url: anchor.href,
success : function(data, textStatus) {
cell.innerHTML = data;
}
});
}
cell.style.display = 'block';
cell.parentNode.style.display = 'block';
} else {
anchor.innerHTML = '[:: show ::]';
cell.style.display = 'none';
cell.parentNode.style.display = 'none';
}
return false;
}
$(document).keydown(function(e) {
if(e.ctrlKey || e.metaKey) isCtrl = true;
}).keyup(function(e) {
isCtrl = false;
});
$(document).delegate('.graph_link', 'click', function(e){
$(document).delegate('.sql_graph_link', 'click', function(e){
var anchor = this,
el = $(anchor),
id = Number(el.attr('data-status')) || 0;
......
......@@ -60,7 +60,7 @@
<c:forEach var="item" items="${model.displaySqlReport.results}"
varStatus="status">
<tr class="${status.index mod 2==0 ? 'even' : 'odd'}">
<td class="left"><a href="" class="graph_link" data-status="${status.index}">[:: show ::]</a></td>
<td class="left"><a href="" class="sql_graph_link" data-status="${status.index}">[:: show ::]</a></td>
<td class="left">${item.id}</td>
<td>${w:format(item.totalCount,'#,###,###,###,##0')}</td>
<td>${w:format(item.failCount,'#,###,###,###,##0')}</td>
......
......@@ -59,7 +59,7 @@
<c:forEach var="item" items="${model.displaySqlReport.results}"
varStatus="status">
<tr class="${status.index mod 2==0 ? 'even' : 'odd'}">
<td class="left"><a href="" class="graph_link" data-status="${status.index}">[:: show ::]</a></td>
<td class="left"><a href="" class="sql_graph_link" data-status="${status.index}">[:: show ::]</a></td>
<td class="left">${item.id}</td>
<td>${w:format(item.totalCount,'#,###,###,###,##0')}</td>
<td>${w:format(item.failCount,'#,###,###,###,##0')}</td>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册