refactor: split remote gc runner and degraded helpers
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { classifySshTcpPoolFailure, type SshCaptureResult } from "./ssh";
|
||||
|
||||
export function remoteGcDegradedFailure(providerId: string, action: string, result: SshCaptureResult): Record<string, unknown> {
|
||||
const text = `${result.stderr}\n${result.stdout}`;
|
||||
const failureKind = classifySshTcpPoolFailure(text);
|
||||
const timeout = result.exitCode === 124 || text.includes("ssh-runtime-timeout");
|
||||
const providerOffline = text.includes(`provider is not online: ${providerId}`) || text.includes("provider is not online");
|
||||
const degradedReason = failureKind ?? (providerOffline ? "provider-offline" : timeout ? "ssh-runtime-timeout" : "remote-command-failed");
|
||||
return {
|
||||
ok: false,
|
||||
degraded: true,
|
||||
providerId,
|
||||
action: `gc remote ${action}`,
|
||||
degradedReason,
|
||||
transport: {
|
||||
sshTcpPoolFailureKind: failureKind,
|
||||
providerOffline,
|
||||
sshRuntimeTimeout: timeout,
|
||||
exitCode: result.exitCode,
|
||||
},
|
||||
safeCandidateCount: null,
|
||||
runAllowed: false,
|
||||
mutation: false,
|
||||
summary: failureKind !== null
|
||||
? `remote GC could not acquire a provider data channel: ${failureKind}`
|
||||
: providerOffline
|
||||
? `provider ${providerId} is offline from the controlled CLI transport view`
|
||||
: timeout
|
||||
? "remote GC did not complete before the SSH runtime timeout"
|
||||
: "remote GC command failed before producing a valid plan",
|
||||
next: {
|
||||
sshPool: `bun scripts/cli.ts debug ssh-pool ${providerId}`,
|
||||
fullHealth: "bun scripts/cli.ts debug health",
|
||||
smoke: `trans ${providerId} argv true`,
|
||||
retryPlan: `bun scripts/cli.ts gc remote ${providerId} plan --no-snapshot-save`,
|
||||
},
|
||||
};
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
+8
-2980
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user