From ea035dd4a1a8ec79135d71cb98346a44613c3561 Mon Sep 17 00:00:00 2001 From: Christopher Vagnetoft Date: Sun, 7 Sep 2025 17:22:36 +0200 Subject: [PATCH] Logging cleanup, prune controller stub --- src/Configuration.php | 5 ++++- src/Controller/LogController.php | 33 ++++++++++++++++++++++++++++++++ src/LogDbDaemon.php | 13 +++++++++---- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/Configuration.php b/src/Configuration.php index 27a0a13..ba2a89d 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -14,13 +14,16 @@ class Configuration public bool $help = false; + public bool $verbose = false; + public static function build(): Configuration { $config = new Configuration(); - $opts = getopt("hl:d:u:", [ "help","listen:","data:","udp:"]); + $opts = getopt("hl:d:u:v", [ "help","listen:","data:","udp:"]); $config->help = isset($opts['h']) || isset($opts['help']); + $config->verbose = isset($opts['v']); $config->listenAddress = (isset($opts['l']) ? $opts['l'] : (isset($opts['listen']) ? $opts['listen'] : (getenv("LOGDB_LISTEN") ?: $config->listenAddress))); diff --git a/src/Controller/LogController.php b/src/Controller/LogController.php index 6abf4f6..e70d9a7 100644 --- a/src/Controller/LogController.php +++ b/src/Controller/LogController.php @@ -129,4 +129,37 @@ class LogController return $deferred->promise(); } + #[Route(path:'/api/logdb/v1/events/prune', methods:["POST"])] + public function pruneEvents(ServerRequestInterface $request) + { + $json = json_decode($request->getBody()->getContent()); + // pruning + $maxAge = $json->maxAge ?? null; + // selection + $scope = $json->scope ?? null; + $origin = $json->origin ?? null; + $level = $json->level ?? null; + + if (!$maxAge || !($scope || $origin || $level)) { + return Response::json([ 'error' => 'Must specify maxAge or scope|origin|level' ]); + } + + $deferred = new Deferred(); + $this->commandBus->execute("log.prune", [ + 'maxAge' => $maxAge, + 'filter' => [ + 'scope' => $scope, + 'origin' => $origin, + 'level' => $level, + ], + ])->then( + function ($result) use ($deferred) { + $deferred->resolve(Response::json($result)); + }, function (\Throwable $t) use ($deferred) { + $deferred->resolve(Response::json(['error'=>$e->getMessage()])->withStatus(500)); + } + ); + return $deferred; + } + } diff --git a/src/LogDbDaemon.php b/src/LogDbDaemon.php index 5254a49..e7a3495 100644 --- a/src/LogDbDaemon.php +++ b/src/LogDbDaemon.php @@ -48,7 +48,8 @@ class LogDbDaemon implements CommandResolverInterface ) { $this->logger = new Logger("main"); - $this->logger->pushHandler(new class implements HandlerInterface { + $this->logger->pushHandler(new class($this->config->verbose) implements HandlerInterface { + public function __construct(private readonly bool $verbose) {} public function isHandling(LogRecord $record): bool { return true; } @@ -168,13 +169,17 @@ class LogDbDaemon implements CommandResolverInterface $users = new UserManager($this->db); - $httpd = new HttpServer( - new LoggingMiddleware($this->logger->withName("http")), + $middleware = [ new ErrorHandlingMiddleware(true), // new SecurityMiddleware($users), new RoutingMiddleware($routes), new RequestHandler() - ); + ]; + if ($this->config->verbose) { + array_unshift($middleware, new LoggingMiddleware($this->logger->withName("http"))); + } + $httpd = new HttpServer(...$middleware); + $httpd->listen(new SocketServer($this->config->listenAddress)); $this->logger->info("Listening for HTTP connections on {$this->config->listenAddress}");