source: DCWoRMS/trunk/src/schedframe/resources/computing/profiles/energy/power/ui/ComputingResourcePowerInterface.java @ 579

Revision 579, 3.7 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package schedframe.resources.computing.profiles.energy.power.ui;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import org.joda.time.DateTimeUtils;
7
8import schedframe.Parameters;
9import schedframe.resources.ResourceStatus;
10import schedframe.resources.computing.ComputingResource;
11import schedframe.resources.computing.profiles.energy.EnergyEvent;
12import schedframe.resources.computing.profiles.energy.EnergyEventType;
13import schedframe.resources.computing.profiles.energy.power.PowerProfile;
14import schedframe.resources.computing.profiles.energy.power.PowerState;
15import schedframe.resources.computing.profiles.energy.power.PowerStateName;
16import schedframe.resources.computing.profiles.energy.power.PowerUsage;
17import schedframe.resources.computing.profiles.energy.power.StandardPowerStateName;
18
19public class ComputingResourcePowerInterface implements PowerInterface{
20
21        protected PowerStateName currentPowerState;
22        protected PowerProfile powerProfile;
23        protected ComputingResource resource;
24       
25        public ComputingResourcePowerInterface(ComputingResource resource, PowerProfile powerProfile){
26                this.resource = resource;
27                this.powerProfile = powerProfile;
28                this.currentPowerState = StandardPowerStateName.ON;
29        }
30       
31        public boolean setPowerState(PowerStateName state) {
32                if(supportPowerState(state)){
33                        currentPowerState = state;
34
35                        for(ComputingResource child:resource.getChildren()){
36                                if(child.getPowerInterface().supportPowerState(state)){
37                                        boolean status = child.getPowerInterface().setPowerState(state);
38                                }
39                        }
40
41                        if(state == StandardPowerStateName.OFF){
42                                resource.setStatus(ResourceStatus.UNAVAILABLE);
43                        }
44                        else if(state == StandardPowerStateName.ON){
45                                resource.setStatus(ResourceStatus.FREE);
46                        }
47                        //notifications from all levels
48                        resource.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, resource.getName()));
49
50                        //notification from last level
51                        //if (resource.getChildren() == null) resource.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, resource));
52                       
53                        return true;
54                }
55                return false;
56        }
57       
58
59        public PowerStateName getPowerState() {
60                return currentPowerState;
61        }
62
63        public List<PowerState> getSupportedPowerStates() throws NoSuchFieldException {
64                List<PowerState> powerStates = new ArrayList<PowerState>();
65                for(PowerState powerState: powerProfile.getSupportedPowerStates()){
66                        powerStates.add(powerState);
67                }
68                return powerStates;
69        }
70
71        public boolean supportPowerState(PowerStateName state) {
72                try {
73                        for(PowerState powerState: powerProfile.getSupportedPowerStates()){
74                                if(powerState.getName().equals(state)){
75                                        return true;
76                                }
77                        }
78                } catch (NoSuchFieldException e) {
79                        return false;
80                }
81                return false;
82               
83        }
84       
85        public double getPowerConsumption(PowerStateName state) throws NoSuchFieldException {
86                double powerConsumption = 0;
87                if(supportPowerState(state)){
88                        for(PowerState powerState: powerProfile.getSupportedPowerStates()){
89                                if(powerState.getName().equals(state)){
90                                        powerConsumption = powerState.getPowerUsage();
91                                        break;
92                                }
93                        }
94                } else {
95                        throw new NoSuchFieldException("Power state not supported");
96                }
97                return powerConsumption;
98        }
99
100        public PowerUsage getRecentPowerUsage() {
101                PowerUsage powerUsage = null;
102                int lastIdx = getPowerUsageHistory().size() - 1;
103                if(lastIdx >= 0)
104                        powerUsage = getPowerUsageHistory().get(lastIdx);
105                else { 
106                        try {
107                                powerUsage = new PowerUsage(DateTimeUtils.currentTimeMillis(), getPowerConsumption(currentPowerState));
108                        } catch (NoSuchFieldException e) {
109                        }
110                }
111                return powerUsage;
112        }
113       
114        public List<PowerUsage> getPowerUsageHistory(){
115                return powerProfile.getPowerUsageHistory();
116        }
117       
118        public Parameters getParameters() {
119                return powerProfile.getParameters();
120        }
121
122}
Note: See TracBrowser for help on using the repository browser.