提交 231559af 编写于 作者: S sean.wang

add transaction type link

上级 43d1e09e
......@@ -63,49 +63,55 @@ public class TransactionReportAnalyzer extends AbstractMessageAnalyzer<Transacti
if (report == null) {
return report;
}
for (TransactionType type : report.getTypes().values()) {
long typeCount = 0;
long typeFailCount = 0;
double typeSum = 0;
double typeSum2 = 0;
Collection<TransactionName> names = type.getNames().values();
for (TransactionName name : names) {
long count = name.getTotalCount();
double sum = name.getSum();
double ave = sum / count;
double sum2 = name.getSum2();
double std = std(count, ave, sum2);
long failCount = name.getFailCount();
double failPercent = 100.0 * failCount / count;
name.setFailPercent(failPercent);
name.setAvg(ave);
name.setStd(std);
typeCount += count;
typeSum += sum;
typeSum2 += sum2;
typeFailCount += failCount;
if (type.getSuccessMessageUrl() == null && name.getSuccessMessageUrl() != null) {
type.setSuccessMessageUrl(name.getSuccessMessageUrl());
}
if (type.getFailMessageUrl() == null && name.getFailMessageUrl() != null) {
type.setFailMessageUrl(name.getFailMessageUrl());
}
type.setMax(Math.max(name.getMax(), type.getMax()));
type.setMin(Math.min(name.getMin(), type.getMin()));
}
type.setTotalCount(typeCount);
type.setFailCount(typeFailCount);
type.setSum(typeSum);
type.setSum2(typeSum2);
double typeAvg = typeSum / typeCount;
type.setAvg(typeAvg);
type.setFailPercent(100.0 * typeFailCount / typeCount);
type.setStd(std(typeCount, typeAvg, typeSum2));
doOneType(type);
}
return report;
}
/**
* @param type
*/
public void doOneType(TransactionType type) {
long typeCount = 0;
long typeFailCount = 0;
double typeSum = 0;
double typeSum2 = 0;
Collection<TransactionName> names = type.getNames().values();
for (TransactionName name : names) {
long count = name.getTotalCount();
double sum = name.getSum();
double ave = sum / count;
double sum2 = name.getSum2();
double std = std(count, ave, sum2);
long failCount = name.getFailCount();
double failPercent = 100.0 * failCount / count;
name.setFailPercent(failPercent);
name.setAvg(ave);
name.setStd(std);
typeCount += count;
typeSum += sum;
typeSum2 += sum2;
typeFailCount += failCount;
if (type.getSuccessMessageUrl() == null && name.getSuccessMessageUrl() != null) {
type.setSuccessMessageUrl(name.getSuccessMessageUrl());
}
if (type.getFailMessageUrl() == null && name.getFailMessageUrl() != null) {
type.setFailMessageUrl(name.getFailMessageUrl());
}
type.setMax(Math.max(name.getMax(), type.getMax()));
type.setMin(Math.min(name.getMin(), type.getMin()));
}
type.setTotalCount(typeCount);
type.setFailCount(typeFailCount);
type.setSum(typeSum);
type.setSum2(typeSum2);
double typeAvg = typeSum / typeCount;
type.setAvg(typeAvg);
type.setFailPercent(100.0 * typeFailCount / typeCount);
type.setStd(std(typeCount, typeAvg, typeSum2));
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
......@@ -187,12 +193,12 @@ public class TransactionReportAnalyzer extends AbstractMessageAnalyzer<Transacti
if (tree != null) {
if (t.isSuccess()) {
if (name.getSuccessMessageUrl() == null) {
String url = this.messageStorage.store(tree);
String url = this.messageStorage.store(tree); // store first success
name.setSuccessMessageUrl(url);
}
} else {
String url = this.messageStorage.store(tree); // store all errors
if (name.getFailMessageUrl() == null) {
String url = this.messageStorage.store(tree);
name.setFailMessageUrl(url);
}
}
......
......@@ -14,7 +14,12 @@ import com.site.web.mvc.PageHandler;
import com.site.web.mvc.annotation.InboundActionMeta;
import com.site.web.mvc.annotation.OutboundActionMeta;
import com.site.web.mvc.annotation.PayloadMeta;
import com.site.web.mvc.payload.ParameterProvider;
/**
* @author sean.wang
* @since Feb 6, 2012
*/
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
......@@ -37,11 +42,12 @@ public class Handler implements PageHandler<Context> {
model.setAction(Action.VIEW);
model.setPage(ReportPage.TRANSACTION);
TransactionReportAnalyzer analyzer = (TransactionReportAnalyzer) m_consumer
.getCurrentAnalyzer("transaction");
TransactionReportAnalyzer analyzer = (TransactionReportAnalyzer) m_consumer.getCurrentAnalyzer("transaction");
if (analyzer != null) {
model.setReport(analyzer.generate(ctx.getRequestContext().getParameterProvider().getParameter("domain")));
ParameterProvider provider = ctx.getRequestContext().getParameterProvider();
model.setReport(analyzer.generate(provider.getParameter("domain")));
model.setType(provider.getParameter("type"));
} else {
model.setReport(new TransactionReport("none"));
}
......
......@@ -7,6 +7,8 @@ import com.site.web.mvc.ViewModel;
public class Model extends ViewModel<ReportPage, Action, Context> {
private TransactionReport m_report;
private String type;
public Model(Context ctx) {
super(ctx);
......@@ -28,4 +30,12 @@ public class Model extends ViewModel<ReportPage, Action, Context> {
public void setReport(TransactionReport report) {
m_report = report;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
var tabledata = [];
$(function(){
var types = data["types"];
for (i in types) {
var type = types[i];
var sampleurl = type.failMessageUrl != null ? "<a href=\"m/"+type.failMessageUrl+"\">fail</a>" : "<a href=\"m/"+type.successMessageUrl+"\">success</a>";
var stat = "" + type.min + "/" + type.max + "/" + type.avg + "/" + type.std;
tabledata.push({"type":type.id, "total":type.totalCount, "fail":type.failCount, "failPercent":type.failPercent, "sample":sampleurl, "stat":stat});
}
var types = data["types"];
var nowdomain = data["domain"];
if(nowtype != "") {
var names = types[nowtype]["names"];
for (i in names) {
var name = names[i];
var sampleurl = name.failMessageUrl != null ? "<a href=\"m/"+name.failMessageUrl+"\">fail</a>" : "<a href=\"m/"+name.successMessageUrl+"\">success</a>";
var stat = "" + name.min + "/" + name.max + "/" + name.avg + "/" + name.std;
tabledata.push({"name":name.id, "total":name.totalCount, "fail":name.failCount, "failPercent":name.failPercent, "sample":sampleurl, "stat":stat});
}
} else {
for (i in types) {
var type = types[i];
var typeurl = "<a href=\"t?domain=" + nowdomain + "&type=" + type.id + "\">" + type.id + "</a>";
var sampleurl = type.failMessageUrl != null ? "<a href=\"m/"+type.failMessageUrl+"\">fail</a>" : "<a href=\"m/"+type.successMessageUrl+"\">success</a>";
var stat = "" + type.min + "/" + type.max + "/" + type.avg + "/" + type.std;
tabledata.push({"type":typeurl, "total":type.totalCount, "fail":type.failCount, "failPercent":type.failPercent, "sample":sampleurl, "stat":stat});
}
}
}
);
......@@ -20,37 +32,53 @@ domainLink = function(domain, now){
$(function()
{
domainlinks = 'Domains: ';
nowdomain = data["domain"];
var domainlinks = 'Domains: ';
var nowdomain = data["domain"];
$.each(data.domains, function(i, t){domainlinks += domainLink(t, nowdomain)});
$("#domainlist").html(domainlinks);
$("#reporttitle").html("Transaction Report - Domain:" + nowdomain);
var grid = $("#gridtable");
var grid = $("#gridtable");
var colnames;
var colmodels;
if(nowtype == "") {
colnames = ['Type', 'Total Count', 'Fail Count', 'Failure%', 'Sample Link', 'Min/Max/Avg/Std(ms)'];
colmodels = [
{name:'type', index:'type', align:'center'},
{name:'total', index:'total', sorttype:"int", align:'center'},
{name:'fail', index:'fail', sorttype:"int", align:'center'},
{name:'failPercent', index:'failPercent', sorttype:"float", align:'center'},
{name:'sample', index:'sample', sortable:false, align:'center'},
{name:'stat', sortable:false, align:'center',width:200}
];
} else {
colnames = ['Name', 'Total Count', 'Fail Count', 'Failure%', 'Sample Link', 'Min/Max/Avg/Std(ms)'];
colmodels = [
{name:'name', index:'name', align:'center'},
{name:'total', index:'total', sorttype:"int", align:'center'},
{name:'fail', index:'fail', sorttype:"int", align:'center'},
{name:'failPercent', index:'failPercent', sorttype:"float", align:'center'},
{name:'sample', index:'sample', sortable:false, align:'center'},
{name:'stat', sortable:false, align:'center',width:200}
];
}
grid.jqGrid({
defaults : {
"defaults" : {
//shrinkToFit:true,
//forceFit:true,
},
datatype: "local",
colNames:['Type', 'Total Count', 'Fail Count', 'Failure%', 'Sample Link', 'Min/Max/Avg/Std(ms)'],
colModel:[
{name:'type', index:'type', align:'center'},
{name:'total', index:'total', sorttype:"int", align:'center'},
{name:'fail', index:'fail', sorttype:"int", align:'center'},
{name:'failPercent', index:'failPercent', sorttype:"float", align:'center'},
{name:'sample', index:'sample', sortable:false, align:'center'},
{name:'stat', sortable:false, align:'center',width:200}
],
sortname:'type',
sortorder:'asc',
caption: "",
height: '100%',
autowidth: true,
loadComplete: function() {
},
"datatype": "local",
"colNames":colnames,
"colModel":colmodels,
"sortname":'type',
"sortorder":'asc',
"caption": "",
"height": '100%',
"autowidth": true,
"loadComplete": function() {
grid.setGridHeight('auto');
//grid.setGridWidth('auto');
}
}).navGrid('#pager2',{edit:false,add:false,del:false});
//grid.setGridWidth('auto');
}
}).navGrid('#pager2',{edit:false,add:false,del:false});
for(var i=0;i<=tabledata.length;i++) {
......
......@@ -23,6 +23,7 @@
<script type="text/javascript">
var data = ${model.reportInJson};
var nowtype = "${model.type}";
</script>
<table width="100%" border="0" cellpadding="6" cellspacing="0"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册