package org.radargun.state;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Map;
import org.radargun.RemoteSlaveConnection;
import org.radargun.config.Cluster;
import org.radargun.reporting.Timeline;
import org.radargun.utils.SlaveConnectionInfo;
/**
* State residing on slave, passed to each's
* {@link org.radargun.DistStage#initOnSlave(SlaveState)}
*
* @author Mircea Markus <Mircea.Markus@jboss.com>
*/
public class SlaveState extends StateBase<ServiceListener> {
private InetAddress localAddress;
private int slaveIndex = -1;
private String plugin;
private String serviceName;
private Cluster.Group group;
private RemoteSlaveConnection.SlaveAddresses slaveAddresses;
private int indexInGroup;
private Map<Class<?>, Object> traits;
private Timeline timeline;
public void setLocalAddress(InetAddress localAddress) {
this.localAddress = localAddress;
}
public void setSlaveIndex(int slaveIndex) {
this.slaveIndex = slaveIndex;
}
public InetAddress getLocalAddress() {
return localAddress;
}
public int getSlaveIndex() {
return slaveIndex;
}
@Override
public void setCluster(Cluster cluster) {
super.setCluster(cluster);
group = cluster.getGroup(slaveIndex);
indexInGroup = cluster.getIndexInGroup(slaveIndex);
}
public String getGroupName() {
return group.name;
}
public int getGroupSize() {
return group.size;
}
@Override
public void reset() {
super.reset();
traits = null;
}
public String getPlugin() {
return plugin;
}
public void setPlugin(String plugin) {
this.plugin = plugin;
}
public String getServiceName() {
return serviceName;
}
public void setService(String service) {
this.serviceName = plugin + "/" + service;
}
public int getIndexInGroup() {
return indexInGroup;
}
public void setTraits(Map<Class<?>, Object> traits) {
this.traits = traits;
}
public <T> T getTrait(Class<? extends T> traitClass) {
return (T) traits.get(traitClass);
}
public Timeline getTimeline() {
return timeline;
}
public void setTimeline(Timeline timeline) {
this.timeline = timeline;
}
public void setSlaveAddresses(RemoteSlaveConnection.SlaveAddresses slaveAddresses) {
this.slaveAddresses = slaveAddresses;
}
public SlaveConnectionInfo getSlaveAddresses(Cluster cluster, String groupName, int indexInGroup) {
int indexTotal = (Integer) new ArrayList(cluster.getSlaves(groupName)).get(indexInGroup);
return slaveAddresses.getSlaveAddresses(indexTotal);
}
}