refactor: server status job and docker cleanup job

This commit is contained in:
Andras Bacsai 2024-07-18 14:43:21 +02:00
parent b8e95b2099
commit 82a5b4c55d
3 changed files with 5 additions and 73 deletions

View File

@ -6,6 +6,7 @@
use App\Jobs\CleanupInstanceStuffsJob; use App\Jobs\CleanupInstanceStuffsJob;
use App\Jobs\ContainerStatusJob; use App\Jobs\ContainerStatusJob;
use App\Jobs\DatabaseBackupJob; use App\Jobs\DatabaseBackupJob;
use App\Jobs\DockerCleanupJob;
use App\Jobs\PullCoolifyImageJob; use App\Jobs\PullCoolifyImageJob;
use App\Jobs\PullHelperImageJob; use App\Jobs\PullHelperImageJob;
use App\Jobs\PullSentinelImageJob; use App\Jobs\PullSentinelImageJob;
@ -87,6 +88,7 @@ private function check_resources($schedule)
} }
foreach ($servers as $server) { foreach ($servers as $server) {
$schedule->job(new ServerStatusJob($server))->everyMinute()->onOneServer(); $schedule->job(new ServerStatusJob($server))->everyMinute()->onOneServer();
$schedule->job(new DockerCleanupJob($server))->everyTenMinutes()->onOneServer();
} }
} }

View File

@ -41,30 +41,25 @@ public function handle(): void
return; return;
} }
if ($this->server->is_force_cleanup_enabled) { if ($this->server->is_force_cleanup_enabled) {
CleanupDocker::run($this->server); CleanupDocker::run(server: $this->server, force: true);
return; return;
} }
$this->usageBefore = $this->server->getDiskUsage(); $this->usageBefore = $this->server->getDiskUsage();
ray('Usage before: '.$this->usageBefore);
if ($this->usageBefore >= $this->server->settings->cleanup_after_percentage) { if ($this->usageBefore >= $this->server->settings->cleanup_after_percentage) {
ray('Cleaning up '.$this->server->name); CleanupDocker::run(server: $this->server, force: false);
CleanupDocker::run($this->server);
$usageAfter = $this->server->getDiskUsage(); $usageAfter = $this->server->getDiskUsage();
if ($usageAfter < $this->usageBefore) { if ($usageAfter < $this->usageBefore) {
$this->server->team?->notify(new DockerCleanup($this->server, 'Saved '.($this->usageBefore - $usageAfter).'% disk space.')); $this->server->team?->notify(new DockerCleanup($this->server, 'Saved '.($this->usageBefore - $usageAfter).'% disk space.'));
// ray('Saved ' . ($this->usageBefore - $usageAfter) . '% disk space on ' . $this->server->name);
// send_internal_notification('DockerCleanupJob done: Saved ' . ($this->usageBefore - $usageAfter) . '% disk space on ' . $this->server->name);
Log::info('DockerCleanupJob done: Saved '.($this->usageBefore - $usageAfter).'% disk space on '.$this->server->name); Log::info('DockerCleanupJob done: Saved '.($this->usageBefore - $usageAfter).'% disk space on '.$this->server->name);
} else { } else {
Log::info('DockerCleanupJob failed to save disk space on '.$this->server->name); Log::info('DockerCleanupJob failed to save disk space on '.$this->server->name);
} }
} else { } else {
ray('No need to clean up '.$this->server->name);
Log::info('No need to clean up '.$this->server->name); Log::info('No need to clean up '.$this->server->name);
} }
} catch (\Throwable $e) { } catch (\Throwable $e) {
// send_internal_notification('DockerCleanupJob failed with: '.$e->getMessage());
ray($e->getMessage()); ray($e->getMessage());
throw $e; throw $e;
} }

View File

@ -3,7 +3,6 @@
namespace App\Jobs; namespace App\Jobs;
use App\Models\Server; use App\Models\Server;
use App\Notifications\Server\HighDiskUsage;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeEncrypted; use Illuminate\Contracts\Queue\ShouldBeEncrypted;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
@ -44,7 +43,6 @@ public function handle()
} }
try { try {
if ($this->server->isFunctional()) { if ($this->server->isFunctional()) {
$this->cleanup();
$this->remove_unnecessary_coolify_yaml(); $this->remove_unnecessary_coolify_yaml();
if ($this->server->isSentinelEnabled()) { if ($this->server->isSentinelEnabled()) {
$this->server->checkSentinel(); $this->server->checkSentinel();
@ -56,45 +54,7 @@ public function handle()
return handleError($e); return handleError($e);
} }
try {
// $this->check_docker_engine();
} catch (\Throwable $e) {
// Do nothing
}
}
private function check_docker_engine()
{
$version = instant_remote_process([
'docker info',
], $this->server, false);
if (is_null($version)) {
$os = instant_remote_process([
'cat /etc/os-release | grep ^ID=',
], $this->server, false);
$os = str($os)->after('ID=')->trim();
if ($os === 'ubuntu') {
try {
instant_remote_process([
'systemctl start docker',
], $this->server);
} catch (\Throwable $e) {
ray($e->getMessage());
return handleError($e);
}
} else {
try {
instant_remote_process([
'service docker start',
], $this->server);
} catch (\Throwable $e) {
ray($e->getMessage());
return handleError($e);
}
}
}
} }
private function remove_unnecessary_coolify_yaml() private function remove_unnecessary_coolify_yaml()
@ -108,29 +68,4 @@ private function remove_unnecessary_coolify_yaml()
], $this->server, false); ], $this->server, false);
} }
} }
public function cleanup(): void
{
if ($this->server->settings->is_force_cleanup_enabled) {
DockerCleanupJob::dispatch($this->server);
return;
}
$this->disk_usage = $this->server->getDiskUsage();
if ($this->disk_usage >= $this->server->settings->cleanup_after_percentage) {
DockerCleanupJob::dispatch($this->server);
if ($this->server->high_disk_usage_notification_sent) {
ray('high disk usage notification already sent');
return;
} else {
$this->server->high_disk_usage_notification_sent = true;
$this->server->save();
$this->server->team?->notify(new HighDiskUsage($this->server, $this->disk_usage, $this->server->settings->cleanup_after_percentage));
}
} else {
$this->server->high_disk_usage_notification_sent = false;
$this->server->save();
}
}
} }