refactor: CPU config to millicores, fix replica health, reorder tabs
- Rename cpuShares to cpuRequest (millicores), cpuLimit from cores to millicores. ResolvedContainerConfig translates to Docker-native units via dockerCpuShares() and dockerCpuQuota() helpers. Future K8s orchestrator can pass millicores through directly. - Fix waitForAnyHealthy to wait for ALL replicas instead of returning on first healthy one. Prevents false DEGRADED status with 2+ replicas. - Default app detail to Configuration tab (was Overview) - Reorder config sub-tabs: Monitoring, Resources, Variables, Traces & Taps, Route Recording Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -331,7 +331,7 @@ function DefaultResourcesSection({ environment, onSave, saving }: {
|
||||
const [editing, setEditing] = useState(false);
|
||||
const [memoryLimit, setMemoryLimit] = useState('');
|
||||
const [memoryReserve, setMemoryReserve] = useState('');
|
||||
const [cpuShares, setCpuShares] = useState('');
|
||||
const [cpuRequest, setCpuRequest] = useState('');
|
||||
const [cpuLimit, setCpuLimit] = useState('');
|
||||
const [routingMode, setRoutingMode] = useState(String(defaults.routingMode ?? 'path'));
|
||||
const [routingDomain, setRoutingDomain] = useState(String(defaults.routingDomain ?? ''));
|
||||
@@ -341,7 +341,7 @@ function DefaultResourcesSection({ environment, onSave, saving }: {
|
||||
useEffect(() => {
|
||||
setMemoryLimit(String(defaults.memoryLimitMb ?? ''));
|
||||
setMemoryReserve(String(defaults.memoryReserveMb ?? ''));
|
||||
setCpuShares(String(defaults.cpuShares ?? ''));
|
||||
setCpuRequest(String(defaults.cpuRequest ?? ''));
|
||||
setCpuLimit(String(defaults.cpuLimit ?? ''));
|
||||
setRoutingMode(String(environment.defaultContainerConfig.routingMode ?? 'path'));
|
||||
setRoutingDomain(String(environment.defaultContainerConfig.routingDomain ?? ''));
|
||||
@@ -353,7 +353,7 @@ function DefaultResourcesSection({ environment, onSave, saving }: {
|
||||
function handleCancel() {
|
||||
setMemoryLimit(String(defaults.memoryLimitMb ?? ''));
|
||||
setMemoryReserve(String(defaults.memoryReserveMb ?? ''));
|
||||
setCpuShares(String(defaults.cpuShares ?? ''));
|
||||
setCpuRequest(String(defaults.cpuRequest ?? ''));
|
||||
setCpuLimit(String(defaults.cpuLimit ?? ''));
|
||||
setRoutingMode(String(defaults.routingMode ?? 'path'));
|
||||
setRoutingDomain(String(defaults.routingDomain ?? ''));
|
||||
@@ -366,8 +366,8 @@ function DefaultResourcesSection({ environment, onSave, saving }: {
|
||||
await onSave({
|
||||
memoryLimitMb: memoryLimit ? parseInt(memoryLimit) : null,
|
||||
memoryReserveMb: memoryReserve ? parseInt(memoryReserve) : null,
|
||||
cpuShares: cpuShares ? parseInt(cpuShares) : null,
|
||||
cpuLimit: cpuLimit ? parseFloat(cpuLimit) : null,
|
||||
cpuRequest: cpuRequest ? parseInt(cpuRequest) : null,
|
||||
cpuLimit: cpuLimit ? parseInt(cpuLimit) : null,
|
||||
routingMode,
|
||||
routingDomain: routingDomain || null,
|
||||
serverUrl: serverUrl || null,
|
||||
@@ -393,15 +393,15 @@ function DefaultResourcesSection({ environment, onSave, saving }: {
|
||||
? <Input value={memoryReserve} onChange={(e) => setMemoryReserve(e.target.value)} placeholder="e.g. 256" style={{ width: 100 }} />
|
||||
: <span className={styles.metaValue}>{defaults.memoryReserveMb ? `${defaults.memoryReserveMb} MB` : '—'}</span>}
|
||||
|
||||
<span className={styles.metaLabel}>CPU Shares</span>
|
||||
<span className={styles.metaLabel}>CPU Request</span>
|
||||
{editing
|
||||
? <Input value={cpuShares} onChange={(e) => setCpuShares(e.target.value)} placeholder="e.g. 512" style={{ width: 100 }} />
|
||||
: <span className={styles.metaValue}>{String(defaults.cpuShares ?? '—')}</span>}
|
||||
? <Input value={cpuRequest} onChange={(e) => setCpuRequest(e.target.value)} placeholder="e.g. 500" style={{ width: 100 }} />
|
||||
: <span className={styles.metaValue}>{defaults.cpuRequest ? `${defaults.cpuRequest}m` : '—'}</span>}
|
||||
|
||||
<span className={styles.metaLabel}>CPU Limit</span>
|
||||
{editing
|
||||
? <Input value={cpuLimit} onChange={(e) => setCpuLimit(e.target.value)} placeholder="e.g. 1.0" style={{ width: 100 }} />
|
||||
: <span className={styles.metaValue}>{defaults.cpuLimit ? `${defaults.cpuLimit} cores` : '—'}</span>}
|
||||
? <Input value={cpuLimit} onChange={(e) => setCpuLimit(e.target.value)} placeholder="e.g. 1000" style={{ width: 100 }} />
|
||||
: <span className={styles.metaValue}>{defaults.cpuLimit ? `${defaults.cpuLimit}m` : '—'}</span>}
|
||||
|
||||
<span className={styles.metaLabel}>Routing Mode</span>
|
||||
{editing
|
||||
|
||||
Reference in New Issue
Block a user