summaryrefslogtreecommitdiff
path: root/dslog/Logdir.java
diff options
context:
space:
mode:
Diffstat (limited to 'dslog/Logdir.java')
-rw-r--r--dslog/Logdir.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/dslog/Logdir.java b/dslog/Logdir.java
new file mode 100644
index 0000000..90661bb
--- /dev/null
+++ b/dslog/Logdir.java
@@ -0,0 +1,77 @@
+package dslog;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.SortedMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+class Logdir {
+ public static class LogSet {
+ public String name;
+ public String dslog = "␕";
+ public String dsevents = "␕";
+ public String pdplog = "␕";
+
+ public String toString() {
+ return name+" "+dslog+"/"+dsevents+"/"+pdplog;
+ }
+ }
+
+ private static LogSet getSet(Map<String, LogSet> sets, String name) {
+ LogSet set;
+ synchronized (sets) {
+ set = sets.get(name);
+ if (set == null) {
+ set = new LogSet();
+ set.name = name;
+ sets.put(name, set);
+ }
+ }
+ return set;
+ }
+ public static SortedMap<String, LogSet> opendir(String dirname) throws IOException {
+ SortedMap<String, LogSet> logsets = new TreeMap<String, LogSet>();
+ List<Exception> errs = new ArrayList<Exception>();
+ Files.list(Paths.get(dirname)).parallel().forEach(filepath->{
+ try {
+ String filename = filepath.getFileName().toString();
+ if (filename.endsWith(".dslog")) {
+ String setname = filename.substring(0, filename.lastIndexOf('.'));
+ try (DslogReader dslog = new DslogReader(Files.newInputStream(filepath))) {
+ getSet(logsets, setname).dslog = ""+dslog.version;
+ } catch (Exception e) {
+ getSet(logsets, setname).pdplog = "☠";
+ throw e;
+ }
+ } else if (filename.endsWith(".dsevents")) {
+ String setname = filename.substring(0, filename.lastIndexOf('.'));
+ try (DseventsReader dsevents = new DseventsReader(Files.newInputStream(filepath))) {
+ getSet(logsets, setname).dsevents = ""+dsevents.version;
+ } catch (Exception e) {
+ getSet(logsets, setname).pdplog = "☠";
+ throw e;
+ }
+ } else if (filename.endsWith(".pdplog")) {
+ String setname = filename.substring(0, filename.lastIndexOf('.'));
+ try (PdplogReader pdplog = new PdplogReader(Files.newInputStream(filepath))) {
+ getSet(logsets, setname).pdplog = ""+pdplog.version;
+ } catch (Exception e) {
+ getSet(logsets, setname).pdplog = "☠";
+ throw e;
+ }
+ }
+ } catch (Exception e) {
+ e = new IOException("Could not read file: "+filepath.toString(), e);
+ synchronized (errs) {
+ errs.add(e);
+ }
+ e.printStackTrace();
+ }
+ });
+ return logsets;
+ }
+}