Skip to content
Snippets Groups Projects
Commit df0d2403 authored by Florian Angerer's avatar Florian Angerer
Browse files

[GR-7747] Add more logging to pkg test analyzer.

PullRequest: fastr/1321
parents d15b65b4 4e718e5d
No related branches found
No related tags found
No related merge requests found
......@@ -30,6 +30,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.oracle.truffle.r.test.packages.analyzer.Problem;
......@@ -40,6 +41,8 @@ import com.oracle.truffle.r.test.packages.analyzer.parser.LogFileParseException;
public abstract class AbstractDumper {
private static final Logger LOGGER = Logger.getLogger(AbstractDumper.class.getName());
public abstract void dump(Collection<RPackage> problems, Collection<LogFileParseException> collection);
protected Map<Class<? extends Problem>, List<Problem>> groupByType(Collection<Problem> problems) {
......@@ -66,17 +69,20 @@ public abstract class AbstractDumper {
}
protected static Collection<Problem> eliminateRedundantProblems(Collection<Problem> problems) {
// build detector hierarchy
LOGGER.info("Building detector hierarchy.");
Set<Detector<?>> collect = problems.stream().map(p -> p.getDetector()).collect(Collectors.toSet());
Map<Detector<?>, Collection<Detector<?>>> hierarchy = new HashMap<>();
for (Detector<?> detector : collect) {
hierarchy.put(detector, collectChildrenRecursive(detector));
}
LOGGER.info("Grouping problems by detector.");
Map<Detector<?>, List<Problem>> collect2 = problems.stream().collect(Collectors.groupingBy(p -> p.getDetector()));
LOGGER.info("Eliminating redundnat problems.");
List<Problem> cleaned = problems.stream().filter(p -> isIncluded(p, hierarchy, collect2)).collect(Collectors.toList());
assert new HashSet<>(cleaned).size() == cleaned.size();
LOGGER.info(String.format("Eliminated %d redundant problems.", (problems.size() - cleaned.size())));
return cleaned;
}
......
......@@ -36,6 +36,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import com.oracle.truffle.r.test.packages.analyzer.Location;
......@@ -47,6 +48,8 @@ import com.oracle.truffle.r.test.packages.analyzer.parser.LogFileParseException;
public class HTMLDumper extends AbstractDumper {
private static final Logger LOGGER = Logger.getLogger(HTMLDumper.class.getName());
private static final String TITLE = "FastR Package Test Dashboard";
private Path destDir;
......@@ -75,7 +78,7 @@ public class HTMLDumper extends AbstractDumper {
createAndCheckOutDir();
dumpIndexFile(packages, parseErrors);
} catch (IOException e) {
e.printStackTrace();
LOGGER.severe("Error writing HTML output: " + e.getMessage());
}
}
......@@ -94,6 +97,7 @@ public class HTMLDumper extends AbstractDumper {
Tag pkgDistributionTable = generateTestRunDistributionTable(indexFile, builder, groupByTestRuns(allTestRuns, allProblems));
Tag distrinctProblemDistributionTable = generateDistinctProblemDistribution(builder, groupByProblemContent(allProblems));
LOGGER.info("Writing index file.");
builder.html(builder.head(builder.title(TITLE)), builder.body(
builder.h1(TITLE),
builder.p("Total number of analysis candidates: " + allTestRuns.size()),
......@@ -103,7 +107,7 @@ public class HTMLDumper extends AbstractDumper {
builder.h2("Distinct Problem Distribution"), distrinctProblemDistributionTable));
builder.dump();
} catch (IOException e) {
e.printStackTrace();
LOGGER.severe("Error during generation of HTML output: " + e.getMessage());
}
}
......@@ -118,16 +122,19 @@ public class HTMLDumper extends AbstractDumper {
}
private static Collection<Problem> collectAllProblems(Collection<RPackage> pkgs) {
LOGGER.info(String.format("Collecting problems for %d test runs.", pkgs.size()));
Collection<Problem> problems = new ArrayList<>();
for (RPackage pkg : pkgs) {
for (RPackageTestRun run : pkg.getTestRuns()) {
problems.addAll(run.getProblems());
}
}
LOGGER.info(String.format("Collected %d problems.", problems.size()));
return problems;
}
private Tag generateTestRunDistributionTable(Path indexFile, HTMLBuilder builder, Map<RPackageTestRun, List<Problem>> groupByTestRun) {
LOGGER.info("Generating test run distribution table.");
List<RPackageTestRun> collect = groupByTestRun.keySet().stream().sorted((a, b) -> Integer.compare(groupByTestRun.get(b).size(), groupByTestRun.get(a).size())).collect(Collectors.toList());
Tag table = builder.table(builder.tr(
......@@ -162,6 +169,7 @@ public class HTMLDumper extends AbstractDumper {
}
private Tag generateDistinctProblemDistribution(HTMLBuilder builder, Map<ProblemContent, List<Problem>> groupByPkg) {
LOGGER.info("Generating distinct problem distribution table.");
List<ProblemContent> collect = groupByPkg.keySet().stream().sorted((a, b) -> Integer.compare(groupByPkg.get(b).size(), groupByPkg.get(a).size())).collect(Collectors.toList());
Tag table = builder.table(builder.tr(
......@@ -186,6 +194,7 @@ public class HTMLDumper extends AbstractDumper {
}
private Tag generateTypeDistributionTable(HTMLBuilder builder, Map<Class<? extends Problem>, List<Problem>> groupByType) {
LOGGER.info("Generating problem type distribution table.");
List<Class<? extends Problem>> collect = groupByType.keySet().stream().sorted((a, b) -> Integer.compare(groupByType.get(b).size(), groupByType.get(a).size())).collect(Collectors.toList());
Tag table = builder.table();
......
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