package resa.evaluation.scheduler.plan; import org.junit.Before; import org.junit.Test; import resa.migrate.plan.ExecutionAnalyzer; import resa.util.RedisQueueIterable; import java.nio.file.Files; import java.nio.file.Paths; import java.util.SortedMap; import java.util.TreeMap; import java.util.stream.Collectors; import java.util.stream.DoubleStream; import java.util.stream.IntStream; public class ExecutionAnalyzerTest { private double[] dataSizes; private double[] workload; private TreeMap<String, Double> migrationMetrics; private float ratio = 1.8f; private int[] allStates; @Before public void init() throws Exception { migrationMetrics = Files.readAllLines(Paths.get("/Volumes/Data/work/doctor/resa/exp/metrics.txt")).stream() .map(s -> s.split(":")).collect(Collectors.toMap(strs -> strs[0] + "-" + strs[1], strs -> Double.parseDouble(strs[2]), (v1, v2) -> { throw new IllegalStateException(); }, TreeMap::new)); allStates = migrationMetrics.keySet().stream().flatMapToInt(s -> { String[] tmp = s.split("-"); return IntStream.of(Integer.parseInt(tmp[0]), Integer.parseInt(tmp[1])); }).boxed().collect(Collectors.toSet()).stream().mapToInt(i -> i).toArray(); } @Test public void testCalcStat() throws Exception { String compName = "detector"; SortedMap<String, ExecutionAnalyzer.ExecutionStat> ret; try (RedisQueueIterable data = new RedisQueueIterable("192.168.0.30", 6379, "fpt-16-1409727090-metrics", 980000)) { ExecutionAnalyzer analyzer = new ExecutionAnalyzer(data); analyzer.calcStat(); ret = analyzer.getStat().subMap(compName, compName + "~"); } dataSizes = ret.values().stream().mapToDouble(s -> s.getDataSize()).toArray(); workload = ret.values().stream().mapToDouble(s -> s.getCost()).toArray(); DoubleStream.of(dataSizes).map(size -> size / (1024 * 1024)).forEach(System.out::println); System.out.println("Avg data size " + (DoubleStream.of(dataSizes).sum() / 1024 / 1024 / dataSizes.length) + "MB"); DoubleStream.of(workload).forEach(System.out::println); } }