From eca2ff09bd62cfdcb395fcc877fda8af71eb85c3 Mon Sep 17 00:00:00 2001 From: Mark Nellemann Date: Tue, 15 Oct 2024 09:58:40 +0200 Subject: [PATCH] Cleanup, add history log back --- build.gradle | 4 ++- gradle.properties | 2 +- src/main/java/biz/nellemann/syslogd/Main.java | 7 ++++- .../nellemann/syslogd/msg/SyslogMessage.java | 1 - .../syslogd/net/LogSocketHandler.java | 11 +++---- .../biz/nellemann/syslogd/net/LokiClient.java | 4 +-- .../biz/nellemann/syslogd/net/TcpServer.java | 5 ++- .../biz/nellemann/syslogd/net/UdpClient.java | 2 +- .../biz/nellemann/syslogd/net/WebServer.java | 31 ++++++++++++++----- .../syslogd/parser/SyslogParserRfc3164.java | 4 +-- .../syslogd/parser/SyslogParserRfc5424.java | 10 +++--- 11 files changed, 49 insertions(+), 32 deletions(-) diff --git a/build.gradle b/build.gradle index 1f8ff78..544b671 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,9 @@ dependencies { implementation 'info.picocli:picocli:4.7.6' implementation 'org.slf4j:slf4j-api:2.0.13' implementation 'org.slf4j:slf4j-simple:2.0.13' - implementation 'ro.pippo:pippo:1.14.0' + implementation 'ro.pippo:pippo-core:1.14.0' + implementation 'ro.pippo:pippo-undertow:1.14.0' + implementation 'ro.pippo:pippo-freemarker:1.14.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.4' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.4' implementation 'org.apache.commons:commons-collections4:4.4' diff --git a/gradle.properties b/gradle.properties index eb2e912..589b1cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ id = syslogd name = syslogd group = biz.nellemann.syslogd -version = 1.4.1 +version = 1.4.2 description = "Syslog Director" diff --git a/src/main/java/biz/nellemann/syslogd/Main.java b/src/main/java/biz/nellemann/syslogd/Main.java index 0e35f08..1ad3f5a 100644 --- a/src/main/java/biz/nellemann/syslogd/Main.java +++ b/src/main/java/biz/nellemann/syslogd/Main.java @@ -24,6 +24,8 @@ import java.util.Locale; import java.util.concurrent.Callable; +import org.apache.commons.collections4.queue.CircularFifoQueue; + import biz.nellemann.syslogd.msg.SyslogMessage; import biz.nellemann.syslogd.net.GelfClient; import biz.nellemann.syslogd.net.LokiClient; @@ -46,6 +48,7 @@ versionProvider = biz.nellemann.syslogd.VersionProvider.class) public class Main implements Callable, LogReceiveListener { + private CircularFifoQueue queue = new CircularFifoQueue<>(500); private final List logForwardListeners = new ArrayList<>(); private SyslogParser syslogParser; private static boolean keepRunning = true; @@ -161,7 +164,7 @@ else if (protocol == InputProtocol.RFC5424) { PippoSettings settings = new PippoSettings(RuntimeMode.PROD); settings.overrideSetting("server.port", monitorPort); settings.overrideSetting("server.contextPath", monitorPath); - WebServer pippoApp = new WebServer(settings); + WebServer pippoApp = new WebServer(settings, queue); logForwardListeners.add(pippoApp.getLogSocketHandler()); Pippo pippo = new Pippo(pippoApp); @@ -170,6 +173,7 @@ else if (protocol == InputProtocol.RFC5424) { } while(keepRunning) { + //noinspection BusyWait Thread.sleep(1000); } @@ -192,6 +196,7 @@ public void onLogEvent(LogReceiveEvent event) { if(!logForwardListeners.isEmpty()) { sendForwardEvent(msg); + queue.add(msg); } if(stdout) { diff --git a/src/main/java/biz/nellemann/syslogd/msg/SyslogMessage.java b/src/main/java/biz/nellemann/syslogd/msg/SyslogMessage.java index 142e87a..326f40c 100644 --- a/src/main/java/biz/nellemann/syslogd/msg/SyslogMessage.java +++ b/src/main/java/biz/nellemann/syslogd/msg/SyslogMessage.java @@ -20,7 +20,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.lang.reflect.Member; import java.time.Instant; @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/src/main/java/biz/nellemann/syslogd/net/LogSocketHandler.java b/src/main/java/biz/nellemann/syslogd/net/LogSocketHandler.java index 8be97e9..a630c14 100644 --- a/src/main/java/biz/nellemann/syslogd/net/LogSocketHandler.java +++ b/src/main/java/biz/nellemann/syslogd/net/LogSocketHandler.java @@ -22,37 +22,36 @@ public class LogSocketHandler implements WebSocketHandler, LogForwardListener { @Override public void onMessage(WebSocketContext webSocketContext, String message) { log.debug("onMessage() - {}", message); - try { - webSocketContext.sendMessage(message); - } catch (IOException e) { - log.warn("onMessage() - {}", message); - } } + @Override public void onMessage(WebSocketContext webSocketContext, byte[] message) { log.debug("onMessage()"); - System.out.println("TestWebSocket.onMessage"); } + @Override public void onOpen(WebSocketContext webSocketContext) { log.debug("onOpen()"); webSocketContextList.add(webSocketContext); } + @Override public void onClose(WebSocketContext webSocketContext, int closeCode, String message) { log.debug("onClose()"); webSocketContextList.remove(webSocketContext); } + @Override public void onTimeout(WebSocketContext webSocketContext) { log.debug("onTimeout()"); webSocketContextList.remove(webSocketContext); } + @Override public void onError(WebSocketContext webSocketContext, Throwable t) { log.debug("onError()"); diff --git a/src/main/java/biz/nellemann/syslogd/net/LokiClient.java b/src/main/java/biz/nellemann/syslogd/net/LokiClient.java index 5f8cf61..e61f7dc 100644 --- a/src/main/java/biz/nellemann/syslogd/net/LokiClient.java +++ b/src/main/java/biz/nellemann/syslogd/net/LokiClient.java @@ -66,12 +66,12 @@ public void send(String msg) throws MalformedURLException { int responseCode = con.getResponseCode(); try (InputStream ignored = con.getInputStream()) { if(responseCode != 204) { - log.warn("send() - response: " + responseCode); + log.warn("send() - response: {}", responseCode); } } } catch (IOException e) { - log.error("send() - error: " + e.getMessage()); + log.error("send() - error: {}", e.getMessage()); } finally { if(con != null) { con.disconnect(); diff --git a/src/main/java/biz/nellemann/syslogd/net/TcpServer.java b/src/main/java/biz/nellemann/syslogd/net/TcpServer.java index 719b084..659de1e 100644 --- a/src/main/java/biz/nellemann/syslogd/net/TcpServer.java +++ b/src/main/java/biz/nellemann/syslogd/net/TcpServer.java @@ -37,17 +37,16 @@ public class TcpServer extends Thread { private final static Logger log = LoggerFactory.getLogger(TcpServer.class); private final int port; - private ServerSocket serverSocket; protected boolean listen = true; public TcpServer(int port) { this.port = port; } + @Override public void run() { - try { - serverSocket = new ServerSocket(port); + try(ServerSocket serverSocket = new ServerSocket(port)) { while (listen) new ClientHandler(serverSocket.accept(), eventListeners).start(); } catch (IOException e) { diff --git a/src/main/java/biz/nellemann/syslogd/net/UdpClient.java b/src/main/java/biz/nellemann/syslogd/net/UdpClient.java index ea6efa0..c55a9a3 100644 --- a/src/main/java/biz/nellemann/syslogd/net/UdpClient.java +++ b/src/main/java/biz/nellemann/syslogd/net/UdpClient.java @@ -43,7 +43,7 @@ public void send(String msg) { try { socket.send(packet); } catch (IOException e) { - log.error("send() - Could not send packet: " + e.getMessage()); + log.error("send() - Could not send packet: {}", e.getMessage()); } } diff --git a/src/main/java/biz/nellemann/syslogd/net/WebServer.java b/src/main/java/biz/nellemann/syslogd/net/WebServer.java index 7bf3e92..0e4d77c 100644 --- a/src/main/java/biz/nellemann/syslogd/net/WebServer.java +++ b/src/main/java/biz/nellemann/syslogd/net/WebServer.java @@ -1,23 +1,30 @@ package biz.nellemann.syslogd.net; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.Collections; +import java.util.stream.Collectors; + +import org.apache.commons.collections4.queue.CircularFifoQueue; + +import biz.nellemann.syslogd.SyslogPrinter; +import biz.nellemann.syslogd.msg.SyslogMessage; import ro.pippo.core.Application; import ro.pippo.core.PippoSettings; public class WebServer extends Application { - private final static Logger log = LoggerFactory.getLogger(WebServer.class); private final LogSocketHandler logSocketHandler = new LogSocketHandler(); + private CircularFifoQueue queue; - public LogSocketHandler getLogSocketHandler() { - return logSocketHandler; + public WebServer(PippoSettings settings) { + super((settings)); } - public WebServer(PippoSettings settings) { + public WebServer(PippoSettings settings, CircularFifoQueue q) { super((settings)); + queue = q; } + @Override protected void onInit() { @@ -25,14 +32,22 @@ protected void onInit() { GET("/ping", routeContext -> routeContext.send("pong")); - /* GET("/log", routeContext -> routeContext.text().negotiateContentType().send( queue.stream().sorted(Collections.reverseOrder()).map(SyslogPrinter::toHtml).collect(Collectors.joining()) - ));*/ + )); addWebSocket("/ws/log", logSocketHandler); } + public LogSocketHandler getLogSocketHandler() { + return logSocketHandler; + } + + + public void setQueue(CircularFifoQueue q) { + this.queue = q; + } + } diff --git a/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc3164.java b/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc3164.java index 8e1a618..43f0155 100644 --- a/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc3164.java +++ b/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc3164.java @@ -47,7 +47,7 @@ public class SyslogParserRfc3164 extends SyslogParser { @Override public SyslogMessage parse(final String input) throws NumberFormatException { - log.debug("parseRfc3164() " + input); + log.debug("parseRfc3164() {}", input); Matcher matcher = pattern.matcher(input); if(!matcher.find()) { @@ -105,7 +105,7 @@ public Instant parseTimestamp(String dateString) { log.debug("parseTimestamp()", e); } - log.warn("parseTimestamp() - Could not parse timestamp: " + dateString); + log.warn("parseTimestamp() - Could not parse timestamp: {}", dateString); return Instant.now(); } diff --git a/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc5424.java b/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc5424.java index 08c156d..6b33d58 100644 --- a/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc5424.java +++ b/src/main/java/biz/nellemann/syslogd/parser/SyslogParserRfc5424.java @@ -15,8 +15,6 @@ */ package biz.nellemann.syslogd.parser; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.time.Instant; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -49,12 +47,12 @@ public class SyslogParserRfc5424 extends SyslogParser { @Override public SyslogMessage parse(final String input) throws NumberFormatException { - log.debug("parseRfc5424() " + input); + log.debug("parseRfc5424() {}", input); Matcher matcher = pattern.matcher(input); boolean matchFound = matcher.find(); if(!matchFound) { - log.debug("parseRfc5424() - Match not found in: " + input); + log.debug("parseRfc5424() - Match not found in: {}", input); System.err.println("!" + input); return null; } @@ -120,11 +118,11 @@ public Instant parseTimestamp(String dateString) { return Instant.from(temporalAccessor); } catch (DateTimeParseException e) { - log.debug("parseTimestamp() " + e.getMessage()); + log.debug("parseTimestamp() {}", e.getMessage()); } } - log.warn("parseTimestamp() - Could not parse timestamp: " + dateString); + log.warn("parseTimestamp() - Could not parse timestamp: {}", dateString); return Instant.now(); }