From 80181197afeb51cc82cd0442dac27bce4823cccc Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 16 Sep 2026 21:21:29 +0000 Subject: [PATCH 1/2] fix(admin): fix error handling and exit codes in admin CLI commands remove-all-instances: wrap per-instance call in inner try/catch so one failure doesn't abort remaining instances (Eyevinn/osaas-app#5672) remove-exceeding-tenant-instances: add instancesFailed/tenantsFailed counters and set non-zero exit code on any failure so admin-daily CronJob correctly records failures (Eyevinn/osaas-app#5673) Co-Authored-By: Claude --- packages/cli/src/admin/cmd.ts | 37 ++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/admin/cmd.ts b/packages/cli/src/admin/cmd.ts index 2de28f8..2358f6d 100644 --- a/packages/cli/src/admin/cmd.ts +++ b/packages/cli/src/admin/cmd.ts @@ -103,6 +103,8 @@ export default function cmdAdmin() { (tenant) => tenant.remainingTokens < -200 ); let instancesSuspended = 0; + let instancesFailed = 0; + let tenantsFailed = 0; const tenantsExceedingCount = tenantsExceeding.length; for (const tenant of tenantsExceeding) { if (tenantPlanMap[tenant.tenantId]?.planType === 'FREE') { @@ -129,6 +131,7 @@ export default function cmdAdmin() { instancesSuspended++; console.log('Suspended'); } catch (err) { + instancesFailed++; console.log( `Failed to suspend ${item.serviceId}: ${ item.instance @@ -142,6 +145,7 @@ export default function cmdAdmin() { } } } catch (err) { + tenantsFailed++; console.log( `Failed to process tenant ${tenant.tenantId}: ${ (err as Error).message @@ -153,8 +157,11 @@ export default function cmdAdmin() { console.log( `${tenantsExceedingCount} / ${ Object.keys(tenantPlanMap).length - } tenants below threshold, suspended ${instancesSuspended} instances` + } tenants below threshold, suspended ${instancesSuspended} instances, ${instancesFailed} instance failures, ${tenantsFailed} tenant failures` ); + if (instancesFailed > 0 || tenantsFailed > 0) { + process.exitCode = 1; + } } catch (err) { console.log((err as Error).message); } @@ -184,13 +191,29 @@ export default function cmdAdmin() { 'Are you really sure you want to remove all above instances for tenant ' + `${tenantId} in ${environment}? (yes/no) ` ); + let instancesRemoved = 0; + let instancesFailed = 0; for (const item of instancesToRemove) { - await removeInstanceForTenant( - tenantId, - item.serviceId, - item.instance, - environment - ); + try { + await removeInstanceForTenant( + tenantId, + item.serviceId, + item.instance, + environment + ); + instancesRemoved++; + } catch (innerErr) { + instancesFailed++; + console.error( + `Failed to remove ${item.serviceId}/${item.instance}: ${(innerErr as Error).message}` + ); + } + } + console.log( + `Removed ${instancesRemoved} instances, ${instancesFailed} failed` + ); + if (instancesFailed > 0) { + process.exitCode = 1; } } catch (err) { console.log((err as Error).message); From 5d65d465480f7c84df4fcbc80eb4a7fa41825d4c Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Thu, 17 Sep 2026 07:50:25 +0000 Subject: [PATCH 2/2] fix(admin): fix prettier formatting in remove-all-instances error message Co-Authored-By: Claude --- packages/cli/src/admin/cmd.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/admin/cmd.ts b/packages/cli/src/admin/cmd.ts index 2358f6d..579b7ac 100644 --- a/packages/cli/src/admin/cmd.ts +++ b/packages/cli/src/admin/cmd.ts @@ -205,7 +205,9 @@ export default function cmdAdmin() { } catch (innerErr) { instancesFailed++; console.error( - `Failed to remove ${item.serviceId}/${item.instance}: ${(innerErr as Error).message}` + `Failed to remove ${item.serviceId}/${item.instance}: ${ + (innerErr as Error).message + }` ); } }