/
DATKAI
/
ITCUP
Обзор
Документация
Войти
/
DATKAI
/
ITCUP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
app/Console/Commands/BackupMikrotikCommand.php
69 строк
2 KB
ITCUP Admin
feat(mikrotik): модуль бэкапа Mikrotik RouterOS
17 апр 2026, 10:46
17 апр 2026, 10:46
7ff4894
Код
Авторство
О чём код?
<?php namespace App\Console\Commands; use App\Models\MikrotikDevice; use App\Services\MikrotikBackupService; use Illuminate\Console\Command; class BackupMikrotikCommand extends Command { protected $signature = 'itcup:mikrotik-backup {device? : ID устройства. Если не указан — снимаются все по расписанию} {--force : Игнорировать расписание и снять бэкап со всех активных устройств}'; protected $description = 'Снимает бэкапы с Mikrotik-устройств'; public function handle(MikrotikBackupService $service): int { $deviceId = $this->argument('device'); if ($deviceId) { $device = MikrotikDevice::find($deviceId); if (!$device) { $this->error("Устройство #{$deviceId} не найдено"); return self::FAILURE; } $this->backupOne($service, $device); return self::SUCCESS; } $query = MikrotikDevice::query(); if (!$this->option('force')) { $query->where('schedule_enabled', true); } $devices = $query->get(); if ($devices->isEmpty()) { $this->line('Нет устройств для бэкапа.'); return self::SUCCESS; } foreach ($devices as $device) { if (!$this->option('force') && !$device->isDueForBackup()) { continue; } $this->backupOne($service, $device); } return self::SUCCESS; } protected function backupOne(MikrotikBackupService $service, MikrotikDevice $device): void { $this->info("→ {$device->name} ({$device->host})"); $results = $service->backup($device); foreach ($results as $backup) { $marker = $backup->status === 'success' ? '<fg=green>✓</>' : '<fg=red>✗</>'; $size = $backup->file_size ? number_format($backup->file_size) . ' байт' : ''; $err = $backup->error_message ? " ({$backup->error_message})" : ''; $this->line(" {$marker} {$backup->type} {$size}{$err}"); } if (empty($results)) { $this->line(' <fg=red>подключение не удалось</>'); } } }