-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4e82d45
commit 27d482d
Showing
8 changed files
with
314 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
64 changes: 64 additions & 0 deletions
64
concoction-lib/src/main/java/info/mmpa/concoction/result/ArchiveScanResults.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package info.mmpa.concoction.result; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import com.fasterxml.jackson.annotation.JsonInclude; | ||
import com.fasterxml.jackson.annotation.JsonInclude.Include; | ||
|
||
public class ArchiveScanResults { | ||
public boolean errorReadingArchive; | ||
@JsonInclude(value = Include.NON_EMPTY, content = Include.NON_NULL) | ||
public final Map<String, ArchiveScanResults> recursiveArchiveScanResults; | ||
public final Map<String, FileScanResults> fileScanResults; | ||
|
||
public ArchiveScanResults(boolean errorReadingArchive, Map<String, ArchiveScanResults> recursiveArchiveScanResults, Map<String, FileScanResults> fileScanResults) { | ||
this.errorReadingArchive = errorReadingArchive; | ||
this.recursiveArchiveScanResults = recursiveArchiveScanResults; | ||
this.fileScanResults = fileScanResults; | ||
} | ||
|
||
public ArchiveScanResults(Map<String, ArchiveScanResults> recursiveArchiveScanResults, Map<String, FileScanResults> fileScanResults) { | ||
this(false, recursiveArchiveScanResults, fileScanResults); | ||
} | ||
|
||
public ArchiveScanResults(boolean errorReadingArchive, Map<String, FileScanResults> fileScanResults) { | ||
this(errorReadingArchive, new HashMap<>(), fileScanResults); | ||
} | ||
|
||
public ArchiveScanResults(Map<String, FileScanResults> fileScanResults) { | ||
this(false, fileScanResults); | ||
} | ||
|
||
public ArchiveScanResults() { | ||
this(new HashMap<>()); | ||
} | ||
|
||
public ArchiveScanResults add(String jij, ArchiveScanResults recursiveRes) { | ||
recursiveArchiveScanResults.merge(jij, recursiveRes, ArchiveScanResults::add); | ||
return this; | ||
} | ||
|
||
public ArchiveScanResults addRec(Map<String, ArchiveScanResults> recursiveRes) { | ||
recursiveRes.forEach(this::add); | ||
return this; | ||
} | ||
|
||
public ArchiveScanResults add(String fileName, FileScanResults res) { | ||
fileScanResults.merge(fileName, res, FileScanResults::add); | ||
return this; | ||
} | ||
|
||
public ArchiveScanResults add(Map<String, FileScanResults> res) { | ||
res.forEach(this::add); | ||
return this; | ||
} | ||
|
||
public ArchiveScanResults add(ArchiveScanResults archRes) { | ||
if (archRes.errorReadingArchive) { | ||
errorReadingArchive = true; | ||
} | ||
|
||
return addRec(archRes.recursiveArchiveScanResults).add(archRes.fileScanResults); | ||
} | ||
} |
58 changes: 58 additions & 0 deletions
58
concoction-lib/src/main/java/info/mmpa/concoction/result/CheckResults.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package info.mmpa.concoction.result; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import com.fasterxml.jackson.annotation.JsonAnyGetter; | ||
import com.fasterxml.jackson.annotation.JsonAnySetter; | ||
import com.fasterxml.jackson.annotation.JsonIgnore; | ||
|
||
public class CheckResults { | ||
@JsonIgnore | ||
public final Map<String, Integer> checkResultsMap; | ||
|
||
@JsonAnyGetter | ||
private Map<String, Integer> getCheckResultsMap() { | ||
return checkResultsMap; | ||
} | ||
|
||
@JsonAnySetter | ||
private void addToCheckResultsMap(String str, Integer integer) { | ||
checkResultsMap.put(str, integer); | ||
} | ||
|
||
public CheckResults(Map<String, Integer> checkResultsMap) { | ||
this.checkResultsMap = checkResultsMap; | ||
} | ||
|
||
public CheckResults(String result, int amount) { | ||
this(new HashMap<>()); | ||
checkResultsMap.put(result, amount); | ||
} | ||
|
||
public CheckResults(String result) { | ||
this(result, 1); | ||
} | ||
|
||
public CheckResults() { | ||
this(new HashMap<>()); | ||
} | ||
|
||
public CheckResults add(String result, int amount) { | ||
checkResultsMap.merge(result, amount, Integer::sum); | ||
return this; | ||
} | ||
|
||
public CheckResults add(String result) { | ||
return add(result, 1); | ||
} | ||
|
||
public CheckResults add(Map<String, Integer> results) { | ||
results.forEach(this::add); | ||
return this; | ||
} | ||
|
||
public CheckResults add(CheckResults result) { | ||
return add(result.checkResultsMap); | ||
} | ||
} |
55 changes: 55 additions & 0 deletions
55
concoction-lib/src/main/java/info/mmpa/concoction/result/FileScanResults.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package info.mmpa.concoction.result; | ||
|
||
import java.util.EnumMap; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
public class FileScanResults { | ||
public boolean errorReadingFile; | ||
public final Map<TestResultLevel, Map<String, CheckResults>> scanResultGroups; | ||
|
||
public FileScanResults(boolean errorReadingFile, Map<TestResultLevel, Map<String, CheckResults>> scanResultGroups) { | ||
this.errorReadingFile = errorReadingFile; | ||
this.scanResultGroups = scanResultGroups; | ||
} | ||
|
||
public FileScanResults(boolean errorReadingFile) { | ||
this(errorReadingFile, new EnumMap<>(TestResultLevel.class)); | ||
} | ||
|
||
public FileScanResults() { | ||
this(false); | ||
} | ||
|
||
public FileScanResults add(TestResultLevel level, Map<String, CheckResults> res) { | ||
scanResultGroups.merge(level, res, (existing, toAdd) -> { toAdd.forEach((group, newRes) -> existing.merge(group, newRes, CheckResults::add)); return existing; }); | ||
return this; | ||
} | ||
|
||
public FileScanResults add(TestResultLevel level, String group, CheckResults res) { | ||
scanResultGroups.computeIfAbsent(level, k -> new HashMap<>()).merge(group, res, CheckResults::add); | ||
return this; | ||
} | ||
|
||
public FileScanResults add(TestResultLevel level, String group, String reason, int amount) { | ||
scanResultGroups.computeIfAbsent(level, k -> new HashMap<>()).computeIfAbsent(group, k -> new CheckResults()).add(reason, amount); | ||
return this; | ||
} | ||
|
||
public FileScanResults add(TestResultLevel level, String group, String reason) { | ||
return add(level, group, reason, 1); | ||
} | ||
|
||
public FileScanResults add(Map<TestResultLevel, Map<String, CheckResults>> groups) { | ||
groups.forEach(this::add); | ||
return this; | ||
} | ||
|
||
public FileScanResults add(FileScanResults res) { | ||
if (res.errorReadingFile) { | ||
errorReadingFile = true; | ||
} | ||
|
||
return add(res.scanResultGroups); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
concoction-lib/src/main/java/info/mmpa/concoction/result/TestResultLevel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package info.mmpa.concoction.result; | ||
|
||
public enum TestResultLevel { | ||
// TODO Better names | ||
VIRUS(), | ||
STRONG_SUS(), | ||
SUS(), | ||
BENIGN(), | ||
VERY_BENIGN(); | ||
} |
73 changes: 73 additions & 0 deletions
73
concoction-lib/src/main/java/info/mmpa/concoction/result/printer/HumanReadablePrinter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package info.mmpa.concoction.result.printer; | ||
|
||
import java.io.PrintWriter; | ||
import java.util.Map; | ||
import java.util.Map.Entry; | ||
|
||
import info.mmpa.concoction.result.ArchiveScanResults; | ||
import info.mmpa.concoction.result.CheckResults; | ||
import info.mmpa.concoction.result.FileScanResults; | ||
import info.mmpa.concoction.result.TestResultLevel; | ||
|
||
public class HumanReadablePrinter extends Printer { | ||
|
||
public HumanReadablePrinter(Map<String, ArchiveScanResults> scanResults) { | ||
super(scanResults); | ||
} | ||
|
||
public HumanReadablePrinter(String archiveName, ArchiveScanResults scanResult) { | ||
super(archiveName, scanResult); | ||
} | ||
|
||
private void print(PrintWriter writer, String archiveName, ArchiveScanResults archiveResults, String formatBase, boolean first) { | ||
writer.printf(formatBase, (first ? "Results for archive " : "Results for bundled archive ") + archiveName); | ||
formatBase = " " + formatBase; | ||
|
||
if (archiveResults.errorReadingArchive) { | ||
writer.printf(formatBase, "Error while reading archive " + archiveName + ", scan results may be missing"); | ||
} | ||
|
||
// TODO Better formatting code | ||
final String indentOne = " " + formatBase; | ||
final String indentTwo = " " + indentOne; | ||
final String indentThree = " " + indentTwo; | ||
final String indentFour = " " + indentThree; | ||
archiveResults.recursiveArchiveScanResults.forEach((e, f) -> print(writer, e, f, indentOne, false)); | ||
boolean firstLog = true; | ||
|
||
for (final Entry<String, FileScanResults> fileResultGroup : archiveResults.fileScanResults.entrySet()) { | ||
boolean firstLogForFile = true; | ||
|
||
for (final Entry<TestResultLevel, Map<String, CheckResults>> scanGroup : fileResultGroup.getValue().scanResultGroups.entrySet()) { | ||
final TestResultLevel groupLevel = scanGroup.getKey(); | ||
|
||
if (firstLog) { | ||
writer.printf(formatBase, "Detected results for archive " + archiveName); | ||
firstLog = false; | ||
} | ||
|
||
if (firstLogForFile) { | ||
writer.printf(indentOne, "Detected results for file " + fileResultGroup.getKey()); | ||
firstLogForFile = false; | ||
} | ||
|
||
writer.printf(indentTwo, "Result level " + groupLevel); | ||
final Map<String, CheckResults> resultMap = scanGroup.getValue(); | ||
|
||
for (final Entry<String, CheckResults> checkEntry : resultMap.entrySet()) { | ||
writer.printf(indentThree, "Result found by checker " + checkEntry.getKey()); | ||
|
||
for (final Entry<String, Integer> scanEntry : checkEntry.getValue().checkResultsMap.entrySet()) { | ||
writer.printf(indentFour, "Detected " + scanEntry.getValue() + " time(s): " + scanEntry.getKey()); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
@Override | ||
public void print(PrintWriter writer) { | ||
scanResults.forEach((archiveName, archiveResults) -> print(writer, archiveName, archiveResults, "- %s%n", true)); | ||
} | ||
|
||
} |
31 changes: 31 additions & 0 deletions
31
concoction-lib/src/main/java/info/mmpa/concoction/result/printer/JSONPrinter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package info.mmpa.concoction.result.printer; | ||
|
||
import java.io.IOException; | ||
import java.io.PrintWriter; | ||
import java.util.Map; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import info.mmpa.concoction.result.ArchiveScanResults; | ||
|
||
public class JSONPrinter extends Printer { | ||
|
||
public JSONPrinter(Map<String, ArchiveScanResults> scanResults) { | ||
super(scanResults); | ||
} | ||
|
||
public JSONPrinter(String archiveName, ArchiveScanResults scanResult) { | ||
super(archiveName, scanResult); | ||
} | ||
|
||
@Override | ||
public void print(PrintWriter writer) { | ||
try { | ||
final String jsonString = new ObjectMapper().writeValueAsString(scanResults); | ||
writer.write(jsonString); | ||
} catch (final IOException e) { | ||
// TODO Handle errors more gracefully | ||
e.printStackTrace(); | ||
} | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
concoction-lib/src/main/java/info/mmpa/concoction/result/printer/Printer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package info.mmpa.concoction.result.printer; | ||
|
||
import java.io.PrintWriter; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import info.mmpa.concoction.result.ArchiveScanResults; | ||
|
||
public abstract class Printer { | ||
protected final Map<String, ArchiveScanResults> scanResults; | ||
|
||
protected Printer(Map<String, ArchiveScanResults> scanResults) { | ||
this.scanResults = scanResults; | ||
} | ||
|
||
protected Printer(String archiveName, ArchiveScanResults scanResult) { | ||
this(new HashMap<>()); | ||
scanResults.put(archiveName, scanResult); | ||
} | ||
|
||
public abstract void print(PrintWriter writer); | ||
} |