mirror of
https://github.com/getnamingo/registry.git
synced 2025-05-28 09:50:28 +02:00
Added server health page in CP
This commit is contained in:
parent
d04d940a14
commit
0d8eda7ea8
7 changed files with 306 additions and 2 deletions
|
@ -7,6 +7,7 @@ use Psr\Http\Message\ResponseInterface as Response;
|
|||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Nyholm\Psr7\Stream;
|
||||
use Utopia\System\System;
|
||||
|
||||
class ReportsController extends Controller
|
||||
{
|
||||
|
@ -100,4 +101,125 @@ class ReportsController extends Controller
|
|||
// Output the CSV content to the response body
|
||||
return $response->withBody($stream);
|
||||
}
|
||||
|
||||
public function serverHealth(Request $request, Response $response)
|
||||
{
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
return $response->withHeader('Location', '/dashboard')->withStatus(302);
|
||||
}
|
||||
|
||||
$csrfTokenName = $this->container->get('csrf')->getTokenName();
|
||||
$csrfTokenValue = $this->container->get('csrf')->getTokenValue();
|
||||
|
||||
$system = new System();
|
||||
|
||||
$serverHealth = [
|
||||
'getCPUCores' => $system->getCPUCores(),
|
||||
'getCPUUsage' => $system->getCPUUsage(),
|
||||
'getMemoryTotal' => $system->getMemoryTotal(),
|
||||
'getMemoryFree' => $system->getMemoryFree(),
|
||||
'getDiskTotal' => $system->getDiskTotal(),
|
||||
'getDiskFree' => $system->getDiskFree()
|
||||
];
|
||||
|
||||
$logFile = '/var/log/namingo/backup.log';
|
||||
|
||||
// Check if the file exists
|
||||
if (!file_exists($logFile)) {
|
||||
$backupSummary = "Backup log file not found.";
|
||||
} else {
|
||||
// Read and decode JSON file
|
||||
$logData = json_decode(file_get_contents($logFile), true);
|
||||
|
||||
if (json_last_error() !== JSON_ERROR_NONE || !is_array($logData)) {
|
||||
$backupSummary = "Invalid JSON format in backup log file.";
|
||||
} else {
|
||||
// Start building the summary
|
||||
$backupSummary = "Backup Summary:\n";
|
||||
$backupSummary .= "Timestamp: " . date('Y-m-d H:i:s', $logData['timestamp'] ?? time()) . "\n";
|
||||
$backupSummary .= "Duration: " . round($logData['duration'] ?? 0, 2) . " seconds\n";
|
||||
$backupSummary .= "Total Backups: " . ($logData['backupCount'] ?? 0) . "\n";
|
||||
$backupSummary .= "Failed Backups: " . ($logData['backupFailed'] ?? 0) . "\n";
|
||||
$backupSummary .= "Errors: " . ($logData['errorCount'] ?? 0) . "\n";
|
||||
|
||||
if (!empty($logData['backups'])) {
|
||||
foreach ($logData['backups'] as $backup) {
|
||||
$backupSummary .= "\nBackup: " . ($backup['name'] ?? 'Unknown') . "\n";
|
||||
$backupSummary .= "- Status: " . (($backup['status'] ?? 1) === 0 ? 'Success' : 'Failed') . "\n";
|
||||
$backupSummary .= "- Checks: " . ($backup['checks']['executed'] ?? 0) . " executed, " . ($backup['checks']['failed'] ?? 0) . " failed\n";
|
||||
$backupSummary .= "- Syncs: " . ($backup['syncs']['executed'] ?? 0) . " executed, " . ($backup['syncs']['failed'] ?? 0) . " failed\n";
|
||||
$backupSummary .= "- Cleanup: " . ($backup['cleanup']['executed'] ?? 0) . " executed, " . ($backup['cleanup']['failed'] ?? 0) . " failed\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($logData['debug'])) {
|
||||
$backupSummary .= "\nDebug Info (last 5 entries):\n";
|
||||
$debugEntries = array_slice($logData['debug'], -5);
|
||||
foreach ($debugEntries as $entry) {
|
||||
$backupSummary .= "- $entry\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->view->render($response, 'admin/reports/serverHealth.twig', [
|
||||
'serverHealth' => $serverHealth,
|
||||
'csrfTokenName' => $csrfTokenName,
|
||||
'csrfTokenValue' => $csrfTokenValue,
|
||||
'backupLog' => nl2br(htmlspecialchars($backupSummary)),
|
||||
]);
|
||||
}
|
||||
|
||||
public function clearCache(Request $request, Response $response): Response
|
||||
{
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
return $response->withHeader('Location', '/dashboard')->withStatus(302);
|
||||
}
|
||||
|
||||
$result = [
|
||||
'success' => true,
|
||||
'message' => 'Cache cleared successfully!',
|
||||
];
|
||||
$cacheDir = '/var/www/cp/cache';
|
||||
|
||||
try {
|
||||
// Check if the cache directory exists
|
||||
if (!is_dir($cacheDir)) {
|
||||
throw new RuntimeException('Cache directory does not exist.');
|
||||
}
|
||||
|
||||
// Iterate through the files and directories in the cache directory
|
||||
$files = new \RecursiveIteratorIterator(
|
||||
new \RecursiveDirectoryIterator($cacheDir, \RecursiveDirectoryIterator::SKIP_DOTS),
|
||||
\RecursiveIteratorIterator::CHILD_FIRST
|
||||
);
|
||||
|
||||
foreach ($files as $fileinfo) {
|
||||
// Check if the parent directory name is exactly two letters/numbers long
|
||||
if (preg_match('/^[a-zA-Z0-9]{2}$/', $fileinfo->getFilename()) ||
|
||||
preg_match('/^[a-zA-Z0-9]{2}$/', basename(dirname($fileinfo->getPathname())))) {
|
||||
$action = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
|
||||
$action($fileinfo->getRealPath());
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the two-letter/number directories themselves
|
||||
$dirs = new \DirectoryIterator($cacheDir);
|
||||
foreach ($dirs as $dir) {
|
||||
if ($dir->isDir() && !$dir->isDot() && preg_match('/^[a-zA-Z0-9]{2}$/', $dir->getFilename())) {
|
||||
rmdir($dir->getRealPath());
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$result = [
|
||||
'success' => false,
|
||||
'message' => 'Error clearing cache: ' . $e->getMessage(),
|
||||
];
|
||||
}
|
||||
|
||||
// Respond with the result as JSON
|
||||
$response->getBody()->write(json_encode($result));
|
||||
return $response->withHeader('Content-Type', 'application/json')->withStatus(200);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue