/*
* Copyright (c) 2008-2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.metering.smis;
import java.net.URI;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.URIUtil;
import com.emc.storageos.db.client.constraint.AlternateIdConstraint;
import com.emc.storageos.db.client.model.DataObject.Flag;
import com.emc.storageos.db.client.model.Stat;
import com.emc.storageos.db.client.model.Volume;
import com.emc.storageos.plugins.common.Constants;
import com.emc.storageos.volumecontroller.impl.plugins.metering.ZeroRecordGenerator;
/**
* BlockCacheSyncher is responsible to do Block specific operations.
*
*/
public class BlockZeroRecordGenerator extends ZeroRecordGenerator {
private Logger _logger = LoggerFactory.getLogger(BlockZeroRecordGenerator.class);
/**
*
* Inject VolumeURI of the given nativeGuid.
*
* @param dbClient: dbClient.
* @param nativeGuid: nativeGuid of the volume.
*
*/
public List<URI> injectResourceURI(final DbClient dbClient, final String nativeGuid) {
List<URI> volumeURIs = null;
try {
// Get VolumeUUID
volumeURIs = dbClient.queryByConstraint(AlternateIdConstraint.Factory
.getVolumeNativeGuidConstraint(nativeGuid));
if (volumeURIs == null || volumeURIs.isEmpty()) {
// look for snap, we never know whether the returned volume is a snap
volumeURIs = dbClient.queryByConstraint(AlternateIdConstraint.Factory
.getBlockSnapshotsByNativeGuid(nativeGuid));
}
} catch (Exception e) {
// Even if one volume fails, no need to throw exception instead
// continue processing other volumes
_logger.warn(
"Volume could not be found using NativeGuid : {}",
nativeGuid);
}
return volumeURIs;
}
@Override
public void generateZeroRecord(Stat zeroStatRecord,
Map<String, Object> keyMap) {
zeroStatRecord.setTimeInMillis((Long) keyMap
.get(Constants._TimeCollected));
zeroStatRecord.setTimeCollected((Long) keyMap
.get(Constants._TimeCollected));
zeroStatRecord.setServiceType(Constants._Block);
zeroStatRecord.setAllocatedCapacity(0);
zeroStatRecord.setProvisionedCapacity(0);
zeroStatRecord.setBandwidthIn(0);
zeroStatRecord.setBandwidthOut(0);
zeroStatRecord.setIoTimeCounter(0);
zeroStatRecord.setSnapshotCapacity(0);
zeroStatRecord.setSnapshotCount(0);
zeroStatRecord.setTotalIOs(0);
zeroStatRecord.setWriteIOs(0);
zeroStatRecord.setIdleTimeCounter(0);
zeroStatRecord.setQueueLength(0);
zeroStatRecord.setReadIOs(0);
zeroStatRecord.setKbytesTransferred(0);
}
@Override
protected Stat getStatObject(URI resourceURI, DbClient dbClient) {
if (URIUtil.isType(resourceURI, Volume.class)) {
Volume volume = dbClient.queryObject(Volume.class, resourceURI);
if (!volume.checkInternalFlags(Flag.NO_METERING)) {
return new Stat();
}
}
return null;
}
}