source: xssim/branches/tpiontek/example/tomekp/nodestest/ComputingNodePowerProfile.java @ 275

Revision 275, 3.5 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
RevLine 
[275]1package tomekp.nodestest;
2
3import gridsim.gssim.GssimTags;
4
5import java.util.Arrays;
6import java.util.List;
7
8import schedframe.resources.PowerState;
9import test.rewolucja.energy.EnergyEvent;
10import test.rewolucja.energy.EnergyEventType;
11import test.rewolucja.energy.extension.EnergyExtension;
12import test.rewolucja.energy.profile.AbstractPowerProfile;
13import test.rewolucja.extensions.ExtensionType;
14import test.rewolucja.resources.ResourceStatus;
15import test.rewolucja.resources.physical.base.ComputingResource;
16import test.rewolucja.resources.physical.implementation.ComputingNode;
17
18public class ComputingNodePowerProfile extends AbstractPowerProfile{
19
20        public static double START_TIME = 600.0;
21        public static double SHUTDOWN_TIME = 300.0;
22        public static double START_COST = 1000;
23        public static double SHUTDOWN_COST = 500;
24       
25        protected ComputingNode computingNode;
26
27        public ComputingNodePowerProfile(){
28                powerState = PowerState.ON;
29        }
30       
31        public void visit(ComputingNode compNode){
32                computingNode = compNode;
33                energyExtension = (EnergyExtension) computingNode.getExtensionList().getExtension(ExtensionType.ENERGY_EXTENSION);
34        }
35       
36        public boolean setPowerState(PowerState state){
37                if(!supportPowerState(state))
38                        return false;
39                //powerState = state;
40                if(state == PowerState.OFF){
41                        if(powerState == PowerState.SHUTDOWNING)
42                                powerState = PowerState.OFF;
43                        else if(powerState == PowerState.ON)
44                                powerState = PowerState.SHUTDOWNING;
45                }
46                else if(state == PowerState.ON){
47                        if(powerState == PowerState.STARTING)
48                                powerState = PowerState.ON;
49                        else if(powerState == PowerState.OFF)
50                                powerState = PowerState.STARTING;
51                }
52                if(computingNode.getProcessors() != null)
53                {
54                        for(ComputingResource child:computingNode.getProcessors()){
55                                child.getPowerInterface().setPowerState(state);
56                        }
57                } else {
58                        computingNode.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, computingNode.getName()));
59                }
60               
61                if(state == PowerState.OFF){
62                        if(powerState == PowerState.SHUTDOWNING)
63                                computingNode.getLogicalResource().sendInternal(SHUTDOWN_TIME, GssimTags.SHUTDOWN, computingNode.getName());
64                        computingNode.setStatus(ResourceStatus.UNAVAILABLE);
65                }
66                else if(state == PowerState.ON){
67                        if(powerState == PowerState.STARTING)
68                                computingNode.getLogicalResource().sendInternal(START_TIME, GssimTags.START, computingNode.getName());
69                        computingNode.setStatus(ResourceStatus.FREE);
70                }
71                //computingNode.handleEvent(new EnergyEvent(EnergyEventType.POWER_STATE_CHANGED, computingNode.getName()));
72                return true;
73        }
74       
75        public double getPowerConsumption(PowerState state) {
76                if(powerState == PowerState.OFF)
77                        return 0;
78                else if(powerState == PowerState.ON)
79                {       
80                        if( computingNode.getCategory().getName().equals("A"))
81                                return 240;
82                        else if( computingNode.getCategory().getName().equals("B"))
83                                return 95;
84                }else if(powerState == PowerState.STARTING)
85                        return START_COST;
86                else if (powerState == PowerState.SHUTDOWNING)
87                        return SHUTDOWN_COST;
88               
89               
90                return 150;
91        }
92
93        public boolean supportPowerState(PowerState state) {
94                switch(state){
95                        case ON:
96                                return true;
97                        case OFF:
98                                return true;
99                        case SLEEP:
100                                return true;
101                        case HIBERNATE:
102                                return true;
103                        default: return false;
104                }
105        }
106
107        public List<PowerState> getSupportedPowerStates() {
108                return Arrays.asList(new PowerState[]{PowerState.ON, PowerState.OFF, PowerState.SLEEP, PowerState.HIBERNATE});
109        }
110
111        public void turnOn(){
112                setPowerState(PowerState.ON);
113        }
114       
115        public void turnOff(){
116                setPowerState(PowerState.OFF);
117        }
118
119}
Note: See TracBrowser for help on using the repository browser.