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

bug sif

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