From 452d1186ade12f303dabf794d080c276d4754cc0 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 14:28:43 +0100 Subject: [PATCH 01/20] Added the McLogCleaner-Plugin --- README.md | 1 + mclogcleaner/README.md | 15 ++ mclogcleaner/config/logcleaner.php | 5 + mclogcleaner/plugin.json | 15 ++ mclogcleaner/src/Enums/CheckEgg.php | 27 +++ .../Components/Actions/McLogCleanAction.php | 156 ++++++++++++++++++ mclogcleaner/src/McLogCleanerPlugin.php | 18 ++ .../Providers/McLogCleanerPluginProvider.php | 18 ++ 8 files changed, 255 insertions(+) create mode 100644 mclogcleaner/README.md create mode 100644 mclogcleaner/config/logcleaner.php create mode 100644 mclogcleaner/plugin.json create mode 100644 mclogcleaner/src/Enums/CheckEgg.php create mode 100644 mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php create mode 100644 mclogcleaner/src/McLogCleanerPlugin.php create mode 100644 mclogcleaner/src/Providers/McLogCleanerPluginProvider.php diff --git a/README.md b/README.md index dfe5c2c3..443685fc 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ npm i -g yarn - [Billing](/billing) - Allows users to purchase servers via Stripe - **Proof of Concept - Do absolutely NOT use in production!** - [Generic OIDC Providers](/generic-oidc-providers) - Create generic OIDC providers for authentication - [Legal Pages](/legal-pages) - Adds legal pages (Imprint, Privacy Policy, ToS) to the panel +- [McLogCleaner](/mclogcleaner) - Delete old logs with ease - [MCLogs Uploader](/mclogs-uploader) - Upload console logs to mclo.gs - [Minecraft Modrinth](/minecraft-modrinth) - Download Minecraft mods & plugins from Modrinth - [PasteFox Share](/pastefox-share) - Share console logs via pastefox.com diff --git a/mclogcleaner/README.md b/mclogcleaner/README.md new file mode 100644 index 00000000..b1607e61 --- /dev/null +++ b/mclogcleaner/README.md @@ -0,0 +1,15 @@ +## McLogCleaner + +McLogCleaner automatically deletes all `.log.gz` files from the server’s `logs` folder. + +> **Note:** `latest.yml` will always remain intact and is never deleted. + +### Usage +To use this plugin, add `mclogcleaner` as a feature to the egg you want to run it with. + +### Log Deletion Options +When you click **Delete logs**, a dropdown menu appears where you can choose the **minimum age (in days)** of log files to delete: +- Logs older than 7 days +- Logs older than 30 days +- All logs (regardless of age) +- A custom age in days diff --git a/mclogcleaner/config/logcleaner.php b/mclogcleaner/config/logcleaner.php new file mode 100644 index 00000000..db4cefdc --- /dev/null +++ b/mclogcleaner/config/logcleaner.php @@ -0,0 +1,5 @@ +loadMissing('egg'); + + $features = $server->egg->features ?? []; + + if (in_array(self::Check->value, $features, true)) { + return self::Check; + } + + return null; + } + + public static function serverSupportsLogCleaner(Server $server): bool + { + return self::fromServer($server) !== null; + } +} diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php new file mode 100644 index 00000000..2f00a9a7 --- /dev/null +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -0,0 +1,156 @@ +hidden(function () { + $server = Filament::getTenant(); + return !CheckEgg::serverSupportsLogCleaner($server); + }); + + $this->label('Delete logs'); + $this->icon('tabler-trash'); + $this->color('danger'); + $this->size(Size::ExtraLarge); + + $this->requiresConfirmation() + ->modalHeading('Delete logs') + ->modalDescription('Choose which logs should be deleted.') + ->modalSubmitActionLabel('Delete logs') + ->form([ + Select::make('mode') + ->label('Delete logs') + ->options([ + 7 => 'Older than 7 days', + 30 => 'Older than 30 days', + -1 => 'Delete all logs', + 'custom' => 'Custom (days)', + ]) + ->default(7) + ->required() + ->reactive(), + + TextInput::make('custom_days') + ->label('Delete logs older than (days)') + ->numeric() + ->minValue(1) + ->maxValue(365) + ->placeholder('e.g. 14') + ->required(fn ($get) => $get('mode') === 'custom') + ->visible(fn ($get) => $get('mode') === 'custom'), + ]); + + $this->action(function (array $data) { + $server = Filament::getTenant(); + + $mode = $data['mode']; + if ($mode !== 'custom') { + $mode = (int) $mode; + } + + if ($mode === 'custom') { + $days = max(1, (int) $data['custom_days']); + } elseif ($mode === -1) { + $days = 0; + } else { + $days = $mode; + } + + try { + $files = Http::daemon($server->node) + ->get("/api/servers/{$server->uuid}/files/list-directory", [ + 'directory' => 'logs', + ]) + ->throw() + ->json(); + + if (!is_array($files)) { + throw new Exception('Invalid log directory response.'); + } + + $threshold = now()->subDays($days)->startOfDay(); + + $logsToDelete = collect($files) + ->filter(fn ($file) => str_ends_with($file['name'], '.log.gz')) + ->filter(function ($file) use ($days, $threshold) { + if ($days === 0) { + return true; + } + + $logDate = $this->extractLogDate($file['name']); + + if (!$logDate) { + return false; + } + + return $logDate->lessThan($threshold); + }) + ->pluck('name') + ->map(fn ($name) => 'logs/' . $name) + ->values() + ->all(); + + if (empty($logsToDelete)) { + Notification::make() + ->title('McLogCleaner') + ->body('No logs matching your selection were found.') + ->success() + ->send(); + return; + } + + Http::daemon($server->node) + ->post("/api/servers/{$server->uuid}/files/delete", [ + 'root' => '/', + 'files' => $logsToDelete, + ]) + ->throw(); + + Notification::make() + ->title('Logfolder cleaned') + ->body(count($logsToDelete) . ' files were deleted.') + ->success() + ->send(); + + } catch (\Throwable $e) { + report($e); + + Notification::make() + ->title('Cleanup failed.') + ->body($e->getMessage()) + ->danger() + ->send(); + } + }); + } + + private function extractLogDate(string $filename): ?Carbon + { + if (preg_match('/(\d{4}-\d{2}-\d{2})/', $filename, $matches)) { + return Carbon::createFromFormat('Y-m-d', $matches[1])->startOfDay(); + } + return null; + } +} diff --git a/mclogcleaner/src/McLogCleanerPlugin.php b/mclogcleaner/src/McLogCleanerPlugin.php new file mode 100644 index 00000000..6cdeeb61 --- /dev/null +++ b/mclogcleaner/src/McLogCleanerPlugin.php @@ -0,0 +1,18 @@ + Date: Mon, 9 Feb 2026 14:51:16 +0100 Subject: [PATCH 02/20] Fixed some things coderrabbitai wanted me to change :D --- mclogcleaner/README.md | 2 +- .../src/Enums/{CheckEgg.php => EggFeature.php} | 4 ++-- .../Components/Actions/McLogCleanAction.php | 18 +++++++++++++----- mclogcleaner/src/McLogCleanerPlugin.php | 12 +++++++++--- .../Providers/McLogCleanerPluginProvider.php | 13 ++++++++----- 5 files changed, 33 insertions(+), 16 deletions(-) rename mclogcleaner/src/Enums/{CheckEgg.php => EggFeature.php} (86%) diff --git a/mclogcleaner/README.md b/mclogcleaner/README.md index b1607e61..fa1f9c12 100644 --- a/mclogcleaner/README.md +++ b/mclogcleaner/README.md @@ -2,7 +2,7 @@ McLogCleaner automatically deletes all `.log.gz` files from the server’s `logs` folder. -> **Note:** `latest.yml` will always remain intact and is never deleted. +> **Note:** `latest.log` will always remain intact and is never deleted. ### Usage To use this plugin, add `mclogcleaner` as a feature to the egg you want to run it with. diff --git a/mclogcleaner/src/Enums/CheckEgg.php b/mclogcleaner/src/Enums/EggFeature.php similarity index 86% rename from mclogcleaner/src/Enums/CheckEgg.php rename to mclogcleaner/src/Enums/EggFeature.php index cb937ff5..4506f661 100644 --- a/mclogcleaner/src/Enums/CheckEgg.php +++ b/mclogcleaner/src/Enums/EggFeature.php @@ -4,14 +4,14 @@ use App\Models\Server; -enum CheckEgg: string { +enum EggFeature: string { case Check = 'mclogcleaner'; public static function fromServer(Server $server): ?self { $server->loadMissing('egg'); - $features = $server->egg->features ?? []; + $features = $server->egg?->features ?? []; if (in_array(self::Check->value, $features, true)) { return self::Check; diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index 2f00a9a7..47ebe498 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -9,7 +9,7 @@ use Filament\Notifications\Notification; use Filament\Support\Enums\Size; use Illuminate\Support\Facades\Http; -use JuggleGaming\McLogCleaner\Enums\CheckEgg; +use JuggleGaming\McLogCleaner\Enums\EggFeature; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Carbon\Carbon; @@ -26,8 +26,12 @@ protected function setUp(): void parent::setUp(); $this->hidden(function () { + /** `@var` Server|null $server */ $server = Filament::getTenant(); - return !CheckEgg::serverSupportsLogCleaner($server); + if (!$server instanceof Server) { + return true; + } + return !EggFeature::serverSupportsLogCleaner($server); }); $this->label('Delete logs'); @@ -63,8 +67,11 @@ protected function setUp(): void ]); $this->action(function (array $data) { + /** `@var` Server|null $server */ $server = Filament::getTenant(); - + if (!$server instanceof Server) { + return true; + } $mode = $data['mode']; if ($mode !== 'custom') { $mode = (int) $mode; @@ -139,7 +146,7 @@ protected function setUp(): void Notification::make() ->title('Cleanup failed.') - ->body($e->getMessage()) + ->body('An error occurred while deleting log files. Please try again later.') ->danger() ->send(); } @@ -149,7 +156,8 @@ protected function setUp(): void private function extractLogDate(string $filename): ?Carbon { if (preg_match('/(\d{4}-\d{2}-\d{2})/', $filename, $matches)) { - return Carbon::createFromFormat('Y-m-d', $matches[1])->startOfDay(); + $date = Carbon::createFromFormat('Y-m-d', $matches[1]); + return $date ? $date->startOfDay() : null; } return null; } diff --git a/mclogcleaner/src/McLogCleanerPlugin.php b/mclogcleaner/src/McLogCleanerPlugin.php index 6cdeeb61..d33b3785 100644 --- a/mclogcleaner/src/McLogCleanerPlugin.php +++ b/mclogcleaner/src/McLogCleanerPlugin.php @@ -9,10 +9,16 @@ class McLogCleanerPlugin implements Plugin { public function getId(): string { - return 'logcleaner'; + return 'mclogcleaner'; } - public function register(Panel $panel): void {} + public function register(Panel $panel): void + { + // + } - public function boot(Panel $panel): void {} + public function boot(Panel $panel): void + { + // + } } diff --git a/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php b/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php index 631f9c34..da70184a 100644 --- a/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php +++ b/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php @@ -7,12 +7,15 @@ use App\Filament\Server\Pages\Console; use JuggleGaming\McLogCleaner\Filament\Components\Actions\McLogCleanAction; -class McLogCleanerPluginProvider extends ServiceProvider { - - public function register(): void { +class McLogCleanerPluginProvider extends ServiceProvider +{ + public function register(): void + { Console::registerCustomHeaderActions(HeaderActionPosition::Before, McLogCleanAction::make()); } - public function boot(): void {} - + public function boot(): void + { + // + } } From 5b82b62fdab703477c0efb53678beb02738580d3 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 14:58:14 +0100 Subject: [PATCH 03/20] Fixed some things coderrabbitai wanted me to change :D --- mclogcleaner/src/Enums/EggFeature.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mclogcleaner/src/Enums/EggFeature.php b/mclogcleaner/src/Enums/EggFeature.php index 4506f661..adf708a9 100644 --- a/mclogcleaner/src/Enums/EggFeature.php +++ b/mclogcleaner/src/Enums/EggFeature.php @@ -4,14 +4,15 @@ use App\Models\Server; -enum EggFeature: string { +enum EggFeature: string +{ case Check = 'mclogcleaner'; public static function fromServer(Server $server): ?self { $server->loadMissing('egg'); - $features = $server->egg?->features ?? []; + $features = $server->egg->features ?? []; if (in_array(self::Check->value, $features, true)) { return self::Check; From 02820d03f0d47c94d79ed8403cf4a6a1fcc12466 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 15:03:46 +0100 Subject: [PATCH 04/20] Fixed some things coderrabbitai wanted me to change :D --- .../src/Filament/Components/Actions/McLogCleanAction.php | 6 +++--- mclogcleaner/src/Providers/McLogCleanerPluginProvider.php | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index 47ebe498..f819b787 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -3,16 +3,16 @@ namespace JuggleGaming\McLogCleaner\Filament\Components\Actions; use App\Models\Server; +use Carbon\Carbon; use Exception; use Filament\Actions\Action; use Filament\Facades\Filament; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; use Filament\Support\Enums\Size; use Illuminate\Support\Facades\Http; use JuggleGaming\McLogCleaner\Enums\EggFeature; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; -use Carbon\Carbon; class McLogCleanAction extends Action { diff --git a/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php b/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php index da70184a..8e1a228e 100644 --- a/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php +++ b/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php @@ -2,11 +2,12 @@ namespace JuggleGaming\McLogCleaner\Providers; -use Illuminate\Support\ServiceProvider; use App\Enums\HeaderActionPosition; use App\Filament\Server\Pages\Console; +use Illuminate\Support\ServiceProvider; use JuggleGaming\McLogCleaner\Filament\Components\Actions\McLogCleanAction; + class McLogCleanerPluginProvider extends ServiceProvider { public function register(): void From 6d2fccb5f2403c2db2fbbd81a771bbc306ee8a43 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 15:08:29 +0100 Subject: [PATCH 05/20] Trying to fix things coderabitai want me to do --- mclogcleaner/src/Providers/McLogCleanerPluginProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php b/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php index 8e1a228e..0ac4d3fb 100644 --- a/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php +++ b/mclogcleaner/src/Providers/McLogCleanerPluginProvider.php @@ -7,7 +7,6 @@ use Illuminate\Support\ServiceProvider; use JuggleGaming\McLogCleaner\Filament\Components\Actions\McLogCleanAction; - class McLogCleanerPluginProvider extends ServiceProvider { public function register(): void From 6ccf949eb32f227f2fc65ad960f65fea73852db5 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 15:11:19 +0100 Subject: [PATCH 06/20] Trying to fix things coderabitai want me to do --- .../src/Filament/Components/Actions/McLogCleanAction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index f819b787..a8e41858 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -161,4 +161,4 @@ private function extractLogDate(string $filename): ?Carbon } return null; } -} +} \ No newline at end of file From e605074023d0394aab1453f6b9c75cb4f3a04cdc Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 15:57:14 +0100 Subject: [PATCH 07/20] Trying to fix things coderabitai want me to do --- .../src/Filament/Components/Actions/McLogCleanAction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index a8e41858..f819b787 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -161,4 +161,4 @@ private function extractLogDate(string $filename): ?Carbon } return null; } -} \ No newline at end of file +} From 1d9c20b3f04681258c067ffacc07a95a88b23997 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 22:55:56 +0100 Subject: [PATCH 08/20] Fixed typos --- .../src/Filament/Components/Actions/McLogCleanAction.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index f819b787..d2c53672 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -26,7 +26,7 @@ protected function setUp(): void parent::setUp(); $this->hidden(function () { - /** `@var` Server|null $server */ + /** @var Server|null $server */ $server = Filament::getTenant(); if (!$server instanceof Server) { return true; @@ -67,7 +67,7 @@ protected function setUp(): void ]); $this->action(function (array $data) { - /** `@var` Server|null $server */ + /** @var Server|null $server */ $server = Filament::getTenant(); if (!$server instanceof Server) { return true; From c1915348b1089495b36669cc720e4704d5f33071 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 22:57:40 +0100 Subject: [PATCH 09/20] Fixed an issue seen by coderabbitai --- .../src/Filament/Components/Actions/McLogCleanAction.php | 1 - 1 file changed, 1 deletion(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index d2c53672..b33aa1ba 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -1,5 +1,4 @@ Date: Mon, 9 Feb 2026 23:02:21 +0100 Subject: [PATCH 10/20] Fixed an issue seen by coderabbitai --- .../Components/Actions/McLogCleanAction.php | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index b33aa1ba..65eeed88 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -23,7 +23,6 @@ public static function getDefaultName(): ?string protected function setUp(): void { parent::setUp(); - $this->hidden(function () { /** @var Server|null $server */ $server = Filament::getTenant(); @@ -37,7 +36,6 @@ protected function setUp(): void $this->icon('tabler-trash'); $this->color('danger'); $this->size(Size::ExtraLarge); - $this->requiresConfirmation() ->modalHeading('Delete logs') ->modalDescription('Choose which logs should be deleted.') @@ -54,7 +52,6 @@ protected function setUp(): void ->default(7) ->required() ->reactive(), - TextInput::make('custom_days') ->label('Delete logs older than (days)') ->numeric() @@ -75,7 +72,6 @@ protected function setUp(): void if ($mode !== 'custom') { $mode = (int) $mode; } - if ($mode === 'custom') { $days = max(1, (int) $data['custom_days']); } elseif ($mode === -1) { @@ -83,7 +79,6 @@ protected function setUp(): void } else { $days = $mode; } - try { $files = Http::daemon($server->node) ->get("/api/servers/{$server->uuid}/files/list-directory", [ @@ -91,33 +86,26 @@ protected function setUp(): void ]) ->throw() ->json(); - if (!is_array($files)) { throw new Exception('Invalid log directory response.'); } - $threshold = now()->subDays($days)->startOfDay(); - $logsToDelete = collect($files) ->filter(fn ($file) => str_ends_with($file['name'], '.log.gz')) ->filter(function ($file) use ($days, $threshold) { if ($days === 0) { return true; } - $logDate = $this->extractLogDate($file['name']); - if (!$logDate) { return false; } - return $logDate->lessThan($threshold); }) ->pluck('name') ->map(fn ($name) => 'logs/' . $name) ->values() ->all(); - if (empty($logsToDelete)) { Notification::make() ->title('McLogCleaner') @@ -126,20 +114,17 @@ protected function setUp(): void ->send(); return; } - Http::daemon($server->node) ->post("/api/servers/{$server->uuid}/files/delete", [ 'root' => '/', 'files' => $logsToDelete, ]) ->throw(); - Notification::make() ->title('Logfolder cleaned') ->body(count($logsToDelete) . ' files were deleted.') ->success() ->send(); - } catch (\Throwable $e) { report($e); From 4356a8a8aab6b8efa1433e7712501d45b98cddcf Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 23:04:33 +0100 Subject: [PATCH 11/20] Fixed an issue seen by coderabbitai --- .../src/Filament/Components/Actions/McLogCleanAction.php | 1 - 1 file changed, 1 deletion(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index 65eeed88..e5755245 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -127,7 +127,6 @@ protected function setUp(): void ->send(); } catch (\Throwable $e) { report($e); - Notification::make() ->title('Cleanup failed.') ->body('An error occurred while deleting log files. Please try again later.') From 82b6f285ac098cc994582b4f218a250593f57183 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 23:05:37 +0100 Subject: [PATCH 12/20] Fixed an issue seen by coderabbitai --- .../src/Filament/Components/Actions/McLogCleanAction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index e5755245..abe464f4 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -144,4 +144,4 @@ private function extractLogDate(string $filename): ?Carbon } return null; } -} +} \ No newline at end of file From 926ada5ba8f07359b918677997c100072ca7256a Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Mon, 9 Feb 2026 23:08:40 +0100 Subject: [PATCH 13/20] Fixed an issue seen by coderabbitai --- .../src/Filament/Components/Actions/McLogCleanAction.php | 1 + 1 file changed, 1 insertion(+) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index abe464f4..1d6539d6 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -144,4 +144,5 @@ private function extractLogDate(string $filename): ?Carbon } return null; } + } \ No newline at end of file From 70b70bf07815bf252c60911cb5694a4e04589fe7 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Tue, 10 Feb 2026 00:05:19 +0100 Subject: [PATCH 14/20] Fixed an issue seen by coderabbitai --- .../Components/Actions/McLogCleanAction.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index 1d6539d6..f6f1c47f 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -1,4 +1,5 @@ label('Delete logs') ->options([ - 7 => 'Older than 7 days', - 30 => 'Older than 30 days', - -1 => 'Delete all logs', + 7 => 'Older than 7 days', + 30 => 'Older than 30 days', + -1 => 'Delete all logs', 'custom' => 'Custom (days)', ]) ->default(7) @@ -100,6 +102,7 @@ protected function setUp(): void if (!$logDate) { return false; } + return $logDate->lessThan($threshold); }) ->pluck('name') @@ -112,11 +115,12 @@ protected function setUp(): void ->body('No logs matching your selection were found.') ->success() ->send(); + return; } Http::daemon($server->node) ->post("/api/servers/{$server->uuid}/files/delete", [ - 'root' => '/', + 'root' => '/', 'files' => $logsToDelete, ]) ->throw(); @@ -140,9 +144,10 @@ private function extractLogDate(string $filename): ?Carbon { if (preg_match('/(\d{4}-\d{2}-\d{2})/', $filename, $matches)) { $date = Carbon::createFromFormat('Y-m-d', $matches[1]); + return $date ? $date->startOfDay() : null; } + return null; } - } \ No newline at end of file From b49d4abc5bfb03030483114736598a785694c421 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Tue, 10 Feb 2026 00:10:16 +0100 Subject: [PATCH 15/20] Fixed an issue seen by coderabbitai --- .../src/Filament/Components/Actions/McLogCleanAction.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index f6f1c47f..d94d82e6 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -27,9 +27,6 @@ protected function setUp(): void $this->hidden(function () { /** @var Server|null $server */ $server = Filament::getTenant(); - if (!$server instanceof Server) { - return true; - } return !EggFeature::serverSupportsLogCleaner($server); }); @@ -67,9 +64,6 @@ protected function setUp(): void $this->action(function (array $data) { /** @var Server|null $server */ $server = Filament::getTenant(); - if (!$server instanceof Server) { - return true; - } $mode = $data['mode']; if ($mode !== 'custom') { $mode = (int) $mode; @@ -150,4 +144,4 @@ private function extractLogDate(string $filename): ?Carbon return null; } -} \ No newline at end of file +} From 5cca94ed1c8ca95f4cd1aa33bc1759941a92ccfd Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Tue, 10 Feb 2026 01:25:49 +0100 Subject: [PATCH 16/20] Updated version to 1.1.1 to fit to my repo (and the version in discord) --- mclogcleaner/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mclogcleaner/plugin.json b/mclogcleaner/plugin.json index 867e1eeb..6341a26d 100644 --- a/mclogcleaner/plugin.json +++ b/mclogcleaner/plugin.json @@ -2,7 +2,7 @@ "id": "mclogcleaner", "name": "McLogCleaner", "author": "JuggleGaming", - "version": "1.1.0", + "version": "1.1.1", "description": "Clean your Minecraft-logs with ease", "category": "plugin", "url": "https://github.com/pelican-dev/plugins/tree/main/mclogcleaner", From c9a35e902b6950413b7324c9c2671c13176a1c30 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Wed, 11 Feb 2026 12:19:22 +0100 Subject: [PATCH 17/20] Deleted unnecessary config an enum. The feature-check is now inside of the Action. Updated README.md. --- mclogcleaner/README.md | 8 +++--- mclogcleaner/config/logcleaner.php | 5 ---- mclogcleaner/src/Enums/EggFeature.php | 28 ------------------- .../Components/Actions/McLogCleanAction.php | 10 ++++++- 4 files changed, 13 insertions(+), 38 deletions(-) delete mode 100644 mclogcleaner/config/logcleaner.php delete mode 100644 mclogcleaner/src/Enums/EggFeature.php diff --git a/mclogcleaner/README.md b/mclogcleaner/README.md index fa1f9c12..e432dd57 100644 --- a/mclogcleaner/README.md +++ b/mclogcleaner/README.md @@ -1,13 +1,13 @@ -## McLogCleaner +# McLogCleaner (by JuggleGaming) McLogCleaner automatically deletes all `.log.gz` files from the server’s `logs` folder. > **Note:** `latest.log` will always remain intact and is never deleted. -### Usage -To use this plugin, add `mclogcleaner` as a feature to the egg you want to run it with. +## Setup +To use this plugin, add `mclogcleaner` as a _feature_ to the egg you want to run it with. -### Log Deletion Options +## Log Deletion Options When you click **Delete logs**, a dropdown menu appears where you can choose the **minimum age (in days)** of log files to delete: - Logs older than 7 days - Logs older than 30 days diff --git a/mclogcleaner/config/logcleaner.php b/mclogcleaner/config/logcleaner.php deleted file mode 100644 index db4cefdc..00000000 --- a/mclogcleaner/config/logcleaner.php +++ /dev/null @@ -1,5 +0,0 @@ -loadMissing('egg'); - - $features = $server->egg->features ?? []; - - if (in_array(self::Check->value, $features, true)) { - return self::Check; - } - - return null; - } - - public static function serverSupportsLogCleaner(Server $server): bool - { - return self::fromServer($server) !== null; - } -} diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index d94d82e6..29db2ff1 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -28,7 +28,15 @@ protected function setUp(): void /** @var Server|null $server */ $server = Filament::getTenant(); - return !EggFeature::serverSupportsLogCleaner($server); + if (! $server) { + return true; + } + + $server->loadMissing('egg'); + + $features = $server->egg->features ?? []; + + return ! in_array('mclogcleaner', $features, true); }); $this->label('Delete logs'); From 582828199cdc892f73244677fe21df2b4b75a803 Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Wed, 11 Feb 2026 12:24:46 +0100 Subject: [PATCH 18/20] Fix --- .../src/Filament/Components/Actions/McLogCleanAction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index 29db2ff1..f477355f 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -152,4 +152,4 @@ private function extractLogDate(string $filename): ?Carbon return null; } -} +} \ No newline at end of file From 3fcc4d8413943d7389c2b6499293ef4f2353697f Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Wed, 11 Feb 2026 12:32:17 +0100 Subject: [PATCH 19/20] Fix --- .../src/Filament/Components/Actions/McLogCleanAction.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index f477355f..f8fc605b 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -27,15 +27,11 @@ protected function setUp(): void $this->hidden(function () { /** @var Server|null $server */ $server = Filament::getTenant(); - if (! $server) { return true; } - $server->loadMissing('egg'); - $features = $server->egg->features ?? []; - return ! in_array('mclogcleaner', $features, true); }); From 9b0a549433595f9ac1bd31a4bc8647c27e10d25c Mon Sep 17 00:00:00 2001 From: Philipp Stamp Date: Wed, 11 Feb 2026 14:21:19 +0100 Subject: [PATCH 20/20] Fix --- .../src/Filament/Components/Actions/McLogCleanAction.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php index f8fc605b..a05c66fb 100644 --- a/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php +++ b/mclogcleaner/src/Filament/Components/Actions/McLogCleanAction.php @@ -12,7 +12,6 @@ use Filament\Notifications\Notification; use Filament\Support\Enums\Size; use Illuminate\Support\Facades\Http; -use JuggleGaming\McLogCleaner\Enums\EggFeature; class McLogCleanAction extends Action { @@ -27,12 +26,13 @@ protected function setUp(): void $this->hidden(function () { /** @var Server|null $server */ $server = Filament::getTenant(); - if (! $server) { + if (!$server) { return true; } $server->loadMissing('egg'); $features = $server->egg->features ?? []; - return ! in_array('mclogcleaner', $features, true); + + return !in_array('mclogcleaner', $features, true); }); $this->label('Delete logs'); @@ -148,4 +148,4 @@ private function extractLogDate(string $filename): ?Carbon return null; } -} \ No newline at end of file +}