package sniper.histogram.service;
import org.HdrHistogram.Histogram;
import sniper.histogram.dataObject.meta.Meta;
import sniper.histogram.dataObject.meta.WindowBaseMeta;
import sniper.histogram.dataObject.result.HistogramResult;
/**
* Created by peiliping on 16-7-15.
*/
public class TimeWindowHistogramService extends BaseHistogramService {
protected long interval;
public TimeWindowHistogramService(long lowest, long highest, int precisions, long interval) {
super(lowest, highest, precisions);
this.interval = interval;
}
public TimeWindowHistogramService(long interval) {
super();
this.interval = interval;
}
protected long buildWindowTime(long timestamp) {
return (timestamp / interval) * interval;
}
@Override protected String buildKey(String nameSpace, String metric, long timestamp) {
return WindowBaseMeta.builder().nameSpace(nameSpace).metric(metric).windowTime(buildWindowTime(timestamp)).build().buildKey();
}
@Override protected Meta buildMeta(String nameSpace, String metric, long timestamp) {
return WindowBaseMeta.builder().nameSpace(nameSpace).metric(metric).windowTime(buildWindowTime(timestamp)).build();
}
@Override protected HistogramResult buildResult(Meta baseMeta, Histogram hsm) {
return HistogramResult.builder().nameSpace(baseMeta.getNameSpace()).metric(baseMeta.getMetric()).timeWindow(((WindowBaseMeta) baseMeta).getWindowTime())
.startTime(hsm.getStartTimeStamp()).endTime(hsm.getEndTimeStamp()).totalCount(hsm.getTotalCount()).mean(hsm.getMean()).min(hsm.getMinValue()).max(hsm.getMaxValue())
.p1(hsm.getValueAtPercentile(1)).p99(hsm.getValueAtPercentile(99)).footprint(buildFootPrint(hsm)).histogram(compressData(hsm)).build();
}
}