diff options
| author | ketsuban <ketsuban@192.168.3.110> | 2026-08-26 07:04:21 +0000 |
|---|---|---|
| committer | ketsuban <ketsuban@192.168.3.110> | 2026-08-26 07:04:21 +0000 |
| commit | 3ba8d08b33290eec6f6d40d649739fcfc0303161 (patch) | |
| tree | dfb6576886fd3e7a1f54ee24ad07c19c2d84b176 | |
| parent | 4468ed06508414e505dec106ff6c0a32a126d1e2 (diff) | |
| download | kukuri-3ba8d08b33290eec6f6d40d649739fcfc0303161.tar.gz kukuri-3ba8d08b33290eec6f6d40d649739fcfc0303161.tar.bz2 kukuri-3ba8d08b33290eec6f6d40d649739fcfc0303161.zip | |
vendor-nabu: add missing Futures/Logging utils
| -rwxr-xr-x | modules/vendor-nabu/src/main/java/org/peergos/util/Futures.java | 28 | ||||
| -rw-r--r-- | modules/vendor-nabu/src/main/java/org/peergos/util/Logging.java | 95 |
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); + } + } + +} |
