package org.dcache.services.info.gathers.poolmanager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dmg.cells.nucleus.UOID;
import org.dcache.services.info.base.BooleanStateValue;
import org.dcache.services.info.base.StateComposite;
import org.dcache.services.info.base.StatePath;
import org.dcache.services.info.base.StateUpdate;
import org.dcache.services.info.base.StateUpdateManager;
import org.dcache.services.info.gathers.CellMessageHandlerSkel;
import org.dcache.services.info.gathers.MessageMetadataRepository;
public class PoolGroupInfoMsgHandler extends CellMessageHandlerSkel
{
private static final Logger LOGGER = LoggerFactory.getLogger(PoolGroupInfoMsgHandler.class);
private static final StatePath POOLGROUPS_PATH = new StatePath("poolgroups");
public PoolGroupInfoMsgHandler(StateUpdateManager sum,
MessageMetadataRepository<UOID> msgMetaRepo)
{
super(sum, msgMetaRepo);
}
@Override
public void process(Object msgPayload, long metricLifetime)
{
LOGGER.trace("processing new poolgroup information");
if (!msgPayload.getClass().isArray()) {
LOGGER.error("Pool group info, received a message that isn't an array");
return;
}
Object array[] = (Object []) msgPayload;
if (array.length != 4) {
LOGGER.error("Pool group info, unexpected array size: {}", array.length);
return;
}
// Map the array into slightly more meaningful components.
String poolgroupName = (String) array[0];
Object poolNames[] = (Object []) array[1];
Object linkNames[] = (Object []) array[2];
Boolean resilient = (Boolean) array[3];
StateUpdate update = new StateUpdate();
StatePath thisPoolGroupPath = POOLGROUPS_PATH.newChild(poolgroupName);
if (poolNames.length + linkNames.length == 0) {
// Add an entry, even though this poolgroup is empty.
update.appendUpdate(thisPoolGroupPath, new StateComposite(metricLifetime));
} else {
addItems(update, thisPoolGroupPath.newChild("pools"), poolNames, metricLifetime);
addItems(update, thisPoolGroupPath.newChild("links"), linkNames, metricLifetime);
update.appendUpdate(thisPoolGroupPath.newChild("resilient"),
new BooleanStateValue(resilient, metricLifetime));
}
applyUpdates(update);
}
}