netgescon-master/app/Http/Controllers/Admin/SystemDebugController.php

157 lines
4.6 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Route;
class SystemDebugController extends Controller
{
public function index()
{
$systemStatus = $this->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';
}
}