package resa.evaluation.scheduler.plan; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Map; import java.util.TreeMap; import java.util.stream.IntStream; /** * Created by ding on 14-9-3. */ public class MetricsGenerater { private int[] workloads; private int[] states = new int[]{8, 10, 12, 14, 16}; @Before public void loadWorkloads() throws IOException { workloads = Files.readAllLines(Paths.get("/Volumes/Data/work/doctor/resa/exp/metrics-load.txt")).stream() .map(String::trim).filter(s -> !s.isEmpty()).mapToInt(Integer::parseInt).toArray(); System.out.println("min: " + IntStream.of(workloads).min().getAsInt()); System.out.println("max: " + IntStream.of(workloads).max().getAsInt()); } @Test public void generateMetrics() { Map<String, Integer> migrations = new TreeMap<>(); for (int i = 1; i < workloads.length; i++) { int prev = findState(workloads[i - 1]); int curr = findState(workloads[i]); if (prev != curr) { System.out.println(states[curr]); migrations.compute(states[prev] + ":" + states[curr], (k, v) -> v == null ? 1 : v + 1); } } int totalCount = migrations.values().stream().mapToInt(i -> i).sum(); migrations.forEach((k, v) -> System.out.println(k + ":" + ((double) v / totalCount))); } private int findState(int load) { if (load < 50000) { return 0; } else if (load < 60000) { return 1; } else if (load < 70000) { return 2; } else if (load < 80000) { return 3; } return 4; } }