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