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.IntegerStateValue;
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 PoolInfoMsgHandler extends CellMessageHandlerSkel
{
private static final Logger LOGGER = LoggerFactory.getLogger(PoolInfoMsgHandler.class);
private static final StatePath POOLS_PATH = new StatePath("pools");
public PoolInfoMsgHandler(StateUpdateManager sum,
MessageMetadataRepository<UOID> msgMetaRepo)
{
super(sum, msgMetaRepo);
}
@Override
public void process(Object msgPayload, long metricLifetime)
{
StateUpdate update = new StateUpdate();
if (!msgPayload.getClass().isArray()) {
LOGGER.error("received a message that isn't an array");
return;
}
Object[] array = (Object []) msgPayload;
if (array.length != 6) {
LOGGER.error("unexpected array size: {}", array.length);
return;
}
Boolean isEnabled = (Boolean) array[3];
Long heartBeat = (Long) array[4];
Boolean isReadOnly = (Boolean) array [5];
String poolName = array[0].toString();
StatePath thisPoolPath = POOLS_PATH.newChild(poolName);
addItems(update, thisPoolPath.newChild("poolgroups"), (Object []) array [1], metricLifetime);
addItems(update, thisPoolPath.newChild("links"), (Object []) array [2], metricLifetime);
update.appendUpdate(thisPoolPath.newChild("read-only"),
new BooleanStateValue(isReadOnly, metricLifetime));
update.appendUpdate(thisPoolPath.newChild("enabled"),
new BooleanStateValue(isEnabled, metricLifetime));
update.appendUpdate(thisPoolPath.newChild("last-heartbeat"),
new IntegerStateValue(heartBeat.intValue(), metricLifetime));
applyUpdates(update);
}
}