Files
citrus-cms/resources/views/admin-ajax/disk-usage.blade.php
T
2026-04-28 21:15:09 +03:00

356 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@php
/**
* @api-readonly
* System disk usage information
*/
use Illuminate\Support\Facades\Cache;
$result = Cache::remember('system_disk_usage_stats', 3600, function() {
// Disk kullanım durumunu topla
$diskInfo = [];
$directorySizes = [];
// Ana disk bilgilerini al
$diskUsage = shell_exec('df -h / 2>/dev/null | tail -n 1');
$diskParts = preg_split('/\s+/', trim($diskUsage));
$diskInfo = [
'filesystem' => $diskParts[0] ?? 'Unknown',
'total_size' => $diskParts[1] ?? '0',
'used' => $diskParts[2] ?? '0',
'available' => $diskParts[3] ?? '0',
'use_percentage' => str_replace('%', '', $diskParts[4] ?? '0'),
'mount_point' => $diskParts[5] ?? '/'
];
// Ana dizinlerin boyutlarını al
$directories = [
'/var' => 'var',
'/usr' => 'usr',
'/root' => 'root',
'/opt' => 'opt',
'/tmp' => 'tmp',
'/boot' => 'boot',
'/etc' => 'etc'
];
foreach($directories as $path => $name) {
$size = shell_exec("du -sh $path 2>/dev/null | cut -f1");
if($size) {
$directorySizes[] = [
'directory' => $name,
'path' => $path,
'size_text' => trim($size),
'size_bytes' => convertToBytes(trim($size))
];
}
}
// /var alt dizinlerini al
$varSubDirs = [
'/var/lib' => 'var/lib (Database)',
'/var/www' => 'var/www (Web Files)',
'/var/log' => 'var/log (Log Files)',
'/var/cache' => 'var/cache (Cache)'
];
$varDetails = [];
foreach($varSubDirs as $path => $name) {
$size = shell_exec("du -sh $path 2>/dev/null | cut -f1");
if($size) {
$varDetails[] = [
'directory' => $name,
'path' => $path,
'size_text' => trim($size),
'size_bytes' => convertToBytes(trim($size))
];
}
}
// Web projeleri detayları
$webProjects = [];
$webPath = '/var/www/html';
if(is_dir($webPath)) {
$projects = glob($webPath . '/*', GLOB_ONLYDIR);
foreach($projects as $project) {
$projectName = basename($project);
$size = shell_exec("du -sh '$project' 2>/dev/null | cut -f1");
if($size) {
$webProjects[] = [
'project' => $projectName,
'path' => $project,
'size_text' => trim($size),
'size_bytes' => convertToBytes(trim($size))
];
}
}
// Boyuta göre sırala
usort($webProjects, function($a, $b) {
return $b['size_bytes'] - $a['size_bytes'];
});
}
// Log dosyaları detayları
$logFiles = [];
$logPath = '/var/log';
if(is_dir($logPath)) {
$logs = shell_exec("du -sh $logPath/* 2>/dev/null | sort -hr | head -10");
if($logs) {
$logLines = explode("\n", trim($logs));
foreach($logLines as $line) {
if(trim($line)) {
$parts = preg_split('/\s+/', trim($line), 2);
if(count($parts) >= 2) {
$logFiles[] = [
'file' => basename($parts[1]),
'path' => $parts[1],
'size_text' => $parts[0],
'size_bytes' => convertToBytes($parts[0])
];
}
}
}
}
}
// Bellek bilgilerini al
$memInfo = shell_exec('free -h | grep Mem');
$memParts = preg_split('/\s+/', trim($memInfo));
$memoryInfo = [
'total' => $memParts[1] ?? '0',
'used' => $memParts[2] ?? '0',
'free' => $memParts[3] ?? '0',
'shared' => $memParts[4] ?? '0',
'buff_cache' => $memParts[5] ?? '0',
'available' => $memParts[6] ?? '0'
];
// Chart için veri hazırla
$chartData = [];
foreach($directorySizes as $dir) {
if($dir['size_bytes'] > 1000000) { // 1MB'dan büyük olanları göster
$chartData[] = [
'directory' => $dir['directory'],
'size' => round($dir['size_bytes'] / (1024*1024*1024), 2), // GB cinsinden
'percentage' => round(($dir['size_bytes'] / convertToBytes($diskInfo['total_size'])) * 100, 1)
];
}
}
// /var dizini detaylı analizi
$varDetailedAnalysis = [];
// MySQL veritabanları detayı
$mysqlSize = shell_exec("du -sh /var/lib/mysql 2>/dev/null | cut -f1");
if($mysqlSize) {
$varDetailedAnalysis[] = [
'component' => 'MySQL Databases',
'path' => '/var/lib/mysql',
'size_text' => trim($mysqlSize),
'size_bytes' => convertToBytes(trim($mysqlSize)),
'description' => 'Veritabanı dosyaları'
];
}
// Web projeleri detayı
$webSize = shell_exec("du -sh /var/www 2>/dev/null | cut -f1");
if($webSize) {
$varDetailedAnalysis[] = [
'component' => 'Web Projects',
'path' => '/var/www',
'size_text' => trim($webSize),
'size_bytes' => convertToBytes(trim($webSize)),
'description' => 'Web sitesi dosyaları'
];
}
// Log dosyaları
$logSize = shell_exec("du -sh /var/log 2>/dev/null | cut -f1");
if($logSize) {
$varDetailedAnalysis[] = [
'component' => 'System Logs',
'path' => '/var/log',
'size_text' => trim($logSize),
'size_bytes' => convertToBytes(trim($logSize)),
'description' => 'Sistem günlük dosyaları'
];
}
// Cache dosyaları
$cacheSize = shell_exec("du -sh /var/cache 2>/dev/null | cut -f1");
if($cacheSize) {
$varDetailedAnalysis[] = [
'component' => 'Cache Files',
'path' => '/var/cache',
'size_text' => trim($cacheSize),
'size_bytes' => convertToBytes(trim($cacheSize)),
'description' => 'Önbellek dosyaları'
];
}
// /var/lib altında mysql dışındaki dosyalar
$libOthersSize = shell_exec("du -sh /var/lib 2>/dev/null | cut -f1");
$libOthersBytes = 0;
if($libOthersSize && $mysqlSize) {
$libTotalBytes = convertToBytes(trim($libOthersSize));
$mysqlBytes = convertToBytes(trim($mysqlSize));
$libOthersBytes = $libTotalBytes - $mysqlBytes;
if($libOthersBytes > 1000000) { // 1MB'dan büyükse ekle
$varDetailedAnalysis[] = [
'component' => 'Other System Data',
'path' => '/var/lib (others)',
'size_text' => formatBytes($libOthersBytes),
'size_bytes' => $libOthersBytes,
'description' => 'Sistem paketleri ve diğer veriler'
];
}
}
// /var altında diğer klasörler
$varOthers = shell_exec("du -sh /var/* 2>/dev/null | grep -v '/var/lib\|/var/www\|/var/log\|/var/cache' | sort -hr");
if($varOthers) {
$otherLines = explode("\n", trim($varOthers));
$othersTotalBytes = 0;
foreach($otherLines as $line) {
if(trim($line)) {
$parts = preg_split('/\s+/', trim($line), 2);
if(count($parts) >= 2) {
$othersTotalBytes += convertToBytes($parts[0]);
}
}
}
if($othersTotalBytes > 1000000) { // 1MB'dan büyükse ekle
$varDetailedAnalysis[] = [
'component' => 'Other Directories',
'path' => '/var (others)',
'size_text' => formatBytes($othersTotalBytes),
'size_bytes' => $othersTotalBytes,
'description' => 'Diğer sistem klasörleri'
];
}
}
// Web Projects Chart Data (sadece /var/www projeleri)
$webProjectsChartData = [];
foreach($webProjects as $project) {
$webProjectsChartData[] = [
'project' => $project['project'],
'size' => round($project['size_bytes'] / (1024*1024*1024), 2), // GB cinsinden
'percentage' => round(($project['size_bytes'] / convertToBytes(trim($webSize))) * 100, 1),
'description' => 'Web Project'
];
}
// System Components Chart Data (MySQL, Logs, Cache, vs.)
$systemComponentsData = [];
// MySQL
if($mysqlSize) {
$systemComponentsData[] = [
'component' => 'MySQL Databases',
'size' => round(convertToBytes(trim($mysqlSize)) / (1024*1024*1024), 2),
'percentage' => round((convertToBytes(trim($mysqlSize)) / convertToBytes('332G')) * 100, 1),
'description' => 'Veritabanı dosyaları',
'color' => '#ff6b6b'
];
}
// System Logs
if($logSize) {
$systemComponentsData[] = [
'component' => 'System Logs',
'size' => round(convertToBytes(trim($logSize)) / (1024*1024*1024), 2),
'percentage' => round((convertToBytes(trim($logSize)) / convertToBytes('332G')) * 100, 1),
'description' => 'Sistem günlük dosyaları',
'color' => '#4ecdc4'
];
}
// Cache Files
if($cacheSize) {
$systemComponentsData[] = [
'component' => 'Cache Files',
'size' => round(convertToBytes(trim($cacheSize)) / (1024*1024*1024), 2),
'percentage' => round((convertToBytes(trim($cacheSize)) / convertToBytes('332G')) * 100, 1),
'description' => 'Önbellek dosyaları',
'color' => '#45b7d1'
];
}
// Other System Data (var/lib içinde mysql dışı + diğer var klasörleri)
$otherSystemBytes = 0;
// /var/lib içinde mysql dışı
if($libOthersSize && $mysqlSize) {
$libTotalBytes = convertToBytes(trim($libOthersSize));
$mysqlBytes = convertToBytes(trim($mysqlSize));
$libOthersBytes = $libTotalBytes - $mysqlBytes;
$otherSystemBytes += $libOthersBytes;
}
// /var altında diğer klasörler (lib, www, log, cache dışı)
$varOthers = shell_exec("du -sh /var/* 2>/dev/null | grep -v '/var/lib\|/var/www\|/var/log\|/var/cache' | sort -hr");
if($varOthers) {
$otherLines = explode("\n", trim($varOthers));
foreach($otherLines as $line) {
if(trim($line)) {
$parts = preg_split('/\s+/', trim($line), 2);
if(count($parts) >= 2) {
$otherSystemBytes += convertToBytes($parts[0]);
}
}
}
}
if($otherSystemBytes > 1000000) { // 1MB'dan büyükse ekle
$systemComponentsData[] = [
'component' => 'Other System Data',
'size' => round($otherSystemBytes / (1024*1024*1024), 2),
'percentage' => round(($otherSystemBytes / convertToBytes('332G')) * 100, 1),
'description' => 'Sistem paketleri ve diğer klasörler',
'color' => '#96ceb4'
];
}
return [
'success' => true,
'timestamp' => date('Y-m-d H:i:s'),
'disk_info' => $diskInfo,
'directory_sizes' => $directorySizes,
'var_details' => $varDetails,
'var_detailed_analysis' => $varDetailedAnalysis,
'web_projects' => $webProjects,
'log_files' => $logFiles,
'memory_info' => $memoryInfo,
'chart_data' => $chartData,
'web_projects_chart_data' => $webProjectsChartData,
'system_components_chart_data' => $systemComponentsData
];
});
// Bytes'ı human readable'a çeviren fonksiyon
function convertToBytes($size) {
$size = trim($size);
$unit = strtoupper(substr($size, -1));
$value = floatval($size);
switch($unit) {
case 'K': return $value * 1024;
case 'M': return $value * 1024 * 1024;
case 'G': return $value * 1024 * 1024 * 1024;
case 'T': return $value * 1024 * 1024 * 1024 * 1024;
default: return $value;
}
}
// formatBytes() fonksiyonu zaten sistemde mevcut, kullanacağız
// Sonucu JSON olarak döndür
header('Content-Type: application/json');
echo json_encode($result, JSON_PRETTY_PRINT);
@endphp