package schedframe.resources.computing.profiles.energy.power; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.joda.time.DateTimeUtils; import schedframe.Parameters; import schedframe.resources.computing.profiles.energy.power.plugin.EnergyEstimationPlugin; public class PowerProfile { protected List powerUsage; protected EnergyEstimationPlugin energyEstimationPlugin; protected List supportedPowerStates; protected Map supportedPStates; protected Parameters parameters; public PowerProfile(EnergyEstimationPlugin energyEstimationPlugin, List powerStates) { this.energyEstimationPlugin = energyEstimationPlugin; this.powerUsage = new ArrayList(); this.supportedPowerStates = powerStates; } public PowerProfile(EnergyEstimationPlugin energyEstimationPlugin, List powerStates, List pStates) { this.energyEstimationPlugin = energyEstimationPlugin; this.supportedPowerStates = powerStates; this.powerUsage = new ArrayList(); if(pStates.size() > 0) this.supportedPStates = new HashMap(); for(PState pState: pStates){ supportedPStates.put(pState.getName(), pState); } } /*public void initPlugin(String energyEstimationPluginClassName){ if(energyEstimationPluginClassName != null) { energyEstimationPlugin = (EnergyEstimationPluginInterface) InstanceFactory.createInstance( energyEstimationPluginClassName, EnergyEstimationPluginInterface.class); if(energyEstimationPlugin == null){ energyEstimationPlugin = new DefaultEnergyEstimationPlugin(); log.info("Using default energy estimation plugin: " + DefaultEnergyEstimationPlugin.class.getName()); } else { energyEstimationPlugin.init(null); } } else { energyEstimationPlugin = new DefaultEnergyEstimationPlugin(); log.info("Using default energy estimation plugin: " + DefaultEnergyEstimationPlugin.class.getName()); } }*/ public EnergyEstimationPlugin getEnergyEstimationPlugin() { return energyEstimationPlugin; } public List getSupportedPowerStates() throws NoSuchFieldException{ if(supportedPowerStates == null) throw new NoSuchFieldException("Supported power states are not defined."); return supportedPowerStates; } public Map getSupportedPStates() throws NoSuchFieldException { if(supportedPStates == null) throw new NoSuchFieldException("Supported p-states are not defined."); return supportedPStates; } public void addToPowerUsageHistory(double power) { if (powerUsage.size() == 0) { PowerUsage usage = new PowerUsage(DateTimeUtils.currentTimeMillis(), power); powerUsage.add(usage); return; } int lastIdx = powerUsage.size() - 1; double lastPower = powerUsage.get(lastIdx).getValue(); if (lastPower != power) { PowerUsage usage = powerUsage.get(lastIdx); long currentTime = DateTimeUtils.currentTimeMillis(); if (usage.getTimestamp() == currentTime) { usage.setValue(power); if(lastIdx > 0 && powerUsage.get(lastIdx - 1).getValue() == power) powerUsage.remove(usage); } else { usage = new PowerUsage(DateTimeUtils.currentTimeMillis(), power); powerUsage.add(usage); } } } public List getPowerUsageHistory() { return powerUsage; } public void init(Parameters params){ this.parameters = params; } public Parameters getParameters() { return parameters; } }