提交 10ae044c 编写于 作者: S sunryuan

bug sif

上级 a92f4507
......@@ -10,6 +10,7 @@ import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.DomainManager;
import com.dianping.cat.analysis.AbstractMessageAnalyzer;
import com.dianping.cat.configuration.NetworkInterfaceManager;
import com.dianping.cat.consumer.state.model.entity.Detail;
import com.dianping.cat.consumer.state.model.entity.Machine;
import com.dianping.cat.consumer.state.model.entity.ProcessDomain;
import com.dianping.cat.consumer.state.model.entity.StateReport;
......@@ -66,14 +67,18 @@ public class StateAnalyzer extends AbstractMessageAnalyzer<StateReport> implemen
for (String key : totals.keySet()) {
ProcessDomain domain = machine.findOrCreateProcessDomain(key);
Detail detail = domain.findOrCreateDetail(start);
if(totals.containsKey(key)){
domain.setTotal(totals.get(key) + domain.getTotal());
detail.setTotal(totals.get(key));
}
if(totalLosses.containsKey(key)){
domain.setTotalLoss(totalLosses.get(key) + domain.getTotalLoss());
detail.setTotalLoss(totalLosses.get(key));
}
if(sizes.containsKey(key)){
domain.setSize(sizes.get(key) + domain.getSize());
detail.setSize(sizes.get(key));
}
}
......
package com.dianping.cat.consumer.state;
import com.dianping.cat.consumer.state.model.entity.Detail;
import com.dianping.cat.consumer.state.model.entity.Machine;
import com.dianping.cat.consumer.state.model.entity.Message;
import com.dianping.cat.consumer.state.model.entity.ProcessDomain;
......@@ -94,9 +95,19 @@ public class StateReportMerger extends DefaultMerger {
@Override
protected void mergeProcessDomain(ProcessDomain old, ProcessDomain processDomain) {
super.mergeProcessDomain(old, processDomain);
old.getIps().addAll(processDomain.getIps());
old.setSize(old.getSize()+processDomain.getSize());
old.setTotal(old.getTotal()+processDomain.getTotal());
old.setTotalLoss(old.getTotalLoss()+processDomain.getTotalLoss());
}
@Override
protected void mergeDetail(Detail old, Detail detail) {
old.setSize(detail.getSize() + old.getSize());
old.setTotal(detail.getTotal() + old.getTotal());
old.setTotalLoss(detail.getTotalLoss() + old.getTotalLoss());
}
@Override
public void visitStateReport(StateReport stateReport) {
......@@ -107,5 +118,7 @@ public class StateReportMerger extends DefaultMerger {
report.setStartTime(stateReport.getStartTime());
report.setEndTime(stateReport.getEndTime());
}
}
......@@ -33,7 +33,16 @@
<attribute name="totalLoss" value-type="long" primitive="true"/>
<attribute name="size" value-type="double" primitive="true"/>
<element name="ip" value-type="String" type="set" names="ips" />
<entity-ref name="detail" type="map" names="details" method-find-or-create="true" />
</entity>
<entity name="detail">
<attribute name="id" value-type="long" key="true" />
<attribute name="total" value-type="long" primitive="true" />
<attribute name="size" value-type="double" primitive="true" format="0.0" />
<attribute name="totalLoss" value-type="long" primitive="true" />
</entity>
<entity name="message">
<attribute name="id" value-type="long" key="true" />
<attribute name="time" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
......
......@@ -63,14 +63,14 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag
private long m_error;
private long m_total;
private Map<String,Long> m_totals;
private Map<String, Long> m_totals = new HashMap<String,Long>();
private long m_totalSize;
private Map<String,Long> m_totalSizes;
private Map<String,Long> m_lastTotalSizes;
private Map<String, Long> m_totalSizes = new HashMap<String,Long>();
private Map<String, Long> m_lastTotalSizes = new HashMap<String,Long>();
private Logger m_logger;
......@@ -359,18 +359,22 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag
}
m_total++;
Long value = m_totals.get(domain);
if(value == null){
if (value == null) {
m_totals.put(domain, 1L);
} else {
m_totals.put(domain, value+1);
m_totals.put(domain, value + 1);
}
if (m_total % (CatConstants.SUCCESS_COUNT) == 0) {
logState(tree);
}
if(value%CatConstants.SUCCESS_COUNT==0){
double amount = m_totalSizes.get(domain) - m_lastTotalSizes.get(domain);
if (value != null && value % CatConstants.SUCCESS_COUNT == 0) {
Long lastTotalSize = m_lastTotalSizes.get(domain);
if(lastTotalSize == null){
lastTotalSize = 0L;
}
double amount = m_totalSizes.get(domain) - lastTotalSize;
m_lastTotalSizes.put(domain, m_totalSizes.get(domain));
m_serverStateManager.addMessageSize(domain,amount);
m_serverStateManager.addMessageSize(domain, amount);
m_serverStateManager.addMessageSize(amount);
}
}
......@@ -465,7 +469,7 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag
String domain = id.getDomain();
m_totalSize += buf.readableBytes();
Long lastTotalSize = m_totalSizes.get(domain);
if(lastTotalSize == null){
if (lastTotalSize == null) {
m_totalSizes.put(domain, (long) buf.readableBytes());
} else {
m_totalSizes.put(domain, lastTotalSize + buf.readableBytes());
......
......@@ -86,7 +86,6 @@ public class Handler implements PageHandler<Context> {
switch (action) {
case HOURLY:
report = getHourlyReport(payload);
System.out.println(report);
break;
case HISTORY:
report = getHistoryReport(payload);
......
......@@ -7,7 +7,9 @@ import java.util.Map;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.consumer.state.model.entity.Detail;
import com.dianping.cat.consumer.state.model.entity.Message;
import com.dianping.cat.consumer.state.model.entity.ProcessDomain;
import com.dianping.cat.consumer.state.model.entity.StateReport;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.report.page.LineChart;
......@@ -50,9 +52,37 @@ public class StateGraphs {
double[] result = new double[size];
StateShow show = new StateShow(ip);
show.visitStateReport(report);
Map<Long,Detail> datas = null;
String domain = "";
int index = key.indexOf(':');
if(index != -1){
domain = key.substring(0,index);
key = key.substring(index+1);
ProcessDomain processDomain = show.getProcessDomainMap().get(domain);
if(processDomain != null){
datas = processDomain.getDetails();
}
}
Map<Long, Message> messages = show.getMessagesMap();
for (int i = 0; i < size; i++) {
if(index != -1){
if(datas == null){
continue;
}
Detail detail = datas.get(i * 60 * 1000 + start);
if(detail == null){
continue;
}
if (key.equalsIgnoreCase("total")) {
result[i] = detail.getTotal();
} else if (key.equalsIgnoreCase("totalLoss")) {
result[i] = detail.getTotalLoss();
} else if (key.equalsIgnoreCase("size")) {
result[i] = detail.getSize()/ 1024 / 1024;
}
continue;
}
Message message = messages.get(i * 60 * 1000 + start);
if (message != null) {
......@@ -92,7 +122,7 @@ public class StateGraphs {
private double[] getDataFromHourlySummary(List<StateReport> reports, long start, int size, String key, String ip) {
double[] result = new double[size];
for (StateReport report : reports) {
Date startTime = report.getStartTime();
StateShow show = new StateShow(ip);
......
......@@ -54,6 +54,10 @@ public class StateShow extends BaseVisitor {
Collections.sort(temp, new DomainCompartor());
return temp;
}
public Map<String,ProcessDomain> getProcessDomainMap() {
return m_processDomains;
}
public Machine getTotal() {
return m_total;
......
......@@ -155,23 +155,26 @@
<table width="100%">
<tr class='odd'>
<td width="15%">处理项目列表</td>
<td width="5%">处理消息总量</td>
<td width="5%">丢失消息总量</td>
<td width="5%">压缩前消息大小(GB)</td>
<td width="5%">机器总数</td>
<td>项目对应机器列表</td>
<td width="5%">处理消息总量</td>
<td width="5%">丢失消息总量</td>
<td width="5%">压缩前消息大小(GB)</td>
<td width="5%">机器总数</td>
<td>项目对应机器列表</td>
</tr>
<c:forEach var="item" items="${model.state.processDomains}"
varStatus="status">
<tr class="${status.index mod 2 != 0 ? 'odd' : 'even'}">
<c:set var="lastIndex" value="${status.index}" />
<td>${item.name}</td>
<td>${item.total}</td>
<td>${item.totalLoss}</td>
<td>${item.size}</td>
<td><a href="?op=graph&ip=${model.ipAddress}&date=${model.date}&key=${item.name}:total" data-status="${item.name}:total" class="state_graph_link">[:: show ::]</a>${item.total}</td>
<td><a href="?op=graph&ip=${model.ipAddress}&date=${model.date}&key=${item.name}:totalLoss" data-status="${item.name}:totalLoss" class="state_graph_link">[:: show ::]</a>${item.totalLoss}</td>
<td><a href="?op=graph&ip=${model.ipAddress}&date=${model.date}&key=${item.name}:size" data-status="${item.name}:size" class="state_graph_link">[:: show ::]</a>${w:format(item.size/1024/1024/1024,'0.00#')}</td>
<td>${w:size(item.ips)}</td>
<td style="white-space: normal">${item.ips}</td>
</tr>
<tr class="graphs"><td colspan="7"><div id="${item.name}:total" style="display:none"></div></td></tr>
<tr class="graphs"><td colspan="7"><div id="${item.name}:totalLoss" style="display:none"></div></td></tr>
<tr class="graphs"><td colspan="7"><div id="${item.name}:size" style="display:none"></div></td></tr>
</c:forEach>
<tr style="color: white;">
<td>${lastIndex+1}</td>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册