Fix jwt-token
This commit is contained in:
@@ -103,24 +103,31 @@ const System = () => {
|
|||||||
<h4 className="font-medium text-gray-900 mb-3 truncate" title={name}>
|
<h4 className="font-medium text-gray-900 mb-3 truncate" title={name}>
|
||||||
{name.replace('drone-detection-', '').replace('uamils-', '')}
|
{name.replace('drone-detection-', '').replace('uamils-', '')}
|
||||||
</h4>
|
</h4>
|
||||||
<div className="space-y-2 text-sm">
|
{metrics.error ? (
|
||||||
<div className="flex justify-between">
|
<div className="text-sm text-red-600">
|
||||||
<span className="text-gray-500">CPU</span>
|
<div className="font-medium">Not Available</div>
|
||||||
<span className="font-medium">{metrics.cpu}</span>
|
<div className="text-xs mt-1">{metrics.message}</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between">
|
) : (
|
||||||
<span className="text-gray-500">Memory</span>
|
<div className="space-y-2 text-sm">
|
||||||
<span className="font-medium">{metrics.memory.percentage}</span>
|
<div className="flex justify-between">
|
||||||
|
<span className="text-gray-500">CPU</span>
|
||||||
|
<span className="font-medium">{metrics.cpu}</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex justify-between">
|
||||||
|
<span className="text-gray-500">Memory</span>
|
||||||
|
<span className="font-medium">{metrics.memory.percentage}</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex justify-between">
|
||||||
|
<span className="text-gray-500">Network I/O</span>
|
||||||
|
<span className="font-medium text-xs">{metrics.network}</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex justify-between">
|
||||||
|
<span className="text-gray-500">Disk I/O</span>
|
||||||
|
<span className="font-medium text-xs">{metrics.disk}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between">
|
)}
|
||||||
<span className="text-gray-500">Network I/O</span>
|
|
||||||
<span className="font-medium text-xs">{metrics.network}</span>
|
|
||||||
</div>
|
|
||||||
<div className="flex justify-between">
|
|
||||||
<span className="text-gray-500">Disk I/O</span>
|
|
||||||
<span className="font-medium text-xs">{metrics.disk}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -233,26 +240,33 @@ const System = () => {
|
|||||||
</StatusCard>
|
</StatusCard>
|
||||||
|
|
||||||
<StatusCard title="System Resources" icon={CpuChipIcon}>
|
<StatusCard title="System Resources" icon={CpuChipIcon}>
|
||||||
<div className="space-y-3">
|
{systemInfo.system.error ? (
|
||||||
<div>
|
<div className="text-center text-red-600">
|
||||||
<div className="flex justify-between text-sm mb-1">
|
<div className="font-medium">System metrics unavailable</div>
|
||||||
<span className="text-gray-500">CPU Usage</span>
|
<div className="text-xs mt-1">{systemInfo.system.message}</div>
|
||||||
<span className="font-medium">{systemInfo.system.cpu.usage}</span>
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="space-y-3">
|
||||||
|
<div>
|
||||||
|
<div className="flex justify-between text-sm mb-1">
|
||||||
|
<span className="text-gray-500">CPU Usage</span>
|
||||||
|
<span className="font-medium">{systemInfo.system.cpu.usage}</span>
|
||||||
|
</div>
|
||||||
|
<ProgressBar percentage={systemInfo.system.cpu.percentage} />
|
||||||
</div>
|
</div>
|
||||||
<ProgressBar percentage={systemInfo.system.cpu.percentage} />
|
<div>
|
||||||
</div>
|
<div className="flex justify-between text-sm mb-1">
|
||||||
<div>
|
<span className="text-gray-500">Memory</span>
|
||||||
<div className="flex justify-between text-sm mb-1">
|
<span className="font-medium">{systemInfo.system.memory.used} / {systemInfo.system.memory.total}</span>
|
||||||
<span className="text-gray-500">Memory</span>
|
</div>
|
||||||
<span className="font-medium">{systemInfo.system.memory.used} / {systemInfo.system.memory.total}</span>
|
<ProgressBar percentage={systemInfo.system.memory.percentage} />
|
||||||
|
</div>
|
||||||
|
<div className="flex justify-between text-sm">
|
||||||
|
<span className="text-gray-500">Disk</span>
|
||||||
|
<span className="font-medium text-xs">{systemInfo.system.disk}</span>
|
||||||
</div>
|
</div>
|
||||||
<ProgressBar percentage={systemInfo.system.memory.percentage} />
|
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between text-sm">
|
)}
|
||||||
<span className="text-gray-500">Disk</span>
|
|
||||||
<span className="font-medium text-xs">{systemInfo.system.disk}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</StatusCard>
|
</StatusCard>
|
||||||
|
|
||||||
<StatusCard title="Statistics" icon={ChartBarIcon}>
|
<StatusCard title="Statistics" icon={ChartBarIcon}>
|
||||||
@@ -290,11 +304,19 @@ const System = () => {
|
|||||||
{/* Container Metrics */}
|
{/* Container Metrics */}
|
||||||
<div className="mb-8">
|
<div className="mb-8">
|
||||||
<StatusCard title="Container Metrics" icon={ServerIcon}>
|
<StatusCard title="Container Metrics" icon={ServerIcon}>
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
{systemInfo.containers.error ? (
|
||||||
{Object.entries(systemInfo.containers).map(([name, metrics]) => (
|
<div className="text-center text-red-600 py-8">
|
||||||
<ContainerCard key={name} name={name} metrics={metrics} />
|
<XCircleIcon className="mx-auto h-12 w-12 text-red-400 mb-2" />
|
||||||
))}
|
<div className="font-medium">Docker containers not available</div>
|
||||||
</div>
|
<div className="text-sm mt-1">{systemInfo.containers.message}</div>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
||||||
|
{Object.entries(systemInfo.containers).map(([name, metrics]) => (
|
||||||
|
<ContainerCard key={name} name={name} metrics={metrics} />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</StatusCard>
|
</StatusCard>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -151,26 +151,9 @@ router.get('/system-info', async (req, res) => {
|
|||||||
}, {});
|
}, {});
|
||||||
} catch (dockerError) {
|
} catch (dockerError) {
|
||||||
console.log('Docker stats not available:', dockerError.message);
|
console.log('Docker stats not available:', dockerError.message);
|
||||||
// Fallback to mock data for development
|
|
||||||
containerMetrics = {
|
containerMetrics = {
|
||||||
'drone-detection-backend': {
|
error: 'Docker not available or containers not running',
|
||||||
cpu: '2.5%',
|
message: dockerError.message
|
||||||
memory: { usage: '256MB / 1GB', percentage: '25.6%' },
|
|
||||||
network: '1.2MB / 3.4MB',
|
|
||||||
disk: '45MB / 12MB'
|
|
||||||
},
|
|
||||||
'drone-detection-frontend': {
|
|
||||||
cpu: '0.8%',
|
|
||||||
memory: { usage: '128MB / 512MB', percentage: '25%' },
|
|
||||||
network: '800KB / 2.1MB',
|
|
||||||
disk: '12MB / 5MB'
|
|
||||||
},
|
|
||||||
'drone-detection-management': {
|
|
||||||
cpu: '1.2%',
|
|
||||||
memory: { usage: '192MB / 512MB', percentage: '37.5%' },
|
|
||||||
network: '500KB / 1.2MB',
|
|
||||||
disk: '8MB / 3MB'
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,9 +185,11 @@ router.get('/system-info', async (req, res) => {
|
|||||||
} catch (sysError) {
|
} catch (sysError) {
|
||||||
console.log('System metrics not available:', sysError.message);
|
console.log('System metrics not available:', sysError.message);
|
||||||
systemMetrics = {
|
systemMetrics = {
|
||||||
memory: { used: '1.2GB', total: '4GB', percentage: 30 },
|
error: 'System metrics not available',
|
||||||
cpu: { usage: '15.5%', percentage: 15.5 },
|
message: sysError.message,
|
||||||
disk: '2.1GB / 20GB (11%)'
|
memory: { used: 'N/A', total: 'N/A', percentage: 0 },
|
||||||
|
cpu: { usage: 'N/A', percentage: 0 },
|
||||||
|
disk: 'N/A'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,18 +246,21 @@ router.get('/system-info', async (req, res) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check SSL for main domains
|
// Check SSL for management host only
|
||||||
const sslChecks = await Promise.all([
|
const managementHost = 'management.dev.uggla.uamils.com';
|
||||||
checkSSLCert('dev.uggla.uamils.com'),
|
let sslStatus = {};
|
||||||
checkSSLCert('uamils-ab.dev.uggla.uamils.com'),
|
|
||||||
checkSSLCert('management.dev.uggla.uamils.com')
|
|
||||||
]);
|
|
||||||
|
|
||||||
const sslStatus = {
|
try {
|
||||||
'dev.uggla.uamils.com': sslChecks[0],
|
const sslCheck = await checkSSLCert(managementHost);
|
||||||
'uamils-ab.dev.uggla.uamils.com': sslChecks[1],
|
sslStatus[managementHost] = sslCheck;
|
||||||
'management.dev.uggla.uamils.com': sslChecks[2]
|
} catch (sslError) {
|
||||||
};
|
console.log('SSL check failed:', sslError.message);
|
||||||
|
sslStatus[managementHost] = {
|
||||||
|
status: 'error',
|
||||||
|
expiresAt: null,
|
||||||
|
error: 'SSL check failed: ' + sslError.message
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user