package com.alipay.bluewhale.core.stats;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import backtype.storm.generated.BoltStats;
import backtype.storm.generated.GlobalStreamId;
import backtype.storm.generated.TaskSpecificStats;
import backtype.storm.generated.TaskStats;
/**
* bolt�����ͳ�ƽ��
*
* @author yannian
*
*/
public class BoltTaskStatsData extends BaseStatsData{
private static final long serialVersionUID = -6250304684824361807L;
private CommonStatsData common = new CommonStatsData();
private HashMap<Integer, Object> acked = new HashMap<Integer, Object>();
private HashMap<Integer, Object> failed = new HashMap<Integer, Object>();
private HashMap<Integer, Object> process_latencies = new HashMap<Integer, Object>();
public String getType() {
return "bolt";
}
public BoltTaskStatsData(CommonStatsData common,
HashMap<Integer, Object> acked, HashMap<Integer, Object> failed,
HashMap<Integer, Object> process_latencies) {
super();
this.common = common;
this.acked = acked;
this.failed = failed;
this.process_latencies = process_latencies;
}
public CommonStatsData getCommon() {
return common;
}
public void setCommon(CommonStatsData common) {
this.common = common;
}
public HashMap<Integer, Object> getAcked() {
return acked;
}
public void setAcked(HashMap<Integer, Object> acked) {
this.acked = acked;
}
public HashMap<Integer, Object> getFailed() {
return failed;
}
public void setFailed(HashMap<Integer, Object> failed) {
this.failed = failed;
}
public HashMap<Integer, Object> getProcess_latencies() {
return process_latencies;
}
public void setProcess_latencies(HashMap<Integer, Object> process_latencies) {
this.process_latencies = process_latencies;
}
public TaskStats getTaskStats() {
return new TaskStats(common.get_emitted(), common.get_transferred(),
getThirftstats());
}
public TaskSpecificStats getThirftstats() {
return TaskSpecificStats.bolt(new BoltStats(get_acked(), get_fail(),
get_process_latencies()));
}
@SuppressWarnings("unchecked")
private Map<String, Map<GlobalStreamId, Long>> get_acked() {
Map<String, Map<GlobalStreamId, Long>> rtn = new HashMap<String, Map<GlobalStreamId, Long>>();
for (Entry<Integer, Object> times : acked.entrySet()) {
Map<Object, Long> val = (Map<Object, Long>) times.getValue();
String key = Stats.parseTimeKey(times.getKey());
Map<GlobalStreamId, Long> stats = new HashMap<GlobalStreamId, Long>();
for (Entry<Object, Long> stat : val.entrySet()) {
stats.put((GlobalStreamId) stat.getKey(), stat.getValue());
}
rtn.put(key, stats);
}
return rtn;
}
@SuppressWarnings("unchecked")
private Map<String, Map<GlobalStreamId, Long>> get_fail() {
Map<String, Map<GlobalStreamId, Long>> rtn = new HashMap<String, Map<GlobalStreamId, Long>>();
for (Entry<Integer, Object> times : failed.entrySet()) {
Map<Object, Long> val = (Map<Object, Long>) times.getValue();
String key = Stats.parseTimeKey(times.getKey());
Map<GlobalStreamId, Long> stats = new HashMap<GlobalStreamId, Long>();
for (Entry<Object, Long> stat : val.entrySet()) {
stats.put((GlobalStreamId) stat.getKey(), stat.getValue());
}
rtn.put(key, stats);
}
return rtn;
}
@SuppressWarnings("unchecked")
private Map<String, Map<GlobalStreamId, Double>> get_process_latencies() {
Map<String, Map<GlobalStreamId, Double>> rtn = new HashMap<String, Map<GlobalStreamId, Double>>();
for (Entry<Integer, Object> times : process_latencies.entrySet()) {
Map<Object, Double> val = (Map<Object, Double>) times.getValue();
String key = Stats.parseTimeKey(times.getKey());
Map<GlobalStreamId, Double> stats = new HashMap<GlobalStreamId, Double>();
for (Entry<Object, Double> stat : val.entrySet()) {
stats.put((GlobalStreamId) stat.getKey(), stat.getValue());
}
rtn.put(key, stats);
}
return rtn;
}
@Override
public boolean equals(Object assignment) {
if (assignment instanceof BoltTaskStatsData
&& ((BoltTaskStatsData) assignment).getCommon().equals(common)
&& ((BoltTaskStatsData) assignment).getAcked().equals(acked)
&& ((BoltTaskStatsData) assignment).getFailed().equals(failed)
&& ((BoltTaskStatsData) assignment).getProcess_latencies()
.equals(process_latencies)
) {
return true;
}
return false;
}
@Override
public int hashCode() {
return common.hashCode() + acked.hashCode() + failed.hashCode()
+ process_latencies.hashCode();
}
@Override
public String toString() {
return "BoltTaskStatsData [common=" + common + ", acked=" + acked
+ ", failed=" + failed + ", process_latencies="
+ process_latencies + "]";
}
}