Skip to content

Commit dcdcbc3

Browse files
committed
feat: #225, #226 new workers definition ui and scheduled workers
1 parent 3482f7d commit dcdcbc3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1201
-964
lines changed

Diff for: .github/workflows/release-please.yml

+7-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,13 @@ jobs:
8080
service: 'ptah-server-prod'
8181
processes: |
8282
- name: svc
83-
dockerImage: ghcr.io/ptah-sh/ptah-server:${{ needs.release-please.outputs.tag_name }}
83+
workers:
84+
- name: main
85+
dockerImage: ghcr.io/ptah-sh/ptah-server:${{ needs.release-please.outputs.tag_name }}
86+
- name: scheduler
87+
dockerImage: ghcr.io/ptah-sh/ptah-server:${{ needs.release-please.outputs.tag_name }}
88+
- name: queue
89+
dockerImage: ghcr.io/ptah-sh/ptah-server:${{ needs.release-please.outputs.tag_name }}
8490
envVars:
8591
- name: SENTRY_RELEASE
8692
value: ${{ needs.release-please.outputs.tag_name }}

Diff for: api-nodes/Http/Controllers/MetricsController.php

-4
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,6 @@ public function __invoke(Request $request, Logger $log, Node $node)
8888
],
8989
];
9090

91-
$log->info('Services:', [
92-
'services' => $services,
93-
]);
94-
9591
foreach ($request->all() as $metricsDoc) {
9692
if ($metricsDoc === null) {
9793
continue;

Diff for: app/Console/Commands/DispatchProcessBackupTask.php

-115
This file was deleted.

Diff for: app/Console/Commands/DispatchVolumeBackupTask.php

-118
This file was deleted.

Diff for: app/Console/Commands/ExecuteScheduledWorker.php

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
3+
namespace App\Console\Commands;
4+
5+
use App\Models\Node;
6+
use App\Models\NodeTaskGroup;
7+
use App\Models\NodeTaskGroupType;
8+
use App\Models\NodeTaskType;
9+
use App\Models\Service;
10+
use Exception;
11+
use Illuminate\Console\Command;
12+
use Illuminate\Support\Facades\DB;
13+
14+
class ExecuteScheduledWorker extends Command
15+
{
16+
protected $signature = 'app:workers:execute {--service-id=} {--process=} {--worker=}';
17+
18+
protected $description = 'Execute a scheduled worker';
19+
20+
public function handle()
21+
{
22+
DB::transaction(function () {
23+
$this->executeWorker();
24+
});
25+
}
26+
27+
protected function executeWorker(): void
28+
{
29+
/* @var Service $service */
30+
$service = Service::findOrFail($this->option('service-id'));
31+
32+
$deployment = $service->latestDeployment;
33+
34+
$process = $deployment->data->findProcess($this->option('process'));
35+
if ($process === null) {
36+
throw new Exception("Could not find process {$this->option('process')} in deployment {$deployment->id}.");
37+
}
38+
39+
$worker = $process->findWorker($this->option('worker'));
40+
if ($worker === null) {
41+
throw new Exception("Could not find worker {$this->option('worker')} in process {$process->name}.");
42+
}
43+
44+
$node = $process->placementNodeId ? Node::findOrFail($process->placementNodeId) : null;
45+
46+
$taskGroup = NodeTaskGroup::create([
47+
'type' => NodeTaskGroupType::LaunchService,
48+
'swarm_id' => $service->swarm_id,
49+
'node_id' => $node->id,
50+
'invoker_id' => $deployment->latestTaskGroup->invoker_id,
51+
'team_id' => $service->team_id,
52+
]);
53+
54+
$tasks = [];
55+
56+
$tasks = [
57+
...$tasks,
58+
...$worker->asNodeTasks($deployment, $process, desiredReplicas: 1),
59+
];
60+
61+
if ($worker->backupOptions) {
62+
$s3Storage = $node->swarm->data->findS3Storage($worker->backupOptions->s3StorageId);
63+
if ($s3Storage === null) {
64+
throw new Exception("Could not find S3 storage {$worker->backupOptions->s3StorageId} in swarm {$node->swarm_id}.");
65+
}
66+
67+
$archiveFormat = $worker->backupOptions->archive?->format->value;
68+
69+
$date = now()->format('Y-m-d_His');
70+
71+
$ext = $archiveFormat ? ".$archiveFormat" : '';
72+
$backupFilePath = "/{$service->slug}/{$process->name}/{$worker->name}/{$service->slug}-{$process->name}-{$worker->name}-{$date}$ext";
73+
74+
$tasks[] = [
75+
'type' => NodeTaskType::UploadS3File,
76+
'meta' => [
77+
'serviceId' => $service->id,
78+
'destPath' => $backupFilePath,
79+
],
80+
'payload' => [
81+
'Archive' => [
82+
'Enabled' => $worker->backupOptions->archive !== null,
83+
'Format' => $archiveFormat,
84+
],
85+
'S3StorageConfigName' => $s3Storage->dockerName,
86+
'VolumeSpec' => [
87+
'Type' => 'volume',
88+
'Source' => $worker->backupOptions->backupVolume->dockerName,
89+
'Target' => $worker->backupOptions->backupVolume->path,
90+
],
91+
'SrcFilePath' => $worker->backupOptions->backupVolume->path,
92+
'DestFilePath' => $backupFilePath,
93+
'RemoveSrcFile' => true,
94+
],
95+
];
96+
}
97+
98+
$taskGroup->tasks()->createMany($tasks);
99+
}
100+
}

0 commit comments

Comments
 (0)