/*
* Copyright 2013-2014 eXascale Infolab, University of Fribourg. All rights reserved.
*/
package org.apache.hadoop.hadaps;
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
class Csv implements Closeable {
private final BufferedWriter csv;
Csv(String filename) throws IOException {
if (filename == null) throw new IllegalArgumentException();
Path file = Paths.get(filename);
csv = Files.newBufferedWriter(file, Charset.defaultCharset());
}
void write(List<Statistic> statistics) throws IOException {
if (statistics == null) throw new IllegalArgumentException();
Collections.sort(statistics);
long totalDuration = 0;
int iterationCount = 0;
Statistic prevStatistic = null;
for (Statistic statistic : statistics) {
if (prevStatistic == null) {
prevStatistic = statistic;
}
// Write average of iteration
if (!statistic.getFilename().equals(prevStatistic.getFilename())) {
write(new Statistic(
0,
prevStatistic.getFilename(),
prevStatistic.getReplication(),
prevStatistic.getSize(),
totalDuration / iterationCount));
totalDuration = 0;
iterationCount = 0;
}
write(statistic);
totalDuration += statistic.getDuration();
++iterationCount;
prevStatistic = statistic;
}
// Write average of last iteration
if (prevStatistic != null) {
write(new Statistic(
0,
prevStatistic.getFilename(),
prevStatistic.getReplication(),
prevStatistic.getSize(),
totalDuration / iterationCount));
}
}
private void write(Statistic statistic) throws IOException {
assert statistic != null;
csv.write(Integer.toString(statistic.getIteration()));
csv.write(";");
csv.write(statistic.getFilename());
csv.write(";");
csv.write(Short.toString(statistic.getReplication()));
csv.write(";");
csv.write(Long.toString(statistic.getSize()));
csv.write(";");
csv.write(Utils.getPrettyTime(statistic.getDuration()));
csv.newLine();
}
@Override
public void close() throws IOException {
csv.close();
}
}