feat: Update auto update and update check frequencies in settings

This commit is contained in:
Andras Bacsai 2024-08-07 11:55:16 +02:00
parent d3085e1ade
commit 5a82395bb7
4 changed files with 44 additions and 71 deletions

View File

@ -76,11 +76,11 @@ private function schedule_updates($schedule)
{ {
$settings = InstanceSettings::get(); $settings = InstanceSettings::get();
$updateCheckFrequency = $settings->update_check_frequency ?? '0 0 * * *'; $updateCheckFrequency = $settings->update_check_frequency;
$schedule->job(new CheckForUpdatesJob)->cron($updateCheckFrequency)->onOneServer(); $schedule->job(new CheckForUpdatesJob)->cron($updateCheckFrequency)->onOneServer();
if ($settings->is_auto_update_enabled) { if ($settings->is_auto_update_enabled) {
$autoUpdateFrequency = $settings->auto_update_frequency ?? '0 11,23 * * *'; $autoUpdateFrequency = $settings->auto_update_frequency;
$schedule->job(new UpdateCoolifyJob)->cron($autoUpdateFrequency)->onOneServer(); $schedule->job(new UpdateCoolifyJob)->cron($autoUpdateFrequency)->onOneServer();
} }
} }

View File

@ -5,7 +5,6 @@
use App\Jobs\CheckForUpdatesJob; use App\Jobs\CheckForUpdatesJob;
use App\Models\InstanceSettings; use App\Models\InstanceSettings;
use App\Models\Server; use App\Models\Server;
use Cron\CronExpression;
use Livewire\Component; use Livewire\Component;
class Index extends Component class Index extends Component
@ -39,8 +38,8 @@ class Index extends Component
'settings.instance_name' => 'nullable', 'settings.instance_name' => 'nullable',
'settings.allowed_ips' => 'nullable', 'settings.allowed_ips' => 'nullable',
'settings.is_auto_update_enabled' => 'boolean', 'settings.is_auto_update_enabled' => 'boolean',
'auto_update_frequency' => 'nullable|string', 'auto_update_frequency' => 'string',
'update_check_frequency' => 'nullable|string', 'update_check_frequency' => 'string',
]; ];
protected $validationAttributes = [ protected $validationAttributes = [
@ -97,14 +96,20 @@ public function submit()
} }
$this->validate(); $this->validate();
if ($this->is_auto_update_enabled && ! $this->validateCronExpression($this->auto_update_frequency)) { if ($this->is_auto_update_enabled && ! validate_cron_expression($this->auto_update_frequency)) {
$this->dispatch('error', 'Invalid Cron / Human expression for Auto Update Frequency.'); $this->dispatch('error', 'Invalid Cron / Human expression for Auto Update Frequency.');
if (empty($this->auto_update_frequency)) {
$this->auto_update_frequency = '0 0 * * *';
}
return; return;
} }
if (! $this->validateCronExpression($this->update_check_frequency)) { if (! validate_cron_expression($this->update_check_frequency)) {
$this->dispatch('error', 'Invalid Cron / Human expression for Update Check Frequency.'); $this->dispatch('error', 'Invalid Cron / Human expression for Update Check Frequency.');
if (empty($this->update_check_frequency)) {
$this->update_check_frequency = '0 * * * *';
}
return; return;
} }
@ -149,40 +154,6 @@ public function submit()
} }
} }
private function validateCronExpression($expression): bool
{
if (empty($expression)) {
return true;
}
$isValid = false;
try {
$cronExpression = new CronExpression($expression);
$isValid = $cronExpression->getNextRunDate() !== false;
} catch (\Exception $e) {
$isValid = false;
}
if (isset(VALID_CRON_STRINGS[$expression])) {
$isValid = true;
}
return $isValid;
}
public function updatedAutoUpdateFrequency()
{
if (! $this->validateCronExpression($this->auto_update_frequency)) {
$this->dispatch('error', 'Invalid Cron / Human expression for Auto Update Frequency.');
}
}
public function updatedUpdateCheckFrequency()
{
if (! $this->validateCronExpression($this->update_check_frequency)) {
$this->dispatch('error', 'Invalid Cron / Human expression for Update Check Frequency.');
}
}
public function checkManually() public function checkManually()
{ {
CheckForUpdatesJob::dispatchSync(); CheckForUpdatesJob::dispatchSync();

View File

@ -12,8 +12,8 @@
public function up(): void public function up(): void
{ {
Schema::table('instance_settings', function (Blueprint $table) { Schema::table('instance_settings', function (Blueprint $table) {
$table->string('auto_update_frequency')->default('0 0 * * *')->nullable(); $table->string('auto_update_frequency')->default('0 0 * * *');
$table->string('update_check_frequency')->default('0 * * * *')->nullable(); $table->string('update_check_frequency')->default('0 * * * *');
$table->boolean('new_version_available')->default(false); $table->boolean('new_version_available')->default(false);
}); });
} }

View File

@ -39,7 +39,6 @@
<x-forms.input id="settings.allowed_ips" label="Allowed IPs" <x-forms.input id="settings.allowed_ips" label="Allowed IPs"
helper="Allowed IP lists for the API. A comma separated list of IPs. Empty means you allow from everywhere." helper="Allowed IP lists for the API. A comma separated list of IPs. Empty means you allow from everywhere."
placeholder="1.1.1.1,8.8.8.8" /> placeholder="1.1.1.1,8.8.8.8" />
</form>
<h4 class="pt-6">Advanced</h4> <h4 class="pt-6">Advanced</h4>
<div class="text-right md:w-96"> <div class="text-right md:w-96">
@ -59,14 +58,17 @@
</div> </div>
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<div class="flex items-end gap-2"> <div class="flex items-end gap-2">
<x-forms.input id="update_check_frequency" label="Update Check Frequency" placeholder="0 * * * *" <x-forms.input required id="update_check_frequency" label="Update Check Frequency"
placeholder="0 * * * *"
helper="Cron expression for update check frequency (check for new Coolify versions and pull new Service Templates from CDN). Default is every hour." /> helper="Cron expression for update check frequency (check for new Coolify versions and pull new Service Templates from CDN). Default is every hour." />
<x-forms.button wire:click='checkManually'>Check Manually</x-forms.button> <x-forms.button wire:click='checkManually'>Check Manually</x-forms.button>
</div> </div>
@if (is_null(env('AUTOUPDATE', null)) && $is_auto_update_enabled) @if (is_null(env('AUTOUPDATE', null)) && $is_auto_update_enabled)
<x-forms.input id="auto_update_frequency" label="Auto Update Frequency" placeholder="0 0 * * *" <x-forms.input required id="auto_update_frequency" label="Auto Update Frequency" placeholder="0 0 * * *"
helper="Cron expression for auto update frequency (automatically update coolify). Default is every day at 00:00" /> helper="Cron expression for auto update frequency (automatically update coolify). Default is every day at 00:00" />
@endif @endif
</div> </div>
</form>
</div> </div>