157 lines
4.6 KiB
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';
|
|
}
|
|
}
|