blob: 186e2be6109c36d5bf432175d812faf053764bea [file] [log] [blame]
package com.alibaba.jstorm.common.metric;
import com.alibaba.jstorm.metric.KVSerializable;
import com.alibaba.jstorm.metric.MetricUtils;
import com.alibaba.jstorm.utils.JStormUtils;
import java.util.Date;
/**
* @author wange
* @since 15/7/16
*/
public class TopologyHistory implements KVSerializable {
private long id;
private String clusterName;
private String topologyName;
private String topologyId;
private double sampleRate;
private Date start;
private Date end;
public TopologyHistory() {
}
public TopologyHistory(String clusterName, String topologyId) {
this.clusterName = clusterName;
this.topologyId = topologyId;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getClusterName() {
return clusterName;
}
public void setClusterName(String clusterName) {
this.clusterName = clusterName;
}
public String getTopologyName() {
return topologyName;
}
public void setTopologyName(String topologyName) {
this.topologyName = topologyName;
}
public String getTopologyId() {
return topologyId;
}
public void setTopologyId(String topologyId) {
this.topologyId = topologyId;
}
public Date getStart() {
return start;
}
public void setStart(Date start) {
this.start = start;
}
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this.end = end;
}
public Date getTime() {
return start != null ? start : end;
}
public String getTag() {
return start != null ? KVSerializable.START : KVSerializable.END;
}
public double getSampleRate() {
return sampleRate;
}
public void setSampleRate(Double sampleRate) {
if (sampleRate == null) {
this.sampleRate = 1.0d;
} else {
this.sampleRate = sampleRate;
}
}
/**
* key: clusterName + topologyName + time
*/
@Override
public byte[] getKey() {
return MetricUtils.concat2(clusterName, topologyName, getTime().getTime()).getBytes();
}
/**
* value: topologyId + type: S/E
*/
@Override
public byte[] getValue() {
return MetricUtils.concat2(topologyId, getTag(), sampleRate).getBytes();
}
@Override
public Object fromKV(byte[] key, byte[] value) {
String[] keyParts = new String(key).split(MetricUtils.DELIM);
long time = 0;
if (keyParts.length >= 3) {
this.clusterName = keyParts[0];
this.topologyName = keyParts[1];
time = Long.valueOf(keyParts[2]);
}
String[] valueParts = new String(value).split(MetricUtils.DELIM);
if (valueParts.length >= 3) {
this.topologyId = valueParts[0];
String tag = valueParts[1];
if (tag.equals(KVSerializable.START)) {
this.start = new Date(time);
} else {
this.end = new Date(time);
}
this.sampleRate = JStormUtils.parseDouble(valueParts[2], 0.1d);
}
return this;
}
public String getIdentity(){
return MetricUtils.concat2(clusterName, topologyId);
}
public void merge(TopologyHistory history){
if (history.start != null && this.start == null){
this.start = history.start;
}
if (history.end != null && this.end == null){
this.end = history.end;
}
}
}