package org.skywalking.apm.collector.worker;
import org.skywalking.apm.collector.actor.ClusterWorkerContext;
import org.skywalking.apm.collector.actor.LocalWorkerContext;
import org.skywalking.apm.collector.actor.Role;
import org.skywalking.apm.collector.actor.WorkerRefs;
import org.skywalking.apm.collector.worker.storage.MetricAnalysisData;
/**
* @author pengys5
*/
public abstract class MetricAnalysisMember extends AnalysisMember {
private MetricAnalysisData metricAnalysisData = new MetricAnalysisData();
public MetricAnalysisMember(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
final protected void set(String id, String metricName, Long value) throws Exception {
getMetricAnalysisData().getOrCreate(id).set(metricName, value);
}
private MetricAnalysisData getMetricAnalysisData() {
return metricAnalysisData;
}
@Override
final protected void aggregation() throws Exception {
getMetricAnalysisData().asMap().forEach((key, value) -> {
try {
aggWorkRefs().tell(value);
} catch (Exception e) {
e.printStackTrace();
}
});
getMetricAnalysisData().asMap().clear();
}
protected abstract WorkerRefs aggWorkRefs();
}