package test.rewolucja.energy.profile; import schedframe.resources.PowerState; import schedframe.resources.profile.PowerUsage; import test.rewolucja.energy.EnergyEvent; import test.rewolucja.energy.EnergyEventType; import test.rewolucja.energy.extension.EnergyExtension; import test.rewolucja.resources.ResourceStatus; import test.rewolucja.resources.physical.base.ComputingResource; import test.rewolucja.resources.physical.implementation.Processor; import test.rewolucja.resources.physical.implementation.ComputingNode; import test.rewolucja.resources.physical.implementation.DataCenter; public abstract class AbstractPowerProfile implements PowerInterface{ protected PowerState powerState; protected EnergyExtension energyExtension; //protected Resource resource; public AbstractPowerProfile(){ } public void init(String arg){ System.out.println(this.getClass().getName() + " " + arg); } public PowerUsage getRecentPowerUsage(){ PowerUsage powerUsage = null; int lastIdx = energyExtension.getPowerUsageHistory().size() - 1; if(lastIdx >= 0) powerUsage = energyExtension.getPowerUsageHistory().get(lastIdx); return powerUsage; } public boolean setPowerState(PowerState state) { powerState = state; ComputingResource resource = energyExtension.getResource(); if(resource.getChildren() != null) { for(ComputingResource child:resource.getChildren()){ if(child.getPowerInterface().supportPowerState(state)) child.getPowerInterface().setPowerState(state); } } if(state == PowerState.OFF){ resource.setStatus(ResourceStatus.UNAVAILABLE); } else if(state == PowerState.ON){ resource.setStatus(ResourceStatus.FREE); } //notifications from all levels resource.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, resource.getName())); //notification from last level //if (resource.getChildren() == null) resource.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, resource)); return true; } public PowerState getPowerState() { return powerState; } /*public double getCurrentPowerConsumption(){ return energyExtension.getEnergyEstimationPlugin().estimatePowerConsumption(null, JobRegistry.getInstance(energyExtension.getResource().getName()), energyExtension.getResource()); }*/ @Override public void visit(Processor processor) { throw new RuntimeException("Not implemented."); } @Override public void visit(ComputingNode node) { throw new RuntimeException("Not implemented."); } @Override public void visit(DataCenter dataCenter) { throw new RuntimeException("Not implemented."); } }