diff --git a/app/Http/Livewire/DeployApplication.php b/app/Http/Livewire/DeployApplication.php index fac2c305c..82fccd9ad 100644 --- a/app/Http/Livewire/DeployApplication.php +++ b/app/Http/Livewire/DeployApplication.php @@ -7,6 +7,7 @@ use App\Models\CoolifyInstanceSettings; use DateTimeImmutable; use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Process; use Livewire\Component; use Symfony\Component\Yaml\Yaml; use Visus\Cuid2\Cuid2; @@ -249,7 +250,20 @@ public function stop() remoteProcess($command, $destination->server, null, $application); } public function checkStatus() { - ContainerStatusJob::dispatch(); + $application = Application::where('uuid', $this->application_uuid)->first(); + $destination = $application->destination->getMorphClass()::where('id', $application->destination->id)->first(); + $private_key_location = savePrivateKey($destination->server); + $ssh_command = generateSshCommand($private_key_location, $destination->server->ip, $destination->server->user, $destination->server->port, "docker ps -a --format '{{.State}}' --filter 'name={$application->uuid}'"); + $process = Process::run($ssh_command); + $output = trim($process->output()); + if ($output == '') { + $application->status = 'exited'; + $application->save(); + } else { + $application->status = $output; + $application->save(); + } + // ContainerStatusJob::dispatch(); } } diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index d5516cdaa..2f1fece58 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -11,6 +11,7 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Process; use Tests\Support\Output; @@ -26,16 +27,17 @@ public function __construct() public function handle(): void { try { - $server = Server::all()->where('settings->is_build_server', '=', false)->first(); + $servers = Server::all()->reject(fn (Server $server) => $server->settings->is_build_server); $applications = Application::all(); $not_found_applications = $applications; - $containers = []; - // foreach ($servers as $server) { - $private_key_location = savePrivateKey($server); - $ssh_command = generateSshCommand($private_key_location, $server->ip, $server->user, $server->port, 'docker ps -a -q --format \'{{json .}}\''); - $process = Process::run($ssh_command); - $output = trim($process->output()); - $containers = formatDockerCmdOutputToJson($output); + $containers = collect(); + foreach ($servers as $server) { + $private_key_location = savePrivateKey($server); + $ssh_command = generateSshCommand($private_key_location, $server->ip, $server->user, $server->port, 'docker ps -a -q --format \'{{json .}}\''); + $process = Process::run($ssh_command); + $output = trim($process->output()); + $containers = $containers->concat(formatDockerCmdOutputToJson($output)); + } foreach ($containers as $container) { $found_application = $applications->filter(function ($value, $key) use ($container) { return $value->uuid == $container['Names']; @@ -46,13 +48,13 @@ public function handle(): void }); $found_application->status = $container['State']; $found_application->save(); - // Log::info('Found application: ' . $found_application->uuid . ' settings status to: ' . $found_application->status); + Log::info('Found application: ' . $found_application->uuid . '.Set status to: ' . $found_application->status); } } foreach ($not_found_applications as $not_found_application) { $not_found_application->status = 'exited'; $not_found_application->save(); - // Log::info('Not found application: ' . $not_found_application->uuid . ' settings status to: ' . $not_found_application->status); + Log::info('Not found application: ' . $not_found_application->uuid . '.Set status to: ' . $not_found_application->status); } } catch (\Exception $e) { Log::error($e->getMessage()); diff --git a/app/Models/Project.php b/app/Models/Project.php index 7dc0ef613..e3f2f105b 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -4,7 +4,6 @@ class Project extends BaseModel { - protected $with = ['settings', 'environments']; protected static function booted() { static::created(function ($project) { diff --git a/database/migrations/2023_03_27_081716_create_applications_table.php b/database/migrations/2023_03_27_081716_create_applications_table.php index 701a70c17..021f8f434 100644 --- a/database/migrations/2023_03_27_081716_create_applications_table.php +++ b/database/migrations/2023_03_27_081716_create_applications_table.php @@ -52,7 +52,7 @@ public function up(): void $table->integer('health_check_retries')->default(10); $table->integer('health_check_start_period')->default(5); - $table->string('status')->default('killed'); + $table->string('status')->default('exited'); $table->morphs('destination'); $table->morphs('source'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 00797ca1c..76395f2b0 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,6 +14,7 @@ public function run(): void TeamSeeder::class, PrivateKeySeeder::class, ServerSeeder::class, + ServerSettingSeeder::class, ProjectSeeder::class, ProjectSettingSeeder::class, EnvironmentSeeder::class, diff --git a/database/seeders/ServerSettingSeeder.php b/database/seeders/ServerSettingSeeder.php new file mode 100644 index 000000000..a7d5dd97d --- /dev/null +++ b/database/seeders/ServerSettingSeeder.php @@ -0,0 +1,25 @@ +load(['settings']); + $server_1->settings->is_build_server = true; + $server_1->settings->save(); + + $server_2 = Server::find(2)->load(['settings']); + $server_2->settings->is_build_server = true; + $server_2->settings->save(); + + } +} diff --git a/docker/dev/supervisord.conf b/docker/dev/supervisord.conf index 4af5bb4bd..a50aad21c 100644 --- a/docker/dev/supervisord.conf +++ b/docker/dev/supervisord.conf @@ -34,7 +34,7 @@ autostart=true autorestart=true stopasgroup=true killasgroup=true -numprocs=8 +numprocs=1 redirect_stderr=true stdout_logfile=/var/www/html/storage/logs/worker.log stopwaitsecs=3600