This commit is contained in:
Andras Bacsai 2023-03-30 20:19:11 +02:00
parent 19ec042a0a
commit 12ef88b90f
7 changed files with 33 additions and 12 deletions

View File

@ -2,6 +2,7 @@
namespace App\Console; namespace App\Console;
use App\Jobs\ContainerStatusJob;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@ -12,6 +13,7 @@ class Kernel extends ConsoleKernel
*/ */
protected function schedule(Schedule $schedule): void protected function schedule(Schedule $schedule): void
{ {
$schedule->job(new ContainerStatusJob)->everyMinute();
// $schedule->command('inspire')->hourly(); // $schedule->command('inspire')->hourly();
} }

View File

@ -50,7 +50,15 @@ public function deployment()
{ {
$deployment_uuid = request()->route('deployment_uuid'); $deployment_uuid = request()->route('deployment_uuid');
$application = Application::where('uuid', request()->route('application_uuid'))->first(); $project = session('currentTeam')->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first();
if (!$project) {
return redirect()->route('home');
}
$environment = $project->load(['environments'])->environments->where('name', request()->route('environment_name'))->first()->load(['applications']);
if (!$environment) {
return redirect()->route('home');
}
$application = $environment->applications->where('uuid', request()->route('application_uuid'))->first();
if (!$application) { if (!$application) {
return redirect()->route('home'); return redirect()->route('home');
} }

View File

@ -27,6 +27,13 @@ class DeployApplication extends Component
protected $destination; protected $destination;
protected $source; protected $source;
public function mount($application_uuid) {
$this->application_uuid = $application_uuid;
}
public function render()
{
return view('livewire.deploy-application');
}
private function execute_in_builder(string $command) private function execute_in_builder(string $command)
{ {
if ($this->application->settings->is_debug) { if ($this->application->settings->is_debug) {
@ -46,7 +53,6 @@ private function generate_docker_compose()
'services' => [ 'services' => [
$this->application->uuid => [ $this->application->uuid => [
'image' => "{$this->application->uuid}:TAG", 'image' => "{$this->application->uuid}:TAG",
'expose' => $this->application->ports_exposes,
'container_name' => $this->application->uuid, 'container_name' => $this->application->uuid,
'restart' => 'always', 'restart' => 'always',
'labels' => $this->set_labels_for_applications(), 'labels' => $this->set_labels_for_applications(),
@ -234,12 +240,16 @@ public function deploy()
$deploymentUrl = "$currentUrl/deployment/$this->deployment_uuid"; $deploymentUrl = "$currentUrl/deployment/$this->deployment_uuid";
return redirect($deploymentUrl); return redirect($deploymentUrl);
} }
public function cancel()
public function stop()
{ {
$application = Application::where('uuid', $this->application_uuid)->first();
$destination = $application->destination->getMorphClass()::where('id', $application->destination->id)->first();
$command[] = "docker rm -f {$application->uuid} >/dev/null 2>&1";
remoteProcess($command, $destination->server, null, $application);
}
public function checkStatus() {
ContainerStatusJob::dispatch(); ContainerStatusJob::dispatch();
} }
public function render()
{
return view('livewire.deploy-application');
}
} }

View File

@ -46,13 +46,13 @@ public function handle(): void
}); });
$found_application->status = $container['State']; $found_application->status = $container['State'];
$found_application->save(); $found_application->save();
Log::info('Found application: ' . $found_application->uuid . ' settings status to: ' . $found_application->status); // Log::info('Found application: ' . $found_application->uuid . ' settings status to: ' . $found_application->status);
} }
} }
foreach ($not_found_applications as $not_found_application) { foreach ($not_found_applications as $not_found_application) {
$not_found_application->status = 'exited'; $not_found_application->status = 'exited';
$not_found_application->save(); $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 . ' settings status to: ' . $not_found_application->status);
} }
} catch (\Exception $e) { } catch (\Exception $e) {
Log::error($e->getMessage()); Log::error($e->getMessage());

View File

@ -1,4 +1,5 @@
<div> <div>
<button wire:click='deploy'>Deploy</button> <button wire:click='deploy'>Deploy</button>
<button wire:click='cancel'>Cancel</button> <button wire:click='stop'>Stop</button>
<button wire:click='checkStatus'>CheckStatus</button>
</div> </div>

View File

@ -1,5 +1,5 @@
<div> <div>
@isset($activity?->id) @isset($activity?->id)
<pre style="width: 100%;overflow-y: scroll;" @if ($isKeepAliveOn) wire:poll.750ms="polling" @endif>{{ data_get($activity, 'description') }}</pre> <pre style="width: 100%;overflow-y: scroll;" @if ($isKeepAliveOn) wire:poll.750ms="polling" @endif>{{ data_get($activity, 'description') ?? 'Logs will be here soon...' }}</pre>
@endisset @endisset
</div> </div>

View File

@ -24,7 +24,7 @@
Route::get('/project/{project_uuid}/{environment_name}', [ProjectController::class, 'resources'])->name('project.resources'); Route::get('/project/{project_uuid}/{environment_name}', [ProjectController::class, 'resources'])->name('project.resources');
Route::get('/project/{project_uuid}/{environment_name}/application/{application_uuid}', [ProjectController::class, 'application'])->name('project.application'); Route::get('/project/{project_uuid}/{environment_name}/application/{application_uuid}', [ProjectController::class, 'application'])->name('project.application');
// Route::get('/project/{project_uuid}/{environment_name}/application/{application_uuid}/deployment/{deployment_uuid}', [ProjectController::class, 'deployment'])->name('project.deployment'); Route::get('/project/{project_uuid}/{environment_name}/application/{application_uuid}/deployment/{deployment_uuid}', [ProjectController::class, 'deployment'])->name('project.deployment');
// Route::get('/database/{database_uuid}', [ProjectController::class, 'database'])->name('project.database'); // Route::get('/database/{database_uuid}', [ProjectController::class, 'database'])->name('project.database');
// Route::get('//service/{service_uuid}', [ProjectController::class, 'service'])->name('project.service'); // Route::get('//service/{service_uuid}', [ProjectController::class, 'service'])->name('project.service');