Fix jwt-token
This commit is contained in:
@@ -105,6 +105,7 @@ const System = () => {
|
|||||||
case 'cache': return '⚡';
|
case 'cache': return '⚡';
|
||||||
case 'proxy': return '🌐';
|
case 'proxy': return '🌐';
|
||||||
case 'application': return '📱';
|
case 'application': return '📱';
|
||||||
|
case 'app': return '📱';
|
||||||
case 'logging': return '📋';
|
case 'logging': return '📋';
|
||||||
case 'monitoring': return '📊';
|
case 'monitoring': return '📊';
|
||||||
default: return '📦';
|
default: return '📦';
|
||||||
@@ -116,13 +117,33 @@ const System = () => {
|
|||||||
case 'database': return 'border-l-blue-500';
|
case 'database': return 'border-l-blue-500';
|
||||||
case 'cache': return 'border-l-yellow-500';
|
case 'cache': return 'border-l-yellow-500';
|
||||||
case 'proxy': return 'border-l-green-500';
|
case 'proxy': return 'border-l-green-500';
|
||||||
case 'application': return 'border-l-purple-500';
|
case 'application': case 'app': return 'border-l-purple-500';
|
||||||
case 'logging': return 'border-l-orange-500';
|
case 'logging': return 'border-l-orange-500';
|
||||||
case 'monitoring': return 'border-l-red-500';
|
case 'monitoring': return 'border-l-red-500';
|
||||||
default: return 'border-l-gray-500';
|
default: return 'border-l-gray-500';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getStatusColor = (status) => {
|
||||||
|
switch (status) {
|
||||||
|
case 'healthy': case 'responding': return 'text-green-600';
|
||||||
|
case 'timeout': case 'warning': return 'text-yellow-600';
|
||||||
|
case 'unreachable': case 'error': case 'health_check_failed': return 'text-red-600';
|
||||||
|
case 'running': case 'Up': return 'text-green-600';
|
||||||
|
default: return 'text-gray-600';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getStatusIcon = (status) => {
|
||||||
|
switch (status) {
|
||||||
|
case 'healthy': case 'responding': return '✅';
|
||||||
|
case 'timeout': return '⏱️';
|
||||||
|
case 'unreachable': case 'error': return '❌';
|
||||||
|
case 'running': case 'Up': return '🟢';
|
||||||
|
default: return '⚪';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={`bg-gray-50 rounded-lg p-4 border-l-4 ${getTypeColor(metrics.type)} border border-gray-200`}>
|
<div className={`bg-gray-50 rounded-lg p-4 border-l-4 ${getTypeColor(metrics.type)} border border-gray-200`}>
|
||||||
<div className="flex items-center justify-between mb-3">
|
<div className="flex items-center justify-between mb-3">
|
||||||
@@ -137,54 +158,32 @@ const System = () => {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{metrics.error || metrics.status === 'health_check_failed' || metrics.status === 'unreachable' ? (
|
|
||||||
<div className="text-sm text-red-600">
|
|
||||||
<div className="font-medium">
|
|
||||||
{metrics.status === 'health_check_failed' ? 'Health Check Failed' :
|
|
||||||
metrics.status === 'unreachable' ? 'Unreachable' :
|
|
||||||
metrics.status === 'timeout' ? 'Timeout' : 'Not Available'}
|
|
||||||
</div>
|
|
||||||
<div className="text-xs mt-1">{metrics.error || metrics.message}</div>
|
|
||||||
</div>
|
|
||||||
) : metrics.status === 'responding' ? (
|
|
||||||
<div className="space-y-2 text-sm">
|
<div className="space-y-2 text-sm">
|
||||||
<div className="flex justify-between">
|
<div className="flex justify-between items-center">
|
||||||
<span className="text-gray-500">Status</span>
|
<span className="text-gray-500">Status</span>
|
||||||
<span className="font-medium text-green-600">Responding</span>
|
<span className={`font-medium flex items-center ${getStatusColor(metrics.status)}`}>
|
||||||
</div>
|
<span className="mr-1">{getStatusIcon(metrics.status)}</span>
|
||||||
<div className="text-xs text-gray-500">
|
{metrics.status === 'health_check_failed' ? 'Failed' :
|
||||||
Basic connectivity confirmed
|
metrics.status.charAt(0).toUpperCase() + metrics.status.slice(1)}
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
) : metrics.source === 'docker_compose' || metrics.source === 'process_list' ? (
|
|
||||||
<div className="space-y-2 text-sm">
|
|
||||||
<div className="flex justify-between">
|
|
||||||
<span className="text-gray-500">Status</span>
|
|
||||||
<span className={`font-medium ${
|
|
||||||
metrics.status === 'running' ? 'text-green-600' :
|
|
||||||
metrics.status === 'Up' ? 'text-green-600' : 'text-red-600'
|
|
||||||
}`}>
|
|
||||||
{metrics.status}
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{metrics.health && (
|
|
||||||
<div className="flex justify-between">
|
{metrics.error && (
|
||||||
<span className="text-gray-500">Health</span>
|
<div className="bg-red-50 border border-red-200 rounded p-2">
|
||||||
<span className="font-medium">{metrics.health}</span>
|
<div className="text-xs font-medium text-red-800">Error Details:</div>
|
||||||
|
<div className="text-xs text-red-700 mt-1">{metrics.error}</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{metrics.ports && (
|
|
||||||
<div className="flex justify-between">
|
{metrics.raw && metrics.status === 'healthy' && (
|
||||||
<span className="text-gray-500">Ports</span>
|
<div className="bg-green-50 border border-green-200 rounded p-2">
|
||||||
<span className="font-medium text-xs">{metrics.ports}</span>
|
<div className="text-xs text-green-700">Response: {metrics.raw.trim()}</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className="text-xs text-blue-600 mt-2">
|
|
||||||
Source: {metrics.source.replace('_', ' ').toUpperCase()}
|
{/* Show resource metrics if available */}
|
||||||
</div>
|
{metrics.cpu && (
|
||||||
</div>
|
<>
|
||||||
) : (
|
|
||||||
<div className="space-y-2 text-sm">
|
|
||||||
<div className="flex justify-between">
|
<div className="flex justify-between">
|
||||||
<span className="text-gray-500">CPU</span>
|
<span className="text-gray-500">CPU</span>
|
||||||
<span className="font-medium">{metrics.cpu}</span>
|
<span className="font-medium">{metrics.cpu}</span>
|
||||||
@@ -201,13 +200,29 @@ const System = () => {
|
|||||||
<span className="text-gray-500">Disk I/O</span>
|
<span className="text-gray-500">Disk I/O</span>
|
||||||
<span className="font-medium text-xs">{metrics.disk}</span>
|
<span className="font-medium text-xs">{metrics.disk}</span>
|
||||||
</div>
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{metrics.health && metrics.health !== 'unknown' && (
|
||||||
|
<div className="flex justify-between">
|
||||||
|
<span className="text-gray-500">Health</span>
|
||||||
|
<span className="font-medium">{metrics.health}</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{metrics.ports && (
|
||||||
|
<div className="flex justify-between">
|
||||||
|
<span className="text-gray-500">Ports</span>
|
||||||
|
<span className="font-medium text-xs">{metrics.ports}</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{metrics.source && (
|
{metrics.source && (
|
||||||
<div className="text-xs text-blue-600 mt-2">
|
<div className="text-xs text-blue-600 mt-2 border-t pt-2">
|
||||||
Source: {metrics.source.replace('_', ' ').toUpperCase()}
|
Source: {metrics.source.replace('_', ' ').toUpperCase()}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -326,6 +341,25 @@ const System = () => {
|
|||||||
<span className="text-sm text-gray-500">Uptime</span>
|
<span className="text-sm text-gray-500">Uptime</span>
|
||||||
<span className="text-sm font-medium">{systemInfo.platform.uptime}</span>
|
<span className="text-sm font-medium">{systemInfo.platform.uptime}</span>
|
||||||
</div>
|
</div>
|
||||||
|
{/* Container Health Summary */}
|
||||||
|
<div className="border-t pt-2 mt-3">
|
||||||
|
<div className="text-xs text-gray-500 mb-1">Service Health</div>
|
||||||
|
<div className="flex space-x-1">
|
||||||
|
{Object.entries(systemInfo.containers).map(([name, metrics]) => {
|
||||||
|
const isHealthy = metrics.status === 'healthy' || metrics.status === 'responding';
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
key={name}
|
||||||
|
className={`w-3 h-3 rounded-full ${
|
||||||
|
isHealthy ? 'bg-green-400' :
|
||||||
|
metrics.status === 'timeout' ? 'bg-yellow-400' : 'bg-red-400'
|
||||||
|
}`}
|
||||||
|
title={`${name}: ${metrics.status}`}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</StatusCard>
|
</StatusCard>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user