100 lines
3.1 KiB
PHP
100 lines
3.1 KiB
PHP
<?php
|
|
|
|
use App\Jobs\Monitoring\WorkerHeartbeatJob;
|
|
use App\Services\System\BackupManagementService;
|
|
use App\Services\System\MaintenanceManagementService;
|
|
use App\Services\SystemConfig\SystemConfigService;
|
|
use Illuminate\Foundation\Inspiring;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\Schedule;
|
|
|
|
Artisan::command('inspire', function () {
|
|
$this->comment(Inspiring::quote());
|
|
})->purpose('Display an inspiring quote');
|
|
|
|
/**
|
|
* 1. Maintenance Mode Auto-Release
|
|
*/
|
|
Schedule::call(function () {
|
|
app(MaintenanceManagementService::class)->autoCheckAndRelease();
|
|
})->everyMinute();
|
|
|
|
/**
|
|
* 2. Queue Worker Heartbeat (Monitoring)
|
|
*/
|
|
Schedule::job(new WorkerHeartbeatJob)->everyMinute();
|
|
|
|
/**
|
|
* 3. Activity Log, Notification & Model Cleanup
|
|
*/
|
|
Schedule::command('activitylog:clean')->daily();
|
|
Schedule::command('model:prune')->dailyAt('03:00');
|
|
Schedule::command('telescope:prune --hours=48')->dailyAt('03:05');
|
|
|
|
/**
|
|
* 4. Weekly Backup Verification
|
|
*/
|
|
Schedule::command('backups:verify')->weeklyOn(1, '07:00'); // Every Monday at 07:00
|
|
|
|
/**
|
|
* 5. Weekly Permission Audit (logged only, no auto-fix)
|
|
*/
|
|
Schedule::command('permissions:audit --json')->weeklyOn(1, '07:05')
|
|
->sendOutputTo(storage_path('logs/permission-audit.log'));
|
|
|
|
/**
|
|
* 3. Dynamic Database Backup
|
|
*/
|
|
$settings = app(SystemConfigService::class)->all();
|
|
if (filter_var($settings['backup_db_enabled'] ?? false, FILTER_VALIDATE_BOOLEAN)) {
|
|
$frequency = $settings['backup_db_frequency'] ?? 'daily';
|
|
$time = $settings['backup_db_time'] ?? '02:00';
|
|
|
|
$backupTask = Schedule::call(function () {
|
|
$service = app(BackupManagementService::class);
|
|
$service->applyDynamicConfig();
|
|
$service->createBackup();
|
|
})->name('automated-db-backup')->withoutOverlapping();
|
|
|
|
$cleanupTask = Schedule::command('backup:clean')->name('automated-db-cleanup')->withoutOverlapping();
|
|
|
|
// Map frequency using switch for multi-statement arms
|
|
switch ($frequency) {
|
|
case 'hourly':
|
|
// hourlyAt expects minutes (0-59), not a time string (HH:mm)
|
|
$minute = (int) (str_contains($time, ':') ? explode(':', $time)[1] : $time);
|
|
$backupTask->hourlyAt($minute);
|
|
$cleanupTask->hourlyAt($minute);
|
|
break;
|
|
case 'weekly':
|
|
$backupTask->weeklyOn(0, $time);
|
|
$cleanupTask->weeklyOn(0, $time);
|
|
break;
|
|
case 'monthly':
|
|
$backupTask->monthlyOn(1, $time);
|
|
$cleanupTask->monthlyOn(1, $time);
|
|
break;
|
|
case 'daily':
|
|
default:
|
|
$backupTask->dailyAt($time);
|
|
$cleanupTask->dailyAt($time);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 6. System Health Check Monitoring
|
|
*/
|
|
Schedule::command('system:health-check')->everyThirtyMinutes();
|
|
|
|
/**
|
|
* 7. AI System Health Digest (Weekly)
|
|
*/
|
|
Schedule::command('system:send-digest')->weeklyOn(1, '08:00');
|
|
|
|
/**
|
|
* 8. Real-time Dashboard Stats Broadcast (every minute via scheduler)
|
|
* Reverb pushes fresh stats to all connected admin.monitoring subscribers.
|
|
*/
|
|
Schedule::command('dashboard:broadcast-stats')->everyMinute()->withoutOverlapping();
|