package org.opennaas.extensions.pdu.capability;
import java.util.Date;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.opennaas.core.resources.capability.CapabilityException;
import org.opennaas.core.resources.descriptor.CapabilityDescriptor;
import org.opennaas.extensions.gim.controller.capabilities.IPDUPowerMonitoringController;
import org.opennaas.extensions.gim.model.core.entities.pdu.PDU;
import org.opennaas.extensions.gim.model.core.entities.pdu.PDUPort;
import org.opennaas.extensions.gim.model.load.MeasuredLoad;
import org.opennaas.extensions.gim.model.log.PowerMonitorLog;
import org.opennaas.extensions.pdu.Activator;
import org.opennaas.extensions.pdu.model.PDUModel;
public class PDUPowerMonitoringCapability extends AbstractPDUCapability implements IPDUPowerMonitoringIDsCapability {
private static Log log = LogFactory.getLog(PDUPowerMonitoringCapability.class);
public static String CAPABILITY_TYPE = "pdu_pw_mon";
private String resourceId = "";
private IPDUPowerMonitoringController driver;
public PDUPowerMonitoringCapability(CapabilityDescriptor descriptor, String resourceId) {
super(descriptor);
this.resourceId = resourceId;
log.debug("Built new PDUPowerMonitoringCapability Capability");
}
@Override
public void activate() throws CapabilityException {
// try{
// driver = instantiateDriver();
// } catch (Exception e) {
// throw new CapabilityException(e);
// }
registerService(Activator.getContext(), CAPABILITY_TYPE, getResourceType(), getResourceName(),
IPDUPowerMonitoringIDsCapability.class.getName());
super.activate();
}
@Override
public void deactivate() throws CapabilityException {
driver = null;
unregisterService();
super.deactivate();
}
@Override
public String getCapabilityName() {
return CAPABILITY_TYPE;
}
// IPDUPowerMonitoringController methods
/**
*
* @return return current MeasuredLoad.
* @throws Exception
*/
public MeasuredLoad getCurrentPowerMetrics(String portId) throws Exception {
return getDriver().getCurrentPowerMetrics(portId);
}
/**
*
* @param from
* @param to
* @return A PowerMonitorLog including all read @code{MesuredLoad}s from @code{from} to @code{to}, both included.
* @throws Exception
*/
public PowerMonitorLog getPowerMetricsByTimeRange(String portId, Date from, Date to) throws Exception {
return getDriver().getPowerMetricsByTimeRange(portId, from, to);
}
private IPDUPowerMonitoringController getDriver() throws Exception {
// FIXME CAPABILITY SHOULD NOT INSTANTIATE ITS OWN DRIVER.
if (driver == null)
driver = instantiateDriver();
return driver;
}
// FIXME CAPABILITY SHOULD NOT INSTANTIATE ITS OWN DRIVER.
private IPDUPowerMonitoringController instantiateDriver() throws Exception {
String ip = getCapabilityDescriptor().getPropertyValue("pdu.driver.ipaddress");
String deliveryId = getCapabilityDescriptor().getPropertyValue("powernet.delivery.id");
// FIXME PDUDriverInstantiator should be unknown for the capability
// capability should take the driver from an OSGI service.
return PDUDriverInstantiator.create(resourceId, getPowernetId(), deliveryId, ip);
}
private PDU getPdu() {
return ((PDUModel) resource.getModel()).getPdu();
}
@Override
public void resyncModel() throws Exception {
List<PDUPort> pduPorts = getDriver().listPorts();
PDU pdu = getPdu();
pdu.setPowerSources(pduPorts);
}
}