package org.skywalking.apm.collector.worker;
import org.skywalking.apm.collector.actor.*;
import org.skywalking.apm.collector.queue.EndOfBatchCommand;
import org.skywalking.apm.collector.worker.config.CacheSizeConfig;
/**
* @author pengys5
*/
public abstract class AnalysisMember extends AbstractLocalAsyncWorker {
AnalysisMember(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
private int messageNum;
public abstract void analyse(Object message) throws Exception;
@Override
public void preStart() throws ProviderNotFoundException {
super.preStart();
}
@Override
final public void onWork(Object message) throws Exception {
if (message instanceof EndOfBatchCommand) {
aggregation();
} else {
messageNum++;
try {
analyse(message);
} catch (Exception e) {
saveException(e);
}
if (messageNum >= CacheSizeConfig.Cache.Analysis.SIZE) {
aggregation();
messageNum = 0;
}
}
}
protected abstract void aggregation() throws Exception;
}