package resa.topology;
import backtype.storm.generated.StormTopology;
import backtype.storm.scheduler.ExecutorDetails;
import resa.metrics.MeasuredData;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Created by ding on 14/12/1.
*/
public abstract class ContainerContext {
public static interface Listener {
void measuredDataReceived(MeasuredData measuredData);
}
private StormTopology topology;
private Map<String, Object> conf;
private final Set<Listener> listeners = new CopyOnWriteArraySet<>();
protected ContainerContext(StormTopology topology, Map<String, Object> conf) {
this.topology = topology;
this.conf = conf;
}
public abstract void emitMetric(String name, Object data);
public void addListener(Listener listener) {
listeners.add(listener);
}
public void removeListener(Listener listener) {
listeners.remove(listener);
}
protected Set<Listener> getListeners() {
return listeners;
}
public Map<String, Object> getConfig() {
return conf;
}
public StormTopology getTopology() {
return topology;
}
public abstract Map<String, List<ExecutorDetails>> runningExecutors();
public abstract boolean requestRebalance(Map<String, Integer> allocation, int numWorkers);
}