/*
* Copyright (c) 2008-2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.metering.smis.processor;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.cim.CIMInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.plugins.BaseCollectionException;
import com.emc.storageos.plugins.common.Constants;
import com.emc.storageos.plugins.common.Processor;
import com.emc.storageos.plugins.common.domainmodel.Operation;
/**
* MetricSequenceProcessor is responsible to get the sequence of metrics in CSV format retrieved from
* the provider for each component.
*
*/
public class MetricSequenceProcessor extends Processor {
private Logger _logger = LoggerFactory.getLogger(MetricSequenceProcessor.class);
@SuppressWarnings("unchecked")
@Override
public void processResult(
Operation operation, Object resultObj, Map<String, Object> keyMap)
throws BaseCollectionException {
try {
final Iterator<CIMInstance> it = (Iterator<CIMInstance>) resultObj;
while (it.hasNext()) {
CIMInstance blockManifestInstance = null;
try {
blockManifestInstance = it.next();
String elementType = getCIMPropertyValue(blockManifestInstance, Constants.ELEMENTTYPE);
String elementName = getCIMPropertyValue(blockManifestInstance, Constants.ELEMENTNAME);
String[] csvSeq = (String[]) blockManifestInstance.getPropertyValue(Constants.CSV_SEQUENCE);
List<String> csvSequenceList = new LinkedList<String>(Arrays.asList(csvSeq));
_logger.debug("csvSequenceList: {}", csvSequenceList);
if (elementType.equals(Constants.VOLUME_ELEMENTTYPE)
&& elementName.equals(Constants.STORAGEOS_VOLUME_MANIFEST)) {
keyMap.put(Constants.STORAGEOS_VOLUME_MANIFEST, csvSequenceList);
} else if (elementType.equals(Constants.FEPORT_ELEMENTTYPE) &&
elementName.equals(Constants.STORAGEOS_FEPORT_MANIFEST)) {
keyMap.put(Constants.STORAGEOS_FEPORT_MANIFEST, csvSequenceList);
} else if (elementType.equals(Constants.FEADAPT_ELEMENTTYPE) &&
elementName.equals(Constants.STORAGEOS_FEADAPT_MANIFEST)) {
keyMap.put(Constants.STORAGEOS_FEADAPT_MANIFEST, csvSequenceList);
} else if (elementType.equals(Constants.SYSTEM_ELEMENTTYPE) &&
elementName.equals(Constants.STORAGEOS_SYSTEM_MANIFEST)) {
keyMap.put(Constants.STORAGEOS_SYSTEM_MANIFEST, csvSequenceList);
}
} catch (Exception e) {
_logger.warn("MetricSequence call failed for {}",
getCIMPropertyValue(blockManifestInstance, Constants.INSTANCEID), e);
}
}
} catch (Exception e) {
_logger.error("Processing MetricSequence call failed", e);
}
}
@Override
protected void setPrerequisiteObjects(List<Object> inputArgs)
throws BaseCollectionException {
// TODO Auto-generated method stub
}
}