Skip to content
Snippets Groups Projects
Commit 587e5889 authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

use streams and map for processing

parent 67f70fca
No related branches found
No related tags found
1 merge request!2Format statistics
...@@ -8,13 +8,10 @@ import java.nio.file.Files; ...@@ -8,13 +8,10 @@ import java.nio.file.Files;
import java.nio.file.InvalidPathException; import java.nio.file.InvalidPathException;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -35,7 +32,6 @@ import net.imagej.updater.util.Progress; ...@@ -35,7 +32,6 @@ import net.imagej.updater.util.Progress;
public class BenchmarkJobManager { public class BenchmarkJobManager {
@SuppressWarnings("unused")
private static Logger log = LoggerFactory private static Logger log = LoggerFactory
.getLogger(cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkJobManager.class); .getLogger(cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkJobManager.class);
...@@ -231,17 +227,14 @@ public class BenchmarkJobManager { ...@@ -231,17 +227,14 @@ public class BenchmarkJobManager {
private static void formatResultFile(Path filename) throws FileNotFoundException { private static void formatResultFile(Path filename) throws FileNotFoundException {
LinkedList<ResultFileTask> identifiedTasks = new LinkedList<ResultFileTask>(); List<ResultFileTask> identifiedTasks = new LinkedList<ResultFileTask>();
try { try {
String line = null; String line = null;
final String separator = ";"; final String separator = ";";
ResultFileTask processedTask = null; ResultFileTask processedTask = null;
LinkedList<String> id = new LinkedList<String>(); List<ResultFileJob> values = new LinkedList<>();
LinkedList<Double> memoryUsed = new LinkedList<Double>();
LinkedList<Integer> wallTime = new LinkedList<Integer>();
LinkedList<Integer> cpuPercentage = new LinkedList<Integer>();
BufferedReader reader = Files.newBufferedReader(filename); BufferedReader reader = Files.newBufferedReader(filename);
while (null != (line = reader.readLine())) { while (null != (line = reader.readLine())) {
...@@ -256,51 +249,36 @@ public class BenchmarkJobManager { ...@@ -256,51 +249,36 @@ public class BenchmarkJobManager {
if (columns[0].equals("Task name")) { if (columns[0].equals("Task name")) {
if (null != processedTask ) { if (null != processedTask ) {
for (int i = 0; i < id.size(); i++) { processedTask.jobs.addAll(values);
processedTask.jobs.add(new ResultFileJob(id.get(i), memoryUsed.get(i), wallTime.get(i), cpuPercentage.get(i)));
}
identifiedTasks.add(processedTask); identifiedTasks.add(processedTask);
} }
processedTask = new ResultFileTask(columns[1]); processedTask = new ResultFileTask(columns[1]);
values.clear();
id = new LinkedList<String>();
memoryUsed = new LinkedList<Double>();
wallTime = new LinkedList<Integer>();
cpuPercentage = new LinkedList<Integer>();
} else if (columns[0].equals("job ids")) { } else if (columns[0].equals("job ids")) {
for (int i = 1; i < columns.length; i++) { for (int i = 1; i < columns.length; i++) {
id.add(columns[i]); values.add(new ResultFileJob(columns[i]));
}
} else if (columns[0].equals("resources_used.mem")) {
for (int i = 1; i < columns.length; i++) {
Number number = NumberFormat.getInstance(Locale.GERMANY).parse(columns[i]);
memoryUsed.add(number.doubleValue());
}
} else if (columns[0].equals("resources_used.walltime")) {
for (int i = 1; i < columns.length; i++) {
wallTime.add(Integer.parseInt(columns[i]));
} }
} else if (columns[0].equals("resources_used.cpupercent")) { } else if (!columns[0].equals("jobs #")){
for (int i = 1; i < columns.length; i++) { for (int i = 1; i < columns.length; i++) {
cpuPercentage.add(Integer.parseInt(columns[i])); ResultFileJob resultFileJob;
resultFileJob = values.get(i - 1);
resultFileJob.setValue(columns[0], columns[i]);
} }
} }
} }
if (null != processedTask ) { if (null != processedTask ) {
for (int i = 0; i < id.size(); i++) { processedTask.jobs.addAll(values);
processedTask.jobs.add(new ResultFileJob(id.get(i), memoryUsed.get(i), wallTime.get(i), cpuPercentage.get(i)));
}
identifiedTasks.add(processedTask); identifiedTasks.add(processedTask);
} }
} catch (IOException e) { } catch (IOException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} catch (ParseException e) { }
log.error(e.getMessage(), e);
}
for (ResultFileTask task : identifiedTasks) { for (ResultFileTask task : identifiedTasks) {
System.out.println("Task " + task.name + " needed " + task.getJobCount() + " jobs and " + task.getAverageMemoryUsage() +" MB of memory in average."); System.out.println("Task " + task.name + " needed " + task.getJobCount() + " jobs and " + task.getAverageMemoryUsage() +" MB of memory in average.");
......
package cz.it4i.fiji.haas_spim_benchmark.core; package cz.it4i.fiji.haas_spim_benchmark.core;
import java.util.HashMap;
import java.util.Map;
public class ResultFileJob { public class ResultFileJob {
String id; String id;
double memoryUsed; Map<String, String> values = new HashMap<>();
int wallTime;
int cpuPercentage; public ResultFileJob(String id) {
public ResultFileJob(String id, double memoryUsed, int wallTime, int cpuPercentage) {
this.id = id; this.id = id;
this.memoryUsed = memoryUsed;
this.wallTime = wallTime; }
this.cpuPercentage = cpuPercentage;
public String getValue(String key) {
return values.get(key);
}
public void setValue(String key, String value) {
values.put(key, value);
} }
} }
\ No newline at end of file
package cz.it4i.fiji.haas_spim_benchmark.core; package cz.it4i.fiji.haas_spim_benchmark.core;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.function.Function;
import java.util.stream.Collector;
import java.util.stream.Collectors;
public class ResultFileTask { public class ResultFileTask {
String name; String name;
LinkedList<ResultFileJob> jobs; LinkedList<ResultFileJob> jobs;
public ResultFileTask(String name) { public ResultFileTask(String name) {
this.name = name; this.name = name;
this.jobs = new LinkedList<ResultFileJob>(); this.jobs = new LinkedList<ResultFileJob>();
} }
public int getJobCount() { public int getJobCount() {
return this.jobs.size(); return this.jobs.size();
} }
public double getAverageMemoryUsage() { public double getAverageMemoryUsage() {
double memoryUsageTotal = 0; return getAverage(str->Double.parseDouble(str), Collectors.averagingDouble(d->d),"resources_used.mem").doubleValue();
for (ResultFileJob job : this.jobs ) {
memoryUsageTotal += job.memoryUsed;
}
return (double)memoryUsageTotal / this.jobs.size();
} }
public double getAverageWallTime() { public double getAverageWallTime() {
double wallTimeTotal = 0; return getAverage("resources_used.walltime");
for (ResultFileJob job : this.jobs ) {
wallTimeTotal += job.wallTime;
}
return (double)wallTimeTotal / this.jobs.size();
} }
public double getAverageCpuPercentage() { public double getAverageCpuPercentage() {
int cpuPercentageTotal = 0; return getAverage("resources_used.cpupercent");
for (ResultFileJob job : this.jobs ) { }
cpuPercentageTotal += job.cpuPercentage;
} private double getAverage(String propertyName) {
return (double)cpuPercentageTotal / this.jobs.size(); return getAverage(str->Integer.parseInt(str), Collectors.averagingInt(i->i),propertyName).doubleValue();
}
private<T> Double getAverage(Function<String, T> valueProvider,Collector<T,?,Double> collector,String propertyName) {
return jobs.stream().map(job -> job.getValue(propertyName)).map(memStr -> valueProvider.apply(memStr))
.collect(collector);
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment