package edu.usc.enl.dynamicmeasurement.metric.hhh; import edu.usc.enl.dynamicmeasurement.model.WildcardPattern; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created with IntelliJ IDEA. * User: masoud * Date: 9/13/13 * Time: 10:07 AM */ public class Utilization extends HHHMetric { private final static double ACCURACY_BOUND = 0.8; private HHHMetric accuracyMetric; private Map<String, Map<Integer, Double>> resources; public Utilization(File parentFolder) { accuracyMetric = new Precision(); resources = loadShareFile(parentFolder.getAbsoluteFile() + "/share.csv"); } @Override public Double compute(List<WildcardPattern> hhh, List<WildcardPattern> reportedHHH, int step, String folder) { Map<Integer, Double> currentFolderResources = resources.get(folder); if (currentFolderResources == null) { return 0d; } //Double accuracy = accuracyMetric.compute(hhh, reportedHHH, step, folder); //load share Double resource = currentFolderResources.get(step); if (resource == null) { return 0d; } return resource; //* (accuracy >= ACCURACY_BOUND ? 1 : 0); } private Map<String, Map<Integer, Double>> loadShareFile(String shareFile) { //time,task,switch,share,accuracy,accuracy_agg Map<String, Map<Integer, Double>> output = new HashMap<>(); try (BufferedReader br = new BufferedReader(new FileReader(shareFile))) { br.readLine();//skip header while (br.ready()) { String line = br.readLine(); // StringTokenizer st = new StringTokenizer(line, ","); // int time = Integer.parseInt(st.nextToken()); // String name = st.nextToken(); // st.nextToken(); // String s = st.nextToken(); String[] split = line.split(","); String name = null; name = split[1]; int time = Integer.parseInt(split[0]); String s = split[3]; Map<Integer, Double> share = output.get(name); if (share == null) { share = new HashMap<>(); output.put(name, share); } Double timeShare = share.get(time); if (timeShare == null) { timeShare = 0d; } timeShare += Double.parseDouble(s); share.put(time, timeShare); } } catch (IOException e) { e.printStackTrace(); } return output; } @Override public String toString() { return "Utilization"; } }