/* * Copyright (c) 2008-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.plugins.metering.file; 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.constraint.URIQueryResultList; import com.emc.storageos.db.client.model.DataObject.Flag; import com.emc.storageos.db.client.model.FileShare; import com.emc.storageos.db.client.model.Stat; import com.emc.storageos.plugins.common.Constants; import com.emc.storageos.plugins.metering.vnxfile.VNXFileConstants; import com.emc.storageos.volumecontroller.impl.plugins.metering.ZeroRecordGenerator; /** * FileCacheSyncher is responsible to do File specific operations. * */ public class FileZeroRecordGenerator extends ZeroRecordGenerator { private Logger _logger = LoggerFactory.getLogger(FileZeroRecordGenerator.class); /** * Inject FileShareURI of the given nativeGuid. * * @param dbClient: dbClient. * @param nativeGuid: nativeGuid of the volume. * */ @Override public List<URI> injectResourceURI(final DbClient dbClient, final String nativeGuid) { URIQueryResultList results = new URIQueryResultList(); try { // Get File systems with given native id!! dbClient.queryByConstraint( AlternateIdConstraint.Factory.getFileShareNativeIdConstraint(nativeGuid), results); } catch (Exception e) { // Even if one volume fails, no need to throw exception instead // continue processing other volumes _logger.error( "Cassandra Database Error while querying FileshareUUId: {}--> ", nativeGuid, e); } return results; } @Override public void generateZeroRecord(Stat zeroStatRecord, Map<String, Object> keyMap) { // TimeInMillis is also the plugin collection time as // we get two different times when we query fileshare usage & volume bwIn & bwOut. zeroStatRecord.setTimeInMillis((Long) keyMap .get(Constants._TimeCollected)); zeroStatRecord.setTimeCollected((Long) keyMap .get(Constants._TimeCollected)); zeroStatRecord.setServiceType(VNXFileConstants.FILE); zeroStatRecord.setAllocatedCapacity(0); zeroStatRecord.setProvisionedCapacity(0); zeroStatRecord.setBandwidthIn(0); zeroStatRecord.setBandwidthOut(0); zeroStatRecord.setSnapshotCapacity(0); zeroStatRecord.setSnapshotCount(0); } @Override protected Stat getStatObject(URI resourceURI, DbClient dbClient) { if (URIUtil.isType(resourceURI, FileShare.class)) { FileShare fs = dbClient.queryObject(FileShare.class, resourceURI); if (!fs.checkInternalFlags(Flag.NO_METERING)) { return new Stat(); } } return null; } }