summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorketsuban <ketsuban@192.168.3.110>2026-08-26 07:04:21 +0000
committerketsuban <ketsuban@192.168.3.110>2026-08-26 07:04:21 +0000
commit3ba8d08b33290eec6f6d40d649739fcfc0303161 (patch)
treedfb6576886fd3e7a1f54ee24ad07c19c2d84b176
parent4468ed06508414e505dec106ff6c0a32a126d1e2 (diff)
downloadkukuri-3ba8d08b33290eec6f6d40d649739fcfc0303161.tar.gz
kukuri-3ba8d08b33290eec6f6d40d649739fcfc0303161.tar.bz2
kukuri-3ba8d08b33290eec6f6d40d649739fcfc0303161.zip
vendor-nabu: add missing Futures/Logging utils
-rwxr-xr-xmodules/vendor-nabu/src/main/java/org/peergos/util/Futures.java28
-rw-r--r--modules/vendor-nabu/src/main/java/org/peergos/util/Logging.java95
2 files changed, 123 insertions, 0 deletions
diff --git a/modules/vendor-nabu/src/main/java/org/peergos/util/Futures.java b/modules/vendor-nabu/src/main/java/org/peergos/util/Futures.java
new file mode 100755
index 0000000..1a264d2
--- /dev/null
+++ b/modules/vendor-nabu/src/main/java/org/peergos/util/Futures.java
@@ -0,0 +1,28 @@
+package org.peergos.util;
+
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+
+public class Futures {
+
+ public static final <T> CompletableFuture<T> of(T val) {
+ return CompletableFuture.completedFuture(val);
+ }
+
+ public static <T> T logAndThrow(Throwable t) {
+ return logAndThrow(t, Optional.empty());
+ }
+
+ private static <T> T logAndThrow(Throwable t, Optional<String> message) {
+ if (message.isPresent())
+ System.out.println(message);
+ t.printStackTrace();
+ throw new RuntimeException(t.getMessage(), t);
+ }
+
+ public static <T> CompletableFuture<T> errored(Throwable t) {
+ CompletableFuture<T> err = new CompletableFuture<>();
+ err.completeExceptionally(t);
+ return err;
+ }
+}
diff --git a/modules/vendor-nabu/src/main/java/org/peergos/util/Logging.java b/modules/vendor-nabu/src/main/java/org/peergos/util/Logging.java
new file mode 100644
index 0000000..df2c45b
--- /dev/null
+++ b/modules/vendor-nabu/src/main/java/org/peergos/util/Logging.java
@@ -0,0 +1,95 @@
+package org.peergos.util;
+
+
+import java.io.*;
+import java.nio.file.Path;
+import java.util.logging.*;
+
+public class Logging {
+ private static final Logger LOG = Logger.getGlobal();
+ private static final String NULL_FORMAT = "NULL_FORMAT";
+ private static final Logger NULL_LOG = Logger.getLogger(NULL_FORMAT);
+
+ private static boolean isInitialised = false;
+ public static Logger LOG() {
+ return LOG;
+ }
+ private static Logger nullLog() {
+ return NULL_LOG;
+ }
+
+ public static synchronized void init(Path folder, boolean logToConsole) {
+ Path logPath = folder.resolve("nabu.%g.log");
+ logPath.toFile().getParentFile().mkdirs();
+ int logLimit = 1024 * 1024;
+ int logCount = 10;
+ boolean logAppend = true;
+ boolean logToFile = true;
+ boolean printLogLocation = true;
+
+ NULL_LOG.setParent(LOG());
+
+ init(logPath, logLimit, logCount, logAppend, logToConsole, logToFile, printLogLocation);
+ }
+
+ public static synchronized void init(Path logPath,
+ int logLimit,
+ int logCount,
+ boolean logAppend,
+ boolean logToConsole,
+ boolean logToFile,
+ boolean printLocation) {
+
+ if (isInitialised)
+ return;
+
+ try {
+ // also logging to stdout?
+ if (! logToConsole)
+ LOG().setUseParentHandlers(false);
+ if (! logToFile)
+ return;
+
+ String logPathS = logPath.toString();
+ FileHandler fileHandler = new FileHandler(logPathS, logLimit, logCount, logAppend);
+ fileHandler.setFormatter(new WithNullFormatter());
+
+ // tell console where we're logging to
+ if (printLocation && logToFile)
+ LOG().info("Logging to "+ logPathS.replace("%g", "0"));
+ nullLog().setParent(LOG());
+
+ Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> {
+ long id = thread.getId();
+ String name = thread.getName();
+ String msg = "Uncaught Exception in thread " + id + ":" + name;
+ LOG().log(Level.SEVERE, msg, throwable);
+ });
+
+ LOG().addHandler(fileHandler);
+ } catch (IOException ioe) {
+ throw new IllegalStateException(ioe.getMessage(), ioe);
+ } finally {
+ isInitialised = true;
+ }
+ }
+
+ private static final Formatter SIMPLE_FORMATTER = new SimpleFormatter();
+ private static class WithNullFormatter extends Formatter {
+
+ /**
+ * If the logger-name is NULL_FORMAT just post the message, otherwise use SimpleFormatter.format.
+ * @param logRecord
+ * @return
+ */
+ @Override
+ public String format(LogRecord logRecord) {
+ boolean noFormatting = NULL_FORMAT.equals(logRecord.getLoggerName());
+
+ if (noFormatting)
+ return logRecord.getMessage() + "\n";
+ return SIMPLE_FORMATTER.format(logRecord);
+ }
+ }
+
+}