ikinci temizlik tamamlandı
This commit is contained in:
@@ -0,0 +1,356 @@
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user