source: xssim/trunk/src/test/rewolucja/energy/profile/implementation/ComputingNodePowerProfile.java @ 214

Revision 214, 2.3 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package test.rewolucja.energy.profile.implementation;
2
3import java.util.Arrays;
4import java.util.List;
5
6import schedframe.resources.PowerState;
7import test.rewolucja.energy.EnergyEvent;
8import test.rewolucja.energy.EnergyEventType;
9import test.rewolucja.energy.extension.EnergyExtension;
10import test.rewolucja.energy.profile.AbstractPowerProfile;
11import test.rewolucja.extensions.ExtensionType;
12import test.rewolucja.resources.ResourceStatus;
13import test.rewolucja.resources.physical.base.ComputingResource;
14import test.rewolucja.resources.physical.implementation.ComputingNode;
15
16public class ComputingNodePowerProfile extends AbstractPowerProfile{
17
18        protected ComputingNode computingNode;
19
20        public ComputingNodePowerProfile(){
21                powerState = PowerState.ON;
22        }
23       
24        public void visit(ComputingNode compNode){
25                computingNode = compNode;
26                energyExtension = (EnergyExtension) computingNode.getExtensionList().getExtension(ExtensionType.ENERGY_EXTENSION);
27        }
28       
29        public boolean setPowerState(PowerState state){
30                if(!supportPowerState(state))
31                        return false;
32                powerState = state;
33                if(computingNode.getProcessors() != null)
34                {
35                        for(ComputingResource child:computingNode.getProcessors()){
36                                child.getPowerInterface().setPowerState(state);
37                        }
38                } else {
39                        computingNode.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, computingNode.getName()));
40                }
41               
42                if(state == PowerState.OFF){
43                        computingNode.setStatus(ResourceStatus.UNAVAILABLE);
44                }
45                else if(state == PowerState.ON){
46                        computingNode.setStatus(ResourceStatus.FREE);
47                }
48                //computingNode.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, computingNode.getName()));
49                return true;
50        }
51       
52        public double getPowerConsumption(PowerState state) {
53                if(powerState == PowerState.OFF)
54                        return 0;
55                else if(powerState == PowerState.ON)
56                        return 750;
57                else return 500;
58        }
59
60        public boolean supportPowerState(PowerState state) {
61                switch(state){
62                        case ON:
63                                return true;
64                        case OFF:
65                                return true;
66                        case SLEEP:
67                                return true;
68                        case HIBERNATE:
69                                return true;
70                        default: return false;
71                }
72        }
73
74        public List<PowerState> getSupportedPowerStates() {
75                return Arrays.asList(new PowerState[]{PowerState.ON, PowerState.OFF, PowerState.SLEEP, PowerState.HIBERNATE});
76        }
77
78        public void turnOn(){
79                setPowerState(PowerState.ON);
80        }
81       
82        public void turnOff(){
83                setPowerState(PowerState.OFF);
84        }
85
86}
Note: See TracBrowser for help on using the repository browser.