Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 6x 4x 4x 4x 5x 5x 2x | // execution-phases/timeout-phase.ts
// Verantwortlichkeit: Timeout nach Start der Ausführung
// - Timeout planen
// - Laufende Ausführung abbrechen
// - Timeout-Notification ausgeben
// - Optionalen Docker-Container aufräumen
import type { Logger } from "@shared/logger";
import type { ProcessExecution } from "../../process-execution-port";
import type { ExecutionState } from "../execution-manager";
import { cleanupDockerContainer } from "./cleanup-phase";
interface TimeoutScheduler {
schedule(timeoutMs: number | null, callback: () => void): void;
}
interface TimeoutCallbacks {
onOutput: (line: string, isComplete?: boolean) => void;
}
export interface TimeoutDependencies {
processExecutor: ProcessExecution;
logger: Logger;
}
/**
* Bricht die laufende Ausführung ab.
*/
export function abortExecution(state: ExecutionState, signal: NodeJS.Signals = "SIGKILL"): void {
state.processController.kill(signal);
}
/**
* Behandelt einen abgelaufenen Execution-Timeout.
*/
export function handleExecutionTimeout(
executionTimeout: number | undefined,
state: ExecutionState,
callbacks: TimeoutCallbacks,
deps: TimeoutDependencies,
): void {
abortExecution(state);
callbacks.onOutput(`--- Simulation timeout (${executionTimeout}s) ---`, true);
void cleanupDockerContainer(state.currentContainerName, deps);
}
/**
* Plant den Execution-Timeout über den TimeoutManager.
*/
export function scheduleExecutionTimeout(
timeoutManager: TimeoutScheduler,
executionTimeout: number | undefined,
state: ExecutionState,
callbacks: TimeoutCallbacks,
deps: TimeoutDependencies,
): void {
const timeoutMs = executionTimeout && executionTimeout > 0 ? executionTimeout * 1000 : null;
timeoutManager.schedule(timeoutMs, () => {
handleExecutionTimeout(executionTimeout, state, callbacks, deps);
});
}
|