mirror of
https://github.com/cupcakearmy/coolify.git
synced 2024-10-22 16:14:22 +02:00
Refactor deployment cancellation and queue management
This commit is contained in:
parent
7a7157c155
commit
8901bb5df8
@ -42,22 +42,25 @@ public function cancel()
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$kill_command = "docker rm -f {$this->application_deployment_queue->deployment_uuid}";
|
$kill_command = "docker rm -f {$this->application_deployment_queue->deployment_uuid}";
|
||||||
$previous_logs = json_decode($this->application_deployment_queue->logs, associative: true, flags: JSON_THROW_ON_ERROR);
|
if ($this->application_deployment_queue->logs) {
|
||||||
|
$previous_logs = json_decode($this->application_deployment_queue->logs, associative: true, flags: JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
$new_log_entry = [
|
$new_log_entry = [
|
||||||
'command' => $kill_command,
|
'command' => $kill_command,
|
||||||
'output' => "Deployment cancelled by user.",
|
'output' => "Deployment cancelled by user.",
|
||||||
'type' => 'stderr',
|
'type' => 'stderr',
|
||||||
'order' => count($previous_logs) + 1,
|
'order' => count($previous_logs) + 1,
|
||||||
'timestamp' => Carbon::now('UTC'),
|
'timestamp' => Carbon::now('UTC'),
|
||||||
'hidden' => false,
|
'hidden' => false,
|
||||||
];
|
];
|
||||||
$previous_logs[] = $new_log_entry;
|
$previous_logs[] = $new_log_entry;
|
||||||
$this->application_deployment_queue->update([
|
$this->application_deployment_queue->update([
|
||||||
'logs' => json_encode($previous_logs, flags: JSON_THROW_ON_ERROR),
|
'logs' => json_encode($previous_logs, flags: JSON_THROW_ON_ERROR),
|
||||||
]);
|
]);
|
||||||
instant_remote_process([$kill_command], $this->server);
|
instant_remote_process([$kill_command], $this->server);
|
||||||
|
}
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
|
ray($e);
|
||||||
return handleError($e, $this);
|
return handleError($e, $this);
|
||||||
} finally {
|
} finally {
|
||||||
$this->application_deployment_queue->update([
|
$this->application_deployment_queue->update([
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
function queue_application_deployment(int $application_id, int $server_id, string $deployment_uuid, int | null $pull_request_id = 0, string $commit = 'HEAD', bool $force_rebuild = false, bool $is_webhook = false, bool $restart_only = false, ?string $git_type = null, bool $is_new_deployment = false)
|
function queue_application_deployment(int $application_id, int $server_id, string $deployment_uuid, int | null $pull_request_id = 0, string $commit = 'HEAD', bool $force_rebuild = false, bool $is_webhook = false, bool $restart_only = false, ?string $git_type = null, bool $is_new_deployment = false)
|
||||||
{
|
{
|
||||||
$server = Application::find($application_id)->destination->server;
|
$server = Application::find($application_id)->destination->server;
|
||||||
$deployments_per_server = ApplicationDeploymentQueue::where('server_id', $server_id)->where('status', 'queued')->orWhere('status', 'in_progress')->get();
|
|
||||||
|
|
||||||
$deployment = ApplicationDeploymentQueue::create([
|
$deployment = ApplicationDeploymentQueue::create([
|
||||||
'application_id' => $application_id,
|
'application_id' => $application_id,
|
||||||
'server_id' => $server_id,
|
'server_id' => $server_id,
|
||||||
@ -24,13 +22,14 @@ function queue_application_deployment(int $application_id, int $server_id, strin
|
|||||||
'commit' => $commit,
|
'commit' => $commit,
|
||||||
'git_type' => $git_type
|
'git_type' => $git_type
|
||||||
]);
|
]);
|
||||||
$deployments = ApplicationDeploymentQueue::where('application_id', $application_id);
|
$deployments_per_server = ApplicationDeploymentQueue::where('server_id', $server_id)->whereIn('status', ['in_progress', 'queued'])->get();
|
||||||
|
|
||||||
|
$deployments = ApplicationDeploymentQueue::where('application_id', $application_id)->where('server_id', $server_id);
|
||||||
$queued_deployments = $deployments->where('status', 'queued')->get()->sortByDesc('created_at');
|
$queued_deployments = $deployments->where('status', 'queued')->get()->sortByDesc('created_at');
|
||||||
$running_deployments = $deployments->where('status', 'in_progress')->get()->sortByDesc('created_at');
|
$running_deployments = $deployments->where('status', 'in_progress')->get()->sortByDesc('created_at');
|
||||||
|
|
||||||
ray($deployments_per_server->count(), $server->settings->concurrent_builds);
|
ray("serverId:{$server->id}", "concurrentBuilds:{$server->settings->concurrent_builds}", "deployments:{$deployments_per_server->count()}", "queued:{$queued_deployments->count()}", "running:{$running_deployments->count()}");
|
||||||
ray('Q:' . $queued_deployments->count() . 'R:' . $running_deployments->count() . '| Queuing deployment: ' . $deployment_uuid . ' of applicationID: ' . $application_id . ' pull request: ' . $pull_request_id . ' with commit: ' . $commit . ' and is it forced: ' . $force_rebuild);
|
// ray('Q:' . $queued_deployments->count() . 'R:' . $running_deployments->count() . '| Queuing deployment: ' . $deployment_uuid . ' of applicationID: ' . $application_id . ' pull request: ' . $pull_request_id . ' with commit: ' . $commit . ' and is it forced: ' . $force_rebuild);
|
||||||
|
|
||||||
if ($queued_deployments->count() > 1) {
|
if ($queued_deployments->count() > 1) {
|
||||||
$queued_deployments = $queued_deployments->skip(1);
|
$queued_deployments = $queued_deployments->skip(1);
|
||||||
@ -42,7 +41,7 @@ function queue_application_deployment(int $application_id, int $server_id, strin
|
|||||||
if ($running_deployments->count() > 0) {
|
if ($running_deployments->count() > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($deployments_per_server->count() >= $server->settings->concurrent_builds) {
|
if ($deployments_per_server->count() > $server->settings->concurrent_builds) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($is_new_deployment) {
|
if ($is_new_deployment) {
|
||||||
@ -59,7 +58,10 @@ function queue_application_deployment(int $application_id, int $server_id, strin
|
|||||||
|
|
||||||
function queue_next_deployment(Application $application, bool $isNew = false)
|
function queue_next_deployment(Application $application, bool $isNew = false)
|
||||||
{
|
{
|
||||||
$next_found = ApplicationDeploymentQueue::where('status', 'queued')->get()->sortBy('created_at')->first();
|
$server_id = $application->destination->server_id;
|
||||||
|
$next_found = ApplicationDeploymentQueue::where('server_id', $server_id)->where('status', 'queued')->get()->sortBy('created_at')->first();;
|
||||||
|
// $next_found = ApplicationDeploymentQueue::where('status', 'queued')->get()->sortBy('created_at')->first();
|
||||||
|
ray($next_found, $server_id);
|
||||||
if ($next_found) {
|
if ($next_found) {
|
||||||
if ($isNew) {
|
if ($isNew) {
|
||||||
dispatch(new ApplicationDeploymentNewJob(
|
dispatch(new ApplicationDeploymentNewJob(
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
use App\Actions\Database\StartPostgresql;
|
use App\Actions\Database\StartPostgresql;
|
||||||
use App\Actions\Database\StartRedis;
|
use App\Actions\Database\StartRedis;
|
||||||
use App\Actions\Service\StartService;
|
use App\Actions\Service\StartService;
|
||||||
|
use App\Models\ApplicationDeploymentQueue;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Providers\RouteServiceProvider;
|
use App\Providers\RouteServiceProvider;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@ -23,9 +24,28 @@
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
$middlewares = ['auth:sanctum'];
|
||||||
|
if (isDev()) {
|
||||||
|
$middlewares = [];
|
||||||
|
}
|
||||||
|
|
||||||
Route::get('/health', function () {
|
Route::get('/health', function () {
|
||||||
return 'OK';
|
return 'OK';
|
||||||
});
|
});
|
||||||
|
Route::group([
|
||||||
|
'middleware' => $middlewares,
|
||||||
|
'prefix' => 'v1'
|
||||||
|
], function () {
|
||||||
|
Route::get('/deployments', function() {
|
||||||
|
return ApplicationDeploymentQueue::whereIn("status", ["in_progress", "queued"])->get([
|
||||||
|
"id",
|
||||||
|
"server_id",
|
||||||
|
"status"
|
||||||
|
])->groupBy("server_id")->map(function($item) {
|
||||||
|
return $item;
|
||||||
|
})->toArray();
|
||||||
|
});
|
||||||
|
});
|
||||||
Route::group([
|
Route::group([
|
||||||
'middleware' => ['auth:sanctum'],
|
'middleware' => ['auth:sanctum'],
|
||||||
'prefix' => 'v1'
|
'prefix' => 'v1'
|
||||||
|
Loading…
Reference in New Issue
Block a user