source: DCWoRMS/trunk/src/schedframe/resources/computing/profiles/energy/EnergyExtension.java @ 477

Revision 477, 4.1 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package schedframe.resources.computing.profiles.energy;
2
3import java.util.Properties;
4
5import org.apache.commons.logging.Log;
6import org.apache.commons.logging.LogFactory;
7
8import schedframe.events.Event;
9import schedframe.resources.computing.ComputingResource;
10import schedframe.resources.computing.extensions.Extension;
11import schedframe.resources.computing.extensions.ExtensionException;
12import schedframe.resources.computing.extensions.ExtensionType;
13import schedframe.resources.computing.profiles.energy.power.PowerProfile;
14import schedframe.resources.computing.profiles.energy.power.ui.PowerInterface;
15import schedframe.scheduling.manager.tasks.JobRegistryImpl;
16
17public class EnergyExtension implements Extension/*, ResourceVisitor */{
18
19        private Log log = LogFactory.getLog(EnergyExtension.class);
20
21        protected PowerInterface powerInterface;
22        protected PowerProfile powerProfile;
23
24        protected ComputingResource computingResource;
25
26        public EnergyExtension(PowerInterface powerInterface, PowerProfile pp) {
27                this.powerInterface = powerInterface;
28                this.powerProfile = pp;
29        }
30
31        @Override
32        public boolean supportsEvent(Event event) {
33
34                if(powerProfile == null || powerProfile.getEnergyEstimationPlugin() == null)
35                        return false;
36               
37                if(event.getType().getName().equals(EnergyEventType.POWER_STATE_CHANGED.getName()))
38                        return true;
39                else if(event.getType().getName().equals(EnergyEventType.FREQUENCY_CHANGED.getName()))
40                        return true;
41                else if(event.getType().getName().equals(EnergyEventType.TASK_STARTED.getName()))
42                        return true;
43                else if(event.getType().getName().equals(EnergyEventType.TASK_FINISHED.getName()))
44                        return true;
45                else return false;
46
47        }
48       
49
50        @Override
51        public void handleEvent(Event event) {
52                EnergyEvent enEvent = (EnergyEvent)event;
53                double power = 0;
54                switch (enEvent.getType()) {
55               
56                case POWER_STATE_CHANGED:
57                        power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
58                        /*if(resource instanceof ComputingNode){
59                                ComputingNode node = (ComputingNode)resource;
60                                if(event.getData() instanceof PowerState){
61                                        PowerState newState = (PowerState)event.getData();
62                                        if(newState == PowerState.ON) {
63                                                addToPowerUsageHistory(power+node.getPowerInterface().START_COST);
64                                                addToPowerUsageHistory(DateTimeUtils.currentTimeMillis()+node.getPowerInterface().START_TIME, power);
65                                        }else if(newState == PowerState.OFF){
66                                                addToPowerUsageHistory(power+node.getPowerInterface().SHUTDOWN_COST);
67                                                addToPowerUsageHistory(DateTimeUtils.currentTimeMillis()+node.getPowerInterface().SHUTDOWN_TIME, power);
68                                        }
69                                }
70                        }
71                        else */powerProfile.addToPowerUsageHistory(power);
72                        break;
73                       
74                case FREQUENCY_CHANGED:
75                        power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
76                        powerProfile.addToPowerUsageHistory(power);
77                        break;
78                       
79                case TASK_STARTED:
80                        power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
81                        powerProfile.addToPowerUsageHistory(power);
82                        break;
83
84                case TASK_FINISHED:
85                        //System.out.println(this.resource.getName() + " - ENERGY EXTENSION: TASK FINISHED");
86                        power = powerProfile.getEnergyEstimationPlugin().estimatePowerConsumption(enEvent, new JobRegistryImpl(computingResource.getName()), computingResource);
87                        //System.out.println(this.resource.getName() + " - ESTIMATED ENERGY:" + power);
88                        powerProfile.addToPowerUsageHistory(power);
89
90                        break;
91                }
92        }
93       
94        @Override
95        public void init(Properties properties) throws ExtensionException {
96                // TODO Auto-generated method stub
97        }
98
99        @Override
100        public ExtensionType getType() {
101                return ExtensionType.ENERGY_EXTENSION;
102        }
103
104        public ComputingResource getResource() {
105                return computingResource;
106        }
107
108        public void setResource(ComputingResource compRes){
109                this.computingResource = compRes;
110        }
111
112        public PowerInterface getPowerInterface() {
113                return powerInterface;
114        }
115
116        public PowerProfile getPowerProfile() {
117                return powerProfile;
118        }
119
120
121}
Note: See TracBrowser for help on using the repository browser.