fix: classify provider runner transient failures
This commit is contained in:
@@ -283,6 +283,9 @@ export function runChecks(config: UniDeskConfig, options: CheckOptions = default
|
||||
fileItem("scripts/code-queue-trace-summary-contract-test.ts"),
|
||||
fileItem("scripts/code-queue-pr-preflight-contract-test.ts"),
|
||||
fileItem("scripts/code-queue-submit-routing-contract-test.ts"),
|
||||
fileItem("scripts/provider-runner-triage-contract-test.ts"),
|
||||
fileItem("scripts/src/provider-triage.ts"),
|
||||
fileItem("src/components/microservices/code-queue/src/runner-error-classifier.ts"),
|
||||
fileItem("scripts/src/ci.ts"),
|
||||
fileItem("scripts/src/e2e.ts"),
|
||||
fileItem("scripts/deploy-artifact-matrix-contract-test.ts"),
|
||||
@@ -305,6 +308,7 @@ export function runChecks(config: UniDeskConfig, options: CheckOptions = default
|
||||
items.push(commandItem("code-queue:trace-summary-contract", ["bun", "scripts/code-queue-trace-summary-contract-test.ts"], 30_000));
|
||||
items.push(commandItem("code-queue:pr-preflight-contract", ["bun", "scripts/code-queue-pr-preflight-contract-test.ts"], 30_000));
|
||||
items.push(commandItem("code-queue:submit-routing-contract", ["bun", "scripts/code-queue-submit-routing-contract-test.ts"], 30_000));
|
||||
items.push(commandItem("provider:runner-triage-contract", ["bun", "scripts/provider-runner-triage-contract-test.ts"], 30_000));
|
||||
items.push(commandItem("deploy:artifact-matrix-contract", ["bun", "scripts/deploy-artifact-matrix-contract-test.ts"], 30_000));
|
||||
items.push(commandItem("code-queue:active-run-heartbeat-visible", ["bun", "scripts/code-queue-liveness-diagnostics-test.ts", "--only", "code-queue:active-run-heartbeat-visible"], 30_000));
|
||||
items.push(commandItem("code-queue:trace-gap-not-stale", ["bun", "scripts/code-queue-liveness-diagnostics-test.ts", "--only", "code-queue:trace-gap-not-stale"], 30_000));
|
||||
@@ -323,6 +327,7 @@ export function runChecks(config: UniDeskConfig, options: CheckOptions = default
|
||||
items.push(skippedItem("code-queue:trace-summary-contract", "Code Queue trace summary contract is opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
items.push(skippedItem("code-queue:pr-preflight-contract", "Code Queue PR preflight contract is opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
items.push(skippedItem("code-queue:submit-routing-contract", "Code Queue submit routing contract is opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
items.push(skippedItem("provider:runner-triage-contract", "Provider runner triage contract is opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
items.push(skippedItem("deploy:artifact-matrix-contract", "deploy artifact matrix contract is opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
items.push(skippedItem("code-queue:liveness-diagnostics-fixtures", "Code Queue liveness diagnostics fixtures are opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
items.push(skippedItem("baidu-netdisk:artifact-guard-contract", "Baidu Netdisk artifact guard contract is opt-in with script checks", "--scripts-typecheck or --full"));
|
||||
|
||||
@@ -3,6 +3,7 @@ import { coreInternalFetch } from "./microservices";
|
||||
import { debugDispatch, debugHealth } from "./debug";
|
||||
import { runArtifactRegistryCommand } from "./artifact-registry";
|
||||
import { runCodeQueueCommand } from "./code-queue";
|
||||
import { classifyRunnerError } from "../../src/components/microservices/code-queue/src/runner-error-classifier";
|
||||
|
||||
export type ProviderSignalScope =
|
||||
| "runner-local"
|
||||
@@ -270,6 +271,12 @@ function codeQueueTasksSignal(response: unknown): ProviderTriageSignal {
|
||||
}
|
||||
|
||||
function classifyErrorMessage(message: string): ProviderSignalScope {
|
||||
const runnerClassification = classifyRunnerError(message);
|
||||
if (runnerClassification.scope === "provider-gateway") return "provider-gateway";
|
||||
if (runnerClassification.scope === "registry") return "registry";
|
||||
if (runnerClassification.scope === "k3s") return "k3s";
|
||||
if (runnerClassification.scope === "scheduler") return "scheduler";
|
||||
if (runnerClassification.scope === "runner-local") return "runner-local";
|
||||
const normalized = message.toLowerCase();
|
||||
if (/provider is not online|provider .*offline|provider .*not online/u.test(normalized)) return "runner-local";
|
||||
if (/ssh|host\.ssh/u.test(normalized)) return "ssh";
|
||||
@@ -282,7 +289,7 @@ function classifyErrorMessage(message: string): ProviderSignalScope {
|
||||
}
|
||||
|
||||
function observedErrorSignal(message: string, scope: ProviderSignalScope): ProviderTriageSignal {
|
||||
return signal("observed-error", scope, "failed", message, { message }, scope !== "runner-local");
|
||||
return signal("observed-error", scope, "failed", message, { message, runnerErrorClassification: classifyRunnerError(message) }, scope !== "runner-local");
|
||||
}
|
||||
|
||||
export function providerTriageRecommendedCrossChecks(providerId: string): string[] {
|
||||
|
||||
Reference in New Issue
Block a user