package org.sef4j.ext.influxdb.series; import java.util.Arrays; import java.util.List; import org.influxdb.dto.Serie; import org.sef4j.callstack.stats.BasicTimeStatsLogHistogram; import org.sef4j.callstack.stats.BasicTimeStatsSlotInfo; /** * Mapper for BasicTimeStatsLogHistogram -> influxDB Serie * */ public class BasicTimeStatsLogHistogramToSerieMapper { private static final String[] FIELD_NAMES = new String[] { "count", "sum" }; public static final BasicTimeStatsLogHistogramToSerieMapper INSTANCE = new BasicTimeStatsLogHistogramToSerieMapper("", ""); private final String[] columnNames; // ------------------------------------------------------------------------ public BasicTimeStatsLogHistogramToSerieMapper(String prefix, String suffix) { final int len = BasicTimeStatsLogHistogram.SLOT_LEN; this.columnNames = SerieColNameUtil.wrapNamesRange(prefix, FIELD_NAMES, suffix, 0, len); } // ------------------------------------------------------------------------ public String[] getColumnNames() { return columnNames; } public void getColumns(List<String> dest) { dest.addAll(Arrays.asList(columnNames)); } public void getValues(List<Object> dest, BasicTimeStatsLogHistogram src) { BasicTimeStatsSlotInfo[] timeStatsInfo = src.getSlotInfoCopy(); getValues(dest, timeStatsInfo); } public Serie map(BasicTimeStatsLogHistogram src, String serieName) { Serie.Builder dest = new Serie.Builder(serieName); dest.columns(columnNames); mapValues(dest, src); return dest.build(); } public void mapValues(Serie.Builder dest, BasicTimeStatsLogHistogram src) { BasicTimeStatsSlotInfo[] timeStatsInfo = src.getSlotInfoCopy(); mapValues(dest, timeStatsInfo); } public void mapValues(Serie.Builder dest, BasicTimeStatsSlotInfo[] timeStatsInfo) { final int len = BasicTimeStatsLogHistogram.SLOT_LEN; Object[] values = new Object[len+len]; for (int index = 0, i = 0; i < len; i++) { values[index++] = timeStatsInfo[i].getCount(); values[index++] = timeStatsInfo[i].getSum(); } dest.values(values); } public void getValues(List<Object> dest, BasicTimeStatsSlotInfo[] timeStatsInfo) { final int len = BasicTimeStatsLogHistogram.SLOT_LEN; for (int i = 0; i < len; i++) { dest.add(timeStatsInfo[i].getCount()); dest.add(timeStatsInfo[i].getSum()); } } }