From 18d26904e2f6219835f140789e4ac37f8f332f6d Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 7 Jul 2023 21:07:42 +0200 Subject: [PATCH] feat: disk cleanup threshold by server --- app/Console/Kernel.php | 7 ++--- app/Http/Livewire/Server/Form.php | 5 +++- app/Jobs/DockerCleanupJob.php | 11 ++++---- ...lication_deployment_queues_as_activity.php | 2 +- ...4_add_disk_usage_percentage_to_servers.php | 28 +++++++++++++++++++ .../views/livewire/server/form.blade.php | 4 +++ 6 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 database/migrations/2023_06_23_114134_add_disk_usage_percentage_to_servers.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 0faaf4967..1d20b7606 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -14,12 +14,11 @@ class Kernel extends ConsoleKernel { if (isDev()) { $schedule->command('horizon:snapshot')->everyMinute(); - // $schedule->job(new DockerCleanupJob)->everyMinute(); + // $schedule->job(new DockerCleanupJob)->everyOddHour(); // $schedule->job(new InstanceAutoUpdateJob(true))->everyMinute(); } else { $schedule->command('horizon:snapshot')->everyFiveMinutes(); - $schedule->job(new DockerCleanupJob)->everyFiveMinutes(); - + $schedule->job(new DockerCleanupJob)->everyTenMinutes(); $schedule->job(new ProxyCheckJob)->everyFiveMinutes(); $schedule->job(new InstanceAutoUpdateJob)->everyTenMinutes(); } @@ -30,4 +29,4 @@ class Kernel extends ConsoleKernel require base_path('routes/console.php'); } -} +} \ No newline at end of file diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php index 72d32243f..fc98c05bf 100644 --- a/app/Http/Livewire/Server/Form.php +++ b/app/Http/Livewire/Server/Form.php @@ -12,6 +12,7 @@ class Form extends Component public $uptime; public $dockerVersion; public string|null $wildcard_domain = null; + public int $cleanup_after_percentage; protected $rules = [ 'server.name' => 'required|min:6', @@ -35,6 +36,7 @@ class Form extends Component public function mount() { $this->wildcard_domain = $this->server->settings->wildcard_domain; + $this->cleanup_after_percentage = $this->server->settings->cleanup_after_percentage; } public function installDocker() { @@ -91,8 +93,9 @@ class Form extends Component // return; // } $this->server->settings->wildcard_domain = $this->wildcard_domain; + $this->server->settings->cleanup_after_percentage = $this->cleanup_after_percentage; $this->server->settings->save(); $this->server->save(); $this->emit('success', 'Server updated successfully.'); } -} +} \ No newline at end of file diff --git a/app/Jobs/DockerCleanupJob.php b/app/Jobs/DockerCleanupJob.php index 9e9258cd5..117a9bd8a 100644 --- a/app/Jobs/DockerCleanupJob.php +++ b/app/Jobs/DockerCleanupJob.php @@ -38,15 +38,14 @@ class DockerCleanupJob implements ShouldQueue } $disk_usage = json_decode(instant_remote_process(['df -hP | awk \'BEGIN {printf"{\"disks\":["}{if($1=="Filesystem")next;if(a)printf",";printf"{\"mount\":\""$6"\",\"size\":\""$2"\",\"used\":\""$3"\",\"avail\":\""$4"\",\"use%\":\""$5"\"}";a++;}END{print"]}";}\''], $server), true); $mount_point = collect(data_get($disk_usage, 'disks'))->where('mount', $docker_root_filesystem)->first(); - if (Str::of(data_get($mount_point, 'use%'))->trim()->replace('%', '')->value() > 60) { - continue; + if (Str::of(data_get($mount_point, 'use%'))->trim()->replace('%', '')->value() >= $server->settings->cleanup_after_percentage) { + instant_remote_process(['docker image prune -af'], $server); + instant_remote_process(['docker container prune -f --filter "label=coolify.managed=true"'], $server); + instant_remote_process(['docker builder prune -af'], $server); } - instant_remote_process(['docker image prune -af'], $server); - instant_remote_process(['docker container prune -f --filter "label=coolify.managed=true"'], $server); - instant_remote_process(['docker builder prune -af'], $server); } } catch (\Exception $e) { Log::error($e->getMessage()); } } -} +} \ No newline at end of file diff --git a/database/migrations/2023_06_23_114133_use_application_deployment_queues_as_activity.php b/database/migrations/2023_06_23_114133_use_application_deployment_queues_as_activity.php index 36623ee7b..642184abc 100644 --- a/database/migrations/2023_06_23_114133_use_application_deployment_queues_as_activity.php +++ b/database/migrations/2023_06_23_114133_use_application_deployment_queues_as_activity.php @@ -27,4 +27,4 @@ return new class extends Migration $table->dropColumn('current_process_id'); }); } -}; +}; \ No newline at end of file diff --git a/database/migrations/2023_06_23_114134_add_disk_usage_percentage_to_servers.php b/database/migrations/2023_06_23_114134_add_disk_usage_percentage_to_servers.php new file mode 100644 index 000000000..d2b0f892c --- /dev/null +++ b/database/migrations/2023_06_23_114134_add_disk_usage_percentage_to_servers.php @@ -0,0 +1,28 @@ +integer('cleanup_after_percentage')->default(80); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('server_settings', function (Blueprint $table) { + $table->dropColumn('cleanup_after_percentage'); + }); + } +}; \ No newline at end of file diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index 4a88910ac..ce7720fc6 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -33,6 +33,10 @@ +

Settings

+
+ +

Actions

@if ($server->settings->is_reachable)