提交 014e1cc7 编写于 作者: Y yong.you

Merge branch 'biz' of github.com:dianping/cat into biz

......@@ -128,7 +128,7 @@ public class ClientConfigManager implements LogEnabled {
String xml = Files.forIO().readFrom(in, "utf-8");
clientConfig = DefaultSaxParser.parse(xml);
m_logger.info(String.format("Resource file(%s) found.", CAT_CLIENT_XML));
m_logger.info(String.format("Resource file(%s) found.", Cat.class.getResource(CAT_CLIENT_XML)));
} else {
m_logger.warn(String.format("Resource file(%s) not found.", CAT_CLIENT_XML));
}
......
......@@ -24,16 +24,27 @@ public class ClientConfigValidator extends DefaultValidator {
@Override
public void visitConfig(ClientConfig config) {
if (!"client".equals(config.getMode())) {
throw new RuntimeException(String.format("Attribute(%s) of /config is required in config: %s", "mode", config));
throw new RuntimeException(String.format("Attribute(%s) is required: %s", "mode", config));
} else if (config.getServers().size() == 0) {
config.setEnabled(false);
log("WARN", "CAT client was disabled due to no CAT servers configured!");
} else if (config.getEnabled() != null && !config.isEnabled()) {
} else if (!config.isEnabled()) {
log("WARN", "CAT client was globally disabled!");
}
m_config = config;
super.visitConfig(config);
if (m_config.isEnabled()) {
for (Domain domain : m_config.getDomains().values()) {
if (!domain.isEnabled()) {
m_config.setEnabled(false);
log("WARN", "CAT client was disabled in domain(" + domain.getId() + ") explicitly!");
}
break; // for first domain only
}
}
}
@Override
......@@ -48,11 +59,6 @@ public class ClientConfigValidator extends DefaultValidator {
if (domain.getIp() == null) {
domain.setIp(getLocalAddress());
}
if (!domain.isEnabled() && m_config.isEnabled()) {
m_config.setEnabled(false);
log("WARN", "CAT client was disabled in domain(" + domain.getId() + ") explicitly!");
}
}
@Override
......
......@@ -300,7 +300,7 @@ public class CatFilter implements Filter {
Object catPageUri = req.getAttribute(CatConstants.CAT_PAGE_URI);
Object catStatus = req.getAttribute(CatConstants.CAT_STATE);
if (catPageUri != null) {
if (catPageUri != null && t instanceof DefaultTransaction) {
((DefaultTransaction) t).setName(catPageUri.toString());
}
......
<plexus>
<components>
<component>
<role>org.codehaus.plexus.logging.LoggerManager</role>
<implementation>org.unidal.lookup.logger.TimedConsoleLoggerManager</implementation>
<configuration>
<dateFormat>MM-dd HH:mm:ss.SSS</dateFormat>
<showClass>true</showClass>
<logFilePattern>logs/Cat_{0,date,yyyyMMdd}.log</logFilePattern>
<baseDirRef>CAT_HOME</baseDirRef>
<defaultBaseDir>/data/applogs/cat</defaultBaseDir>
</configuration>
</component>
</components>
</plexus>
\ No newline at end of file
......@@ -48,28 +48,24 @@ tr.odd td {
background-color: #eee;
white-space: nowrap;
vertical-align: top;
text-align: left;
}
tr.even td {
background-color: white;
white-space: nowrap;
vertical-align: top;
text-align: left;
}
tr.odd th {
background-color: #eee;
white-space: nowrap;
vertical-align: top;
text-align: left;
}
tr.even th {
background-color: white;
white-space: nowrap;
vertical-align: top;
text-align: left;
}
td.odd {
......@@ -174,6 +170,10 @@ a.abtest-heartbeat {
border-spacing: 2px;
}
.left {
text-align: left;
}
.right {
text-align: right;
}
......
......@@ -43,7 +43,7 @@ function graphPieChart(container, data){
},
series: [{
type: 'pie',
name: 'Browser share',
name: 'share',
data: pieChartParse(data)
}]
});
......
......@@ -13,11 +13,10 @@
<jsp:body>
<%@ include file="crossQuery.jsp" %>
<table class="machines">
<tr style="text-align: left">
<tr class="left">
<th>机器: &nbsp;[&nbsp; <c:choose>
<c:when test="${model.ipAddress eq 'All'}">
<a href="?domain=${model.domain}&date=${model.date}"
class="current">All</a>
<a href="?domain=${model.domain}&date=${model.date}" class="current">All</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&date=${model.date}">All</a>
......@@ -25,14 +24,13 @@
</c:choose> &nbsp;]&nbsp; <c:forEach var="ip" items="${model.ips}">
&nbsp;[&nbsp;
<c:choose>
<c:when test="${model.ipAddress eq ip}">
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}"
class="current">${ip}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}">${ip}</a>
</c:otherwise>
</c:choose>
<c:when test="${model.ipAddress eq ip}">
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}" class="current">${ip}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}">${ip}</a>
</c:otherwise>
</c:choose>
&nbsp;]&nbsp;
</c:forEach>
</th>
......@@ -50,7 +48,7 @@
<th>QPS</th>
</tr>
<c:forEach var="callInfo" items="${model.projectInfo.callProjectsInfo}" varStatus="status">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left">${callInfo.type}</td>
<td class="left"><a href="?op=host&domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&project=${callInfo.projectName }">${callInfo.projectName}</a></td>
<td>${w:format(callInfo.totalCount,'#,###,###,###,##0')}</td>
......@@ -74,7 +72,7 @@
<th>QPS</th>
</tr>
<c:forEach var="serviceInfo" items="${model.projectInfo.serviceProjectsInfo}" varStatus="status">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left">${serviceInfo.type}</td>
<td class="left"><a href="?op=host&domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&project=${serviceInfo.projectName }">${serviceInfo.projectName}</a></td>
<td>${w:format(serviceInfo.totalCount,'#,###,###,###,##0')}</td>
......@@ -97,7 +95,7 @@
<th>QPS</th>
</tr>
<c:forEach var="serviceInfo" items="${model.projectInfo.callServiceProjectsInfo}" varStatus="status">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left">${serviceInfo.type}</td>
<td class="left">${serviceInfo.projectName}</td>
<td>${w:format(serviceInfo.totalCount,'#,###,###,###,##0')}</td>
......
......@@ -18,12 +18,13 @@
<jsp:body>
<res:useJs value="${res.js.local['highcharts.js']}" target="head-js"/>
<res:useJs value="${res.js.local['baseGraph.js']}" target="head-js"/>
<table class="machines">
<tr style="text-align: left">
<th>机器: &nbsp;[&nbsp; <c:choose>
<tr class="left">
<th>机器: &nbsp;[&nbsp;
<c:choose>
<c:when test="${model.ipAddress eq 'All'}">
<a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}"
class="current">All</a>
<a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}" class="current">All</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}">All</a>
......@@ -31,16 +32,15 @@
</c:choose> &nbsp;]&nbsp; <c:forEach var="ip" items="${model.ips}">
&nbsp;[&nbsp;
<c:choose>
<c:when test="${model.ipAddress eq ip}">
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}&type=${payload.type}"
class="current">${ip}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}&type=${payload.type}">${ip}</a>
</c:otherwise>
</c:choose>
<c:when test="${model.ipAddress eq ip}">
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}&type=${payload.type}" class="current">${ip}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}&type=${payload.type}">${ip}</a>
</c:otherwise>
</c:choose>
&nbsp;]&nbsp;
</c:forEach>
</c:forEach>
</th>
</tr>
</table>
......@@ -48,71 +48,66 @@
<c:choose>
<c:when test="${empty payload.type}">
<tr>
<th style="text-align: left;"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=type">Type</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=total">Total Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failure">Failure Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failurePercent">Failure%</a></th>
<th class="right">Sample Link</th>
<th class="right">QPS</th>
</tr>
<c:forEach var="item" items="${model.displayTypeReport.results}"
varStatus="status">
<th class="left"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=type">Type</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=total">Total Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failure">Failure Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failurePercent">Failure%</a></th>
<th>Sample Link</th>
<th>QPS</th>
</tr>
<c:forEach var="item" items="${model.displayTypeReport.results}" varStatus="status">
<c:set var="e" value="${item.detail}" />
<c:set var="lastIndex" value="${status.index}" />
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<td style="text-align: left"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=type"><a href="?op=graphs&domain=${model.domain}&date=${model.date}&type=${item.type}&ip=${model.ipAddress}"
class="graph_link" data-status="${status.index}">[:: show ::]</a>&nbsp;&nbsp;&nbsp;<a
href="?domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${item.type}">${item.type}</a></td>
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left">
<a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=type"><a href="?op=graphs&domain=${model.domain}&date=${model.date}&type=${item.type}&ip=${model.ipAddress}" class="graph_link" data-status="${status.index}">[:: show ::]</a>
&nbsp;&nbsp;<a href="?domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${item.type}">${item.type}</a>
</td>
<td>${w:format(e.totalCount,'#,###,###,###,##0')}</td>
<td>${e.failCount}</td>
<td>${w:format(e.failPercent/100,'0.0000%')}</td>
<td><a
href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.tps,'0.0')}</td>
<td>${w:format(e.failCount,'#,###,###,###,##0')}</td>
<td>&nbsp;${w:format(e.failPercent/100,'0.0000%')}</td>
<td class="center"><a href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.tps,'###,##0.0')}</td>
</tr>
<tr class="graphs">
<td colspan="7"><div id="${status.index}" style="display: none"></div></td>
</tr>
<td colspan="7"><div id="${status.index}" style="display: none"></div></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<th style="text-align: left;"><a href="?op=graphs&domain=${model.domain}&date=${model.date}&type=${payload.type}&ip=${model.ipAddress}"
class="graph_link" data-status="-1">[:: show ::]</a>
<a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=type"> Name</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total">Total Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failure">Failure Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failurePercent">Failure%</a></th>
<th class="right">Sample Link</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total">QPS</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total">Percent%</a></th>
</tr>
<tr class="graphs">
<td colspan="7"><div id="-1" style="display: none"></div></td>
</tr>
<c:forEach var="item" items="${model.displayNameReport.results}"
varStatus="status">
<tr>
<th class="left"><a href="?op=graphs&domain=${model.domain}&date=${model.date}&type=${payload.type}&ip=${model.ipAddress}" class="graph_link" data-status="-1">[:: show ::]</a>
<a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=type"> Name</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total">Total Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failure">Failure Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failurePercent">Failure%</a></th>
<th>Sample Link</th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total">QPS</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total">Percent%</a></th>
</tr>
<tr class="graphs"><td colspan="7"><div id="-1" style="display: none"></div></td></tr>
<c:forEach var="item" items="${model.displayNameReport.results}" varStatus="status">
<c:set var="e" value="${item.detail}" />
<c:set var="lastIndex" value="${status.index}" />
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<td style="text-align: left">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left">
<c:choose>
<c:when test="${status.index > 0}">
<a href="?op=graphs&domain=${report.domain}&ip=${model.ipAddress}&date=${model.date}&type=${payload.type}&name=${e.id}"
class="graph_link" data-status="${status.index}">[:: show ::]</a>
</c:when></c:choose>&nbsp;&nbsp;&nbsp;${e.id}</td>
<a href="?op=graphs&domain=${report.domain}&ip=${model.ipAddress}&date=${model.date}&type=${payload.type}&name=${e.id}" class="graph_link" data-status="${status.index}">[:: show ::]</a>
</c:when>
</c:choose>
&nbsp;&nbsp;${e.id}
</td>
<td>${w:format(e.totalCount,'#,###,###,###,##0')}</td>
<td>${e.failCount}</td>
<td>${w:format(e.failPercent/100,'0.0000%')}</td>
<td><a
href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.failCount,'#,###,###,###,##0')}</td>
<td>&nbsp;${w:format(e.failPercent/100,'0.0000%')}</td>
<td class="center"><a href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.tps,'0.0')}</td>
<td>${w:format(e.totalPercent,'0.0000%')}</td>
</tr>
<tr class="graphs">
<td colspan="5"><div id="${status.index}"
style="display: none"></div></td>
</tr>
<td colspan="5"><div id="${status.index}" style="display: none"></div></td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
......
......@@ -19,14 +19,13 @@
<c:forEach var="ip" items="${model.ips}">
&nbsp;[&nbsp;
<c:choose>
<c:when test="${payload.realIp eq ip}">
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}"
class="current">${ip}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}">${ip}</a>
</c:otherwise>
</c:choose>
<c:when test="${payload.realIp eq ip}">
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}" class="current">${ip}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&ip=${ip}&date=${model.date}">${ip}</a>
</c:otherwise>
</c:choose>
&nbsp;]&nbsp;
</c:forEach>
</th>
......@@ -123,8 +122,8 @@
<th>CatSize</th>
</tr>
<c:forEach var="item" items="${model.result.periods}" varStatus="status">
<tr class="${status.index mod 2==1 ? 'even' : 'odd'}">
<td>${item.minute}</td>
<tr class="${status.index mod 2==1 ? 'even' : 'odd'} right">
<td class="center">${item.minute}</td>
<td>${item.threadCount}</td>
<td>${item.daemonCount}</td>
<td>${item.totalStartedCount}</td>
......@@ -137,9 +136,9 @@
<td>${w:format(item.noneHeapUsage,'0.0MB')}</td>
<td>${w:format(item.memoryFree,'0.0MB')}</td>
<td><c:forEach var="disk" items="${item.disks}" varStatus="vs">${w:formatNumber(disk.free,'0.0', 'B')}<c:if test="${not vs.last}">/</c:if></c:forEach></td>
<td>${item.catMessageProduced}</td>
<td>${item.catMessageOverflow}</td>
<td>${w:format(item.catMessageSize,'0.0MB')}</td>
<td>${w:format(item.catMessageProduced,'#,###,###,###,##0')}</td>
<td>${w:format(item.catMessageOverflow,'#,###,###,###,##0')}</td>
<td>${w:format(item.catMessageSize,'#,##0.0MB')}</td>
</tr>
</c:forEach>
</table>
......
......@@ -48,36 +48,35 @@
<td><a href="?date=${model.date}&domain=${model.domain}&sort=cacheTimePercent">Time%</td>
<td>Link</td>
</tr>
<c:forEach var="item" items="${model.matrix.matrixs}"
varStatus="status">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<td class="left">${item.type}</td>
<td class="left longText" style="white-space:normal" >${w:shorten(item.name, 120)}</td>
<td>${item.count}</td>
<td>${w:format(item.avg,'0.0')}</td>
<td><a href="${model.logViewBaseUri}/${item.url}?domain=${model.domain}">Log View</a></td>
<td>${item.callMin}</td>
<td>${item.callMax}</td>
<td>${w:format(item.callAvg,'0.0')}</td>
<td>${item.callTime}</td>
<td>${w:format(item.callTimePercent,'00.0%')}</td>
<td><a href="${model.logViewBaseUri}/${item.callUrl}?domain=${model.domain}">Link</a></td>
<td>${item.sqlMin}</td>
<td>${item.sqlMax}</td>
<td>${w:format(item.sqlAvg,'0.0')}</td>
<td>${item.sqlTime}</td>
<td>${w:format(item.sqlTimePercent,'00.0%')}</td>
<td><a href="${model.logViewBaseUri}/${item.sqlUrl}?domain=${model.domain}">Link</a></td>
<td>${item.cacheMin}</td>
<td>${item.cacheMax}</td>
<td>${w:format(item.cacheAvg,'0.0')}</td>
<td>${item.cacheTime}</td>
<td>${w:format(item.cacheTimePercent,'00.0%')}</td>
<td><a href="${model.logViewBaseUri}/${item.cacheUrl}?domain=${model.domain}">Link</a></td>
</tr>
</c:forEach>
<c:forEach var="item" items="${model.matrix.matrixs}" varStatus="status">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left">${item.type}</td>
<td class="left longText" style="white-space:normal">${w:shorten(item.name, 120)}</td>
<td>${w:format(item.count,'#,###,##0')}</td>
<td>${w:format(item.avg,'0.0')}</td>
<td class="center"><a href="${model.logViewBaseUri}/${item.url}?domain=${model.domain}">Log View</a></td>
<td>${item.callMin}</td>
<td>${item.callMax}</td>
<td>${w:format(item.callAvg,'0.0')}</td>
<td>${item.callTime}</td>
<td>${w:format(item.callTimePercent,'00.0%')}</td>
<td><a href="${model.logViewBaseUri}/${item.callUrl}?domain=${model.domain}">Link</a></td>
<td>${item.sqlMin}</td>
<td>${item.sqlMax}</td>
<td>${w:format(item.sqlAvg,'0.0')}</td>
<td>${item.sqlTime}</td>
<td>${w:format(item.sqlTimePercent,'00.0%')}</td>
<td><a href="${model.logViewBaseUri}/${item.sqlUrl}?domain=${model.domain}">Link</a></td>
<td>${item.cacheMin}</td>
<td>${item.cacheMax}</td>
<td>${w:format(item.cacheAvg,'0.0')}</td>
<td>${item.cacheTime}</td>
<td>${w:format(item.cacheTimePercent,'00.0%')}</td>
<td><a href="${model.logViewBaseUri}/${item.cacheUrl}?domain=${model.domain}">Link</a></td>
</tr>
</c:forEach>
</table>
</jsp:body>
......
......@@ -75,8 +75,7 @@
&nbsp;<a href="#" class="${statistics.value.type}">&nbsp;&nbsp;</a>
&nbsp;&nbsp;${statistics.value.type}
</td>
<td rowspan="${w:size(statistics.value.status)*2}"
class="${typeIndex.index mod 2 != 0 ? 'even' : 'odd'} top">${w:format(statistics.value.count,'#,###,###,###,##0')}</td>
<td rowspan="${w:size(statistics.value.status)*2}" class="${typeIndex.index mod 2 != 0 ? 'even' : 'odd'} right top">${w:format(statistics.value.count,'#,###,###,###,##0')}&nbsp;</td>
<c:forEach var="status" items="${statistics.value.status}"
varStatus="index">
<c:if test="${index.index != 0}">
......@@ -86,9 +85,9 @@
<a href="?op=hourlyGraph&domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&reportType=${model.reportType}&type=${statistics.value.type}&status=${status.value.status}${model.customDate}" class="problem_status_graph_link" data-status="${statistics.value.type}${status.value.status}">[:: show ::]</a>
&nbsp;${status.value.status}
</td>
<td class="${index.index mod 2 != 0 ? 'even' : 'odd'}">${w:format(status.value.count,'#,###,###,###,##0')}</td>
<td class="${index.index mod 2 != 0 ? 'even' : 'odd'}"><c:forEach
var="links" items="${status.value.links}" varStatus="linkIndex">
<td class="${index.index mod 2 != 0 ? 'even' : 'odd'} right">${w:format(status.value.count,'#,###,###,###,##0')}&nbsp;</td>
<td class="${index.index mod 2 != 0 ? 'even' : 'odd'}">
<c:forEach var="links" items="${status.value.links}" varStatus="linkIndex">
<a href="${model.logViewBaseUri}/${links}?domain=${model.domain}">${linkIndex.first?'L':(linkIndex.last?'g':'o')}</a>
</c:forEach></td>
......@@ -97,7 +96,7 @@
</c:if>
<tr><td colspan="3"> <div id="${statistics.value.type}${status.value.status}" style="display:none"></div></td></tr>
</c:forEach>
</tr>
</tr>
<tr class="graphs"><td colspan="5"><div id="${typeIndex.index}" style="display:none"></div></td></tr>
</c:forEach>
</table>
......
......@@ -21,8 +21,7 @@
<tr style="text-align: left">
<th>Databases: &nbsp;[&nbsp; <c:choose>
<c:when test="${model.database eq 'All'}">
<a href="?domain=${model.domain}&date=${model.date}"
class="current">All</a>
<a href="?domain=${model.domain}&date=${model.date}" class="current">All</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&date=${model.date}">All</a>
......@@ -31,8 +30,7 @@
&nbsp;[&nbsp;
<c:choose>
<c:when test="${model.database eq database}">
<a href="?domain=${model.domain}&database=${database}&date=${model.date}"
class="current">${database}</a>
<a href="?domain=${model.domain}&database=${database}&date=${model.date}" class="current">${database}</a>
</c:when>
<c:otherwise>
<a href="?domain=${model.domain}&database=${database}&date=${model.date}">${database}</a>
......@@ -48,8 +46,8 @@
<table class='data'>
<tr>
<th></th>
<th class="left"><a
href="?database=${model.database}&date=${model.date}&domain=${model.domain}&sort=name">Table</a></th>
<th class="left">
<a href="?database=${model.database}&date=${model.date}&domain=${model.domain}&sort=name">Table</a></th>
<th><a href="?database=${model.database}&date=${model.date}&domain=${model.domain}&sort=total">Total</a></th>
<th><a href="?database=${model.database}&date=${model.date}&domain=${model.domain}&sort=failure">Failure</a></th>
<th><a href="?database=${model.database}&date=${model.date}&domain=${model.domain}&sort=failurePercent">Failure%</a></th>
......@@ -57,9 +55,8 @@
<th>Percent%</th>
<th>TPS</th>
</tr>
<c:forEach var="item" items="${model.displaySqlReport.results}"
varStatus="status">
<tr class="${status.index mod 2==0 ? 'even' : 'odd'}">
<c:forEach var="item" items="${model.displaySqlReport.results}" varStatus="status">
<tr class="${status.index mod 2==0 ? 'even' : 'odd'} right">
<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>
......@@ -80,11 +77,10 @@
<th>Percent%</th>
<th>TPS</th>
<c:forEach var="methodEntry" items="${item.methods}"
varStatus="status1">
<tr class="${status1.index mod 2==0 ? 'even' : 'odd'}">
<c:forEach var="methodEntry" items="${item.methods}" varStatus="status1">
<tr class="${status1.index mod 2==0 ? 'even' : 'odd'} right">
<c:set var="method" value="${methodEntry.value}" />
<td>${method.id}</td>
<td class="left">${method.id}</td>
<td>${w:format(method.totalCount,'#,###,###,###,##0')}</td>
<td>${w:format(method.failCount,'#,###,###,###,##0')}</td>
<td>${w:format(method.failPercent,'0.00%')}</td>
......
......@@ -15,8 +15,9 @@
<jsp:body>
<res:useJs value="${res.js.local['highcharts.js']}" target="head-js"/>
<res:useJs value="${res.js.local['baseGraph.js']}" target="head-js"/>
<table class="machines">
<tr style="text-align:left">
<tr class="left">
<th>机器: &nbsp;[&nbsp; <c:choose>
<c:when test="${model.ipAddress eq 'All'}">
<a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&queryname=${model.queryName}"
......@@ -41,80 +42,96 @@
</th>
</tr>
</table>
<table class='data'>
<c:choose>
<c:when test="${empty payload.type}">
<tr><th style="text-align: left;"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=type">Type</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=total">Total Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failure">Failure Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failurePercent">Failure%</a></th>
<th class="right">Sample Link</th><th class="right">Min(ms)</th><th class="right">Max(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&sort=avg">Avg</a>(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&sort=95line">95Line</a>(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&sort=99line">99.9Line</a>(ms)</th>
<th class="right">Std(ms)</th><th class="right">QPS</th></tr>
<tr><th class="left"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=type">Type</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=total">Total Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failure">Failure Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&sort=failurePercent">Failure%</a></th>
<th>Sample Link</th>
<th>Min(ms)</th>
<th>Max(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&sort=avg">Avg</a>(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&sort=95line">95Line</a>(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&sort=99line">99.9Line</a>(ms)</th>
<th>Std(ms)</th>
<th>QPS</th>
</tr>
<c:forEach var="item" items="${model.displayTypeReport.results}" varStatus="status">
<c:set var="e" value="${item.detail}"/>
<c:set var="lastIndex" value="${status.index}"/>
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<td style="text-align:left"><a href="?op=graphs&domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${item.type}" class="graph_link" data-status="${status.index}">[:: show ::]</a>
&nbsp;&nbsp;&nbsp;<a href="?domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${item.type}">${item.type}</a></td>
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<td class="left"><a href="?op=graphs&domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${item.type}" class="graph_link" data-status="${status.index}">[:: show ::]</a>
&nbsp;&nbsp;<a href="?domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${item.type}">${item.type}</a></td>
<td>${w:format(e.totalCount,'#,###,###,###,##0')}</td>
<td>${e.failCount}</td>
<td>${w:format(e.failPercent/100,'0.0000%')}</td>
<td><a href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.min,'0.#')}</td>
<td>${w:format(e.max,'0.#')}</td>
<td>${w:format(e.avg,'0.0')}</td>
<td>${w:format(e.line95Value,'0.0')}</td>
<td>${w:format(e.line99Value,'0.0')}</td>
<td>${w:format(e.std,'0.0')}</td>
<td>${w:format(e.tps,'0.0')}</td>
<td>${w:format(e.failCount,'#,###,###,###,##0')}</td>
<td>&nbsp;${w:format(e.failPercent/100,'0.0000%')}</td>
<td class="center"><a href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.min,'###,##0.#')}</td>
<td>${w:format(e.max,'###,##0.#')}</td>
<td>${w:format(e.avg,'###,##0.0')}</td>
<td>${w:format(e.line95Value,'###,##0.0')}</td>
<td>${w:format(e.line99Value,'###,##0.0')}</td>
<td>${w:format(e.std,'###,##0.0')}</td>
<td>${w:format(e.tps,'###,##0.0')}</td>
</tr>
<tr class="graphs"><td colspan="11"><div id="${status.index}" style="display:none"></div></td></tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr><th style="text-align:left;" colspan='13'><input type="text" name="queryname" id="queryname" size="40" value="${model.queryName}">
<tr><th class="left" colspan="13"><input type="text" name="queryname" id="queryname" size="40" value="${model.queryName}">
<input class="btn btn-primary btn-small" value="Filter" onclick="selectByName('${model.date}','${model.domain}','${model.ipAddress}','${payload.type}')" type="submit">
支持多个字符串查询,例如sql|url|task,查询结果为包含任一sql、url、task的列。
</th></tr>
<tr>
<th style="text-align: left;"><a href="?op=graphs&domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}" class="graph_link" data-status="-1">[:: show ::]</a>
<a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=type&queryname=${model.queryName}">Name</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total&queryname=${model.queryName}">Total Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failure&queryname=${model.queryName}">Failure Count</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failurePercent&queryname=${model.queryName}">Failure%</a></th>
<th class="right">Sample Link</th><th class="right">Min(ms)</th><th class="right">Max(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&sort=avg&queryname=${model.queryName}">Avg</a>(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&sort=95line&queryname=${model.queryName}">95Line</a>(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&sort=99line&queryname=${model.queryName}">99.9Line</a>(ms)</th>
<th class="right">Std(ms)</th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total&queryname=${model.queryName}">QPS</a></th>
<th class="right"><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total&queryname=${model.queryName}">Percent%</a></th></tr>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total&queryname=${model.queryName}">Total Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failure&queryname=${model.queryName}">Failure Count</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=failurePercent&queryname=${model.queryName}">Failure%</a></th>
<th>Sample Link</th><th>Min(ms)</th><th>Max(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&sort=avg&queryname=${model.queryName}">Avg</a>(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&sort=95line&queryname=${model.queryName}">95Line</a>(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&type=${payload.type}&sort=99line&queryname=${model.queryName}">99.9Line</a>(ms)</th>
<th>Std(ms)</th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total&queryname=${model.queryName}">QPS</a></th>
<th><a href="?domain=${model.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&sort=total&queryname=${model.queryName}">Percent%</a></th></tr>
<tr class="graphs"><td colspan="12"><div id="-1" style="display:none"></div></td></tr>
<c:forEach var="item" items="${model.displayNameReport.results}" varStatus="status">
<c:set var="e" value="${item.detail}"/>
<c:set var="lastIndex" value="${status.index}"/>
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<td class="longText" style="text-align:left;white-space:normal">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'} right">
<c:choose>
<c:when test="${status.index > 0}">
<a href="?op=graphs&domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&name=${e.id}" class="graph_link" data-status="${status.index}">[:: show ::]</a>
</c:when>
<c:when test="${status.index > 0}">
<td class="left longText" style="white-space:normal">
<a href="?op=graphs&domain=${report.domain}&date=${model.date}&ip=${model.ipAddress}&type=${payload.type}&name=${e.id}" class="graph_link" data-status="${status.index}">[:: show ::]</a>
&nbsp;&nbsp;${w:shorten(e.id, 120)}</td>
</c:when>
<c:otherwise>
<td class="center" style="white-space:normal">${w:shorten(e.id, 120)}</td>
</c:otherwise>
</c:choose>
&nbsp;&nbsp;&nbsp;${w:shorten(e.id, 120)}</td>
<td>${w:format(e.totalCount,'#,###,###,###,##0')}</td>
<td>${e.failCount}</td>
<td>${w:format(e.failPercent/100,'0.0000%')}</td>
<td><a href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.min,'0.#')}</td>
<td>${w:format(e.max,'0.#')}</td>
<td>${w:format(e.avg,'0.0')}</td>
<td>${w:format(e.line95Value,'0.0')}</td>
<td>${w:format(e.line99Value,'0.0')}</td>
<td>${w:format(e.std,'0.0')}</td>
<td>${w:format(e.tps,'0.0')}</td>
<td>${w:format(e.failCount,'#,###,###,###,##0')}</td>
<td>&nbsp;${w:format(e.failPercent/100,'0.0000%')}</td>
<td class="center"><a href="${model.logViewBaseUri}/${empty e.failMessageUrl ? e.successMessageUrl : e.failMessageUrl}?domain=${model.domain}">Log View</a></td>
<td>${w:format(e.min,'###,##0.#')}</td>
<td>${w:format(e.max,'###,##0.#')}</td>
<td>${w:format(e.avg,'###,##0.0')}</td>
<c:choose>
<c:when test="${status.index > 0}">
<td>${w:format(e.line95Value,'###,##0.0')}</td>
<td>${w:format(e.line99Value,'###,##0.0')}</td>
</c:when>
<c:otherwise>
<td class="center">-</td>
<td class="center">-</td>
</c:otherwise>
</c:choose>
<td>${w:format(e.std,'###,##0.0')}</td>
<td>${w:format(e.tps,'###,##0.0')}</td>
<td>${w:format(e.totalPercent,'0.00%')}</td>
</tr>
<tr class="graphs"><td colspan="11"><div id="${status.index}" style="display:none"></div></td></tr>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册