/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Console/Commands/TapSyncStatsCommand.php
130 строк
6 KB
vivanenko
run taps
29 май 2025, 21:05
29 май 2025, 21:05
b91be9d
Код
Авторство
О чём код?
<?php namespace App\Console\Commands; use App\Services\TapStatusSyncService; use Illuminate\Console\Command; /** * Команда для получения статистики синхронизации тапов */ class TapSyncStatsCommand extends Command { /** * The name and signature of the console command. */ protected $signature = 'taps:sync-stats {--cleanup : Выполнить очистку устаревших данных}'; /** * The console command description. */ protected $description = 'Показывает статистику синхронизации статусов тапов'; public function __construct( private readonly TapStatusSyncService $tapStatusSyncService ) { parent::__construct(); } /** * Execute the console command. */ public function handle(): int { $this->info('📊 Статистика синхронизации тапов'); $this->newLine(); // Получение статистики $stats = $this->tapStatusSyncService->getSyncStatistics(); // Отображение основной статистики $this->displayMainStats($stats); // Выполнение очистки если запрошено if ($this->option('cleanup')) { $this->newLine(); $this->info('🧹 Выполняем очистку устаревших данных...'); $cleanupResult = $this->tapStatusSyncService->cleanupSyncData(); $this->table( ['Параметр', 'Значение'], [ ['Очищено тапов', $cleanupResult['cleaned_taps']], ['Граница очистки', $cleanupResult['cutoff_date']], ] ); $this->info('✅ Очистка завершена'); } return self::SUCCESS; } /** * Отображение основной статистики */ private function displayMainStats(array $stats): void { // Основная таблица статистики $this->table( ['Метрика', 'Значение', 'Описание'], [ ['Всего тапов', $stats['total_taps'], 'Общее количество тапов в системе'], ['Активных тапов', $stats['active_taps'], 'Тапы со статусом ACTIVE'], ['Устаревших статусов', $stats['stale_taps'], 'Не проверялись > 5 минут'], ['Недавно проверенных', $stats['recently_checked'], 'Проверены за последние 5 минут'], ['% устаревших', $stats['stale_percentage'] . '%', 'Доля тапов с устаревшими статусами'], ['Покрытие синхронизации', $stats['sync_coverage'] . '%', 'Доля недавно проверенных тапов'], ['Время проверки', $stats['last_check_time'], 'Время выполнения команды'], ] ); // Индикатор здоровья системы $this->displayHealthIndicator($stats); } /** * Отображение индикатора здоровья системы */ private function displayHealthIndicator(array $stats): void { $this->newLine(); $syncCoverage = $stats['sync_coverage']; $stalePercentage = $stats['stale_percentage']; if ($syncCoverage >= 90 && $stalePercentage <= 10) { $this->info('🟢 Статус системы: ОТЛИЧНЫЙ'); $this->line(' Синхронизация работает стабильно'); } elseif ($syncCoverage >= 70 && $stalePercentage <= 30) { $this->warn('🟡 Статус системы: ХОРОШИЙ'); $this->line(' Рекомендуется увеличить частоту синхронизации'); } elseif ($syncCoverage >= 50 && $stalePercentage <= 50) { $this->warn('🟠 Статус системы: УДОВЛЕТВОРИТЕЛЬНЫЙ'); $this->line(' Требуется внимание к процессу синхронизации'); } else { $this->error('🔴 Статус системы: КРИТИЧЕСКИЙ'); $this->line(' Немедленно проверьте работу синхронизации!'); } // Рекомендации $this->newLine(); $this->info('💡 Рекомендации:'); if ($stalePercentage > 20) { $this->line(' • Увеличьте частоту выполнения команды taps:sync-statuses'); } if ($stats['active_taps'] > 0 && $syncCoverage < 80) { $this->line(' • Проверьте работу Supervisor и доступность процессов'); } if ($stats['total_taps'] > 100 && $syncCoverage < 90) { $this->line(' • Рассмотрите возможность оптимизации batch size в синхронизации'); } $this->line(' • Для принудительной синхронизации: php artisan taps:sync-statuses --force'); $this->line(' • Для очистки данных: php artisan taps:sync-stats --cleanup'); } }