package org.skywalking.apm.collector.worker.storage; import org.skywalking.apm.collector.actor.selector.AbstractHashMessage; import org.skywalking.apm.collector.worker.Const; import java.util.LinkedHashMap; import java.util.Map; /** * @author pengys5 */ public class MetricData extends AbstractHashMessage implements Data { private String id; private Map<String, Object> data; public MetricData(String id) { super(id); this.id = id; data = new LinkedHashMap<>(); String[] ids = id.split(Const.IDS_SPLIT); String slice = ids[0]; StringBuilder aggId = new StringBuilder(); for (int i = 1; i < ids.length; i++) { if (i == 1) aggId = new StringBuilder(ids[i]); else aggId.append(Const.ID_SPLIT).append(ids[i]); } data.put(AbstractIndex.TIME_SLICE, Long.valueOf(slice)); data.put(AbstractIndex.AGG_COLUMN, aggId.toString()); } public void set(String metricName, Long value) { long valueAdd = value; if (this.data.containsKey(metricName) && !AbstractIndex.TIME_SLICE.equals(metricName) && !AbstractIndex.AGG_COLUMN.equals(metricName)) { valueAdd += (Long) this.data.get(metricName); } this.data.put(metricName, valueAdd); } public void merge(MetricData source) { for (Map.Entry<String, Object> entry : source.data.entrySet()) { if (!AbstractIndex.TIME_SLICE.equals(entry.getKey()) && !AbstractIndex.AGG_COLUMN.equals(entry.getKey())) { set(entry.getKey(), (Long) entry.getValue()); } } } @Override public void merge(Map<String, ?> source) { for (Map.Entry<String, ?> entry : source.entrySet()) { if (!AbstractIndex.TIME_SLICE.equals(entry.getKey()) && !AbstractIndex.AGG_COLUMN.equals(entry.getKey())) { long dbValue = ((Number) entry.getValue()).longValue(); set(entry.getKey(), dbValue); } } } @Override public String getId() { return id; } public Map<String, Object> asMap() { return data; } }