package test.thermal.recs.plugins.scheduling; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import schedframe.resources.computing.Node; import schedframe.resources.computing.Processor; import schedframe.scheduling.tasks.TaskInterface; import test.thermal.recs.utils.AppType; import test.thermal.recs.utils.TaskToApp; import dcworms.schedframe.scheduling.Executable; import example.localplugin.BaseLocalSchedulingPlugin; public abstract class RecsSP extends BaseLocalSchedulingPlugin { private static String EXEC_DATA_FILE_NAME = "src/test/thermal/recs/data/executiveness_data.properties"; private ResourceBundle execBundle; protected TaskToApp taskToApp = new TaskToApp(); protected void initApplicationType(TaskInterface task){ taskToApp.getAppType(task); } protected String createExecutivenessQuery(TaskInterface task, Node node) { Executable exec = (Executable)task; String query = getApplicationType(exec) + "." + getNodeCategory(node); return query; } protected String getApplicationType(TaskInterface task){ AppType appType = taskToApp.getAppType(task); return appType.toString(); } protected String getNodeCategory(Node node){ return node.getCategory(); } protected int getCoreCnt(TaskInterface task){ double cpuReq; try { cpuReq = task.getCpuCntRequest(); } catch (NoSuchFieldException e) { cpuReq = 1; } return Double.valueOf(cpuReq).intValue(); } protected int getFrequency(Node node){ Processor proc = (Processor) node.getProcessors().get(0); double freq = proc.getPowerInterface().getFrequency(); return Double.valueOf(freq).intValue(); } protected boolean getExecutiveness(String query) throws FileNotFoundException, IOException{ ResourceBundle execBundle = getExecBundle(); return Boolean.valueOf(execBundle.getString(query)).booleanValue(); } private ResourceBundle getExecBundle() throws FileNotFoundException, IOException{ if(execBundle == null){ execBundle = new PropertyResourceBundle(new FileInputStream(EXEC_DATA_FILE_NAME)); } return execBundle; } }