getSystemStatus(); return view('admin.debug.index', compact('systemStatus')); } public function scanDuplicates() { Artisan::call('netgescon:debug', ['--duplicates' => true]); $output = Artisan::output(); return response()->json([ 'success' => true, 'output' => $output, 'message' => 'Scansione duplicati completata' ]); } public function cleanDuplicates() { Artisan::call('netgescon:debug', ['--clean' => true]); $output = Artisan::output(); return response()->json([ 'success' => true, 'output' => $output, 'message' => 'Pulizia duplicati completata' ]); } public function verifyRoutes() { Artisan::call('netgescon:debug', ['--routes' => true]); $output = Artisan::output(); return response()->json([ 'success' => true, 'output' => $output, 'message' => 'Verifica route completata' ]); } public function checkModels() { Artisan::call('netgescon:debug', ['--models' => true]); $output = Artisan::output(); return response()->json([ 'success' => true, 'output' => $output, 'message' => 'Controllo model completato' ]); } public function fullScan() { Artisan::call('netgescon:debug', ['--scan' => true]); $output = Artisan::output(); return response()->json([ 'success' => true, 'output' => $output, 'message' => 'Scansione completa completata' ]); } public function generateReport() { Artisan::call('netgescon:debug', ['--report' => true]); $output = Artisan::output(); return response()->json([ 'success' => true, 'output' => $output, 'message' => 'Report generato con successo' ]); } public function getSystemStatus() { $status = [ 'php_version' => PHP_VERSION, 'laravel_version' => app()->version(), 'environment' => app()->environment(), 'debug_mode' => config('app.debug'), 'storage_writable' => is_writable(storage_path()), 'duplicates_folder_size' => $this->getFolderSize(base_path('_DUPLICATES_MOVED')), 'views_count' => $this->countFiles(resource_path('views'), 'blade.php'), 'controllers_count' => $this->countFiles(app_path('Http/Controllers')), 'models_count' => $this->countFiles(app_path('Models')), 'routes_count' => count(Route::getRoutes()), 'last_debug_scan' => $this->getLastDebugScan(), ]; return $status; } protected function getFolderSize($path) { if (!File::exists($path)) return 0; $size = 0; foreach (File::allFiles($path) as $file) { $size += $file->getSize(); } return $this->formatBytes($size); } protected function countFiles($path, $extension = 'php') { if (!File::exists($path)) return 0; $files = File::allFiles($path); if ($extension === 'php') { return count(array_filter($files, fn($file) => $file->getExtension() === 'php')); } if ($extension === 'blade.php') { return count(array_filter($files, fn($file) => str_ends_with($file->getFilename(), '.blade.php'))); } return count($files); } protected function formatBytes($size, $precision = 2) { $units = ['B', 'KB', 'MB', 'GB']; $base = log($size, 1024); return round(pow(1024, $base - floor($base)), $precision) . ' ' . $units[floor($base)]; } protected function getLastDebugScan() { $logFiles = File::glob(storage_path('logs/netgescon_debug_*.json')); if (empty($logFiles)) return 'Mai eseguita'; $latestFile = array_reduce($logFiles, function ($latest, $file) { return $latest === null || File::lastModified($file) > File::lastModified($latest) ? $file : $latest; }); return $latestFile ? date('d/m/Y H:i:s', File::lastModified($latestFile)) : 'Mai eseguita'; } }