feat: able to disable container healthchecks

fix: dockerfile based deployments have hc off by default
This commit is contained in:
Andras Bacsai 2023-10-01 18:14:13 +02:00
parent a922f2fedf
commit 0e1bcceb8e
6 changed files with 74 additions and 19 deletions

View File

@ -59,6 +59,7 @@ CMD ["nginx", "-g", "daemon off;"]
'environment_id' => $environment->id, 'environment_id' => $environment->id,
'destination_id' => $destination->id, 'destination_id' => $destination->id,
'destination_type' => $destination_class, 'destination_type' => $destination_class,
'health_check_enabled' => false,
'source_id' => 0, 'source_id' => 0,
'source_type' => GithubApp::class 'source_type' => GithubApp::class
]); ]);

View File

@ -9,6 +9,7 @@ class HealthChecks extends Component
public $resource; public $resource;
protected $rules = [ protected $rules = [
'resource.health_check_enabled' => 'boolean',
'resource.health_check_path' => 'string', 'resource.health_check_path' => 'string',
'resource.health_check_port' => 'nullable|string', 'resource.health_check_port' => 'nullable|string',
'resource.health_check_host' => 'string', 'resource.health_check_host' => 'string',
@ -22,12 +23,19 @@ class HealthChecks extends Component
'resource.health_check_start_period' => 'integer', 'resource.health_check_start_period' => 'integer',
]; ];
public function instantSave()
{
$this->resource->save();
$this->emit('success', 'Health check updated.');
}
public function submit() public function submit()
{ {
try { try {
$this->validate(); $this->validate();
$this->resource->save(); $this->resource->save();
$this->emit('saved'); $this->emit('success', 'Health check updated.');
} catch (\Throwable $e) { } catch (\Throwable $e) {
return handleError($e, $this); return handleError($e, $this);
} }

View File

@ -303,6 +303,10 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
} }
private function health_check() private function health_check()
{ {
if ($this->application->isHealthcheckDisabled()) {
$this->newVersionIsHealthy = true;
return;
}
ray('New container name: ', $this->container_name); ray('New container name: ', $this->container_name);
if ($this->container_name) { if ($this->container_name) {
$counter = 0; $counter = 0;
@ -573,6 +577,9 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
] ]
] ]
]; ];
if ($this->application->isHealthcheckDisabled()) {
data_forget($docker_compose, 'services.' . $this->container_name . '.healthcheck');
}
if (count($this->application->ports_mappings_array) > 0 && $this->pull_request_id === 0) { if (count($this->application->ports_mappings_array) > 0 && $this->pull_request_id === 0) {
$docker_compose['services'][$this->container_name]['ports'] = $this->application->ports_mappings_array; $docker_compose['services'][$this->container_name]['ports'] = $this->application->ports_mappings_array;
} }

View File

@ -231,4 +231,12 @@ class Application extends BaseModel
} }
return true; return true;
} }
public function isHealthcheckDisabled(): bool
{
if (data_get($this, 'dockerfile') || data_get($this, 'build_pack') === 'dockerfile' || data_get($this,'health_check_enabled') === false) {
ray('dockerfile');
return true;
}
return false;
}
} }

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('applications', function (Blueprint $table) {
$table->boolean('health_check_enabled')->default(true);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('applications', function (Blueprint $table) {
$table->dropColumn('health_check_enabled');
});
}
};

View File

@ -5,6 +5,9 @@
</div> </div>
<div class="pb-4">Define how your resource's health should be checked.</div> <div class="pb-4">Define how your resource's health should be checked.</div>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="w-32">
<x-forms.checkbox instantSave id="resource.health_check_enabled" label="Enabled" />
</div>
<div class="flex gap-2"> <div class="flex gap-2">
<x-forms.input id="resource.health_check_method" placeholder="GET" label="Method" required /> <x-forms.input id="resource.health_check_method" placeholder="GET" label="Method" required />