v0.3.7-pre.011
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/frontend/ts/main.ts
|
||||
// version: 6
|
||||
// version: 7
|
||||
|
||||
import "bootstrap";
|
||||
import ResizeObserver from "resize-observer-polyfill";
|
||||
@@ -9,6 +9,7 @@ import { getCurrentWindow } from "@tauri-apps/api/window";
|
||||
import type { BackfillRunStatusDto } from "./bindings/ksp_app_backfill_desk/backfill_status/BackfillRunStatusDto.ts";
|
||||
import type { BackfillCancelResponseDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillCancelResponseDto.ts";
|
||||
import type { BackfillRequestPreviewDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillRequestPreviewDto.ts";
|
||||
import type { BackfillResumeResponseDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillResumeResponseDto.ts";
|
||||
import type { BackfillStartRequestDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillStartRequestDto.ts";
|
||||
import type { BackfillStartResponseDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillStartResponseDto.ts";
|
||||
import type { BackfillDeskOptionsDto } from "./bindings/ksp_app_backfill_desk/dto_common/BackfillDeskOptionsDto.ts";
|
||||
@@ -42,7 +43,7 @@ const scopeLabels: Record<string, string> = {
|
||||
let compositionReadyForStart = false;
|
||||
let currentRunStatus: BackfillRunStatusDto | null = null;
|
||||
let runStartAccepted = false;
|
||||
|
||||
let resumeInFlight = false;
|
||||
|
||||
function isViewId(value: string | undefined): value is ViewId {
|
||||
return value === "backfill" || value === "diagnostics";
|
||||
@@ -453,15 +454,20 @@ function bindBackfillRouteSelection(): void {
|
||||
}
|
||||
|
||||
|
||||
function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "cancel" | "event" | "startup" | "start" | "user"): void {
|
||||
function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "cancel" | "event" | "resume" | "startup" | "start" | "user"): void {
|
||||
const card = document.querySelector<HTMLElement>("#backfillRunStatusCard");
|
||||
const cancelButton = document.querySelector<HTMLButtonElement>("#cancelBackfillRun");
|
||||
const resumeButton = document.querySelector<HTMLButtonElement>("#resumeBackfillRun");
|
||||
currentRunStatus = status;
|
||||
if (!status) {
|
||||
runStartAccepted = false;
|
||||
if (cancelButton) {
|
||||
cancelButton.disabled = true;
|
||||
}
|
||||
if (resumeButton) {
|
||||
resumeButton.disabled = true;
|
||||
}
|
||||
resumeInFlight = false;
|
||||
refreshStartButton();
|
||||
if (card) {
|
||||
card.hidden = true;
|
||||
@@ -473,6 +479,12 @@ function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "c
|
||||
if (cancelButton) {
|
||||
cancelButton.disabled = !status.active;
|
||||
}
|
||||
if (status.active) {
|
||||
resumeInFlight = false;
|
||||
}
|
||||
if (resumeButton) {
|
||||
resumeButton.disabled = !status.terminal || !status.checkpointPresent || resumeInFlight;
|
||||
}
|
||||
refreshStartButton();
|
||||
if (card) {
|
||||
card.hidden = false;
|
||||
@@ -509,13 +521,46 @@ function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "c
|
||||
});
|
||||
}
|
||||
|
||||
async function syncBackfillStatus(source: "cancel" | "startup" | "start" | "user"): Promise<void> {
|
||||
async function syncBackfillStatus(source: "cancel" | "resume" | "startup" | "start" | "user"): Promise<void> {
|
||||
frontendDebug("main", "Backfill Desk latest-value status resynchronization started", { source });
|
||||
const status = await invokeKsp<BackfillRunStatusDto | null>("main", "backfill_status");
|
||||
renderBackfillRunStatus(status, source);
|
||||
frontendDebug("main", "Backfill Desk latest-value status resynchronization completed", { source, statusPresent: status !== null });
|
||||
}
|
||||
|
||||
async function resumeBackfillRun(): Promise<void> {
|
||||
const status = currentRunStatus;
|
||||
if (!status || !status.terminal || !status.checkpointPresent || resumeInFlight) {
|
||||
return;
|
||||
}
|
||||
const resumeButton = document.querySelector<HTMLButtonElement>("#resumeBackfillRun");
|
||||
resumeInFlight = true;
|
||||
if (resumeButton) {
|
||||
resumeButton.disabled = true;
|
||||
}
|
||||
frontendDebug("main", "Backfill Desk in-session Resume requested", { jobId: status.jobId, state: status.state });
|
||||
try {
|
||||
const response = await invokeKsp<BackfillResumeResponseDto>("main", "backfill_resume");
|
||||
const feedback = document.querySelector<HTMLElement>("#backfillResumeFeedback");
|
||||
if (feedback) {
|
||||
feedback.hidden = false;
|
||||
feedback.textContent = `Checkpoint repris dans ${response.jobId} (${response.state}).`;
|
||||
}
|
||||
frontendInfo("main", "Backfill Desk in-session Resume accepted", {
|
||||
accepted: response.accepted,
|
||||
jobId: response.jobId,
|
||||
state: response.state,
|
||||
});
|
||||
await syncBackfillStatus("resume");
|
||||
} catch (_caughtError) {
|
||||
resumeInFlight = false;
|
||||
if (resumeButton && currentRunStatus?.terminal && currentRunStatus.checkpointPresent) {
|
||||
resumeButton.disabled = false;
|
||||
}
|
||||
frontendWarn("main", "Backfill Desk in-session Resume failed");
|
||||
}
|
||||
}
|
||||
|
||||
async function bindBackfillStatusMonitoring(): Promise<void> {
|
||||
await listen<BackfillRunStatusDto>("ksp-backfill-status", event => {
|
||||
renderBackfillRunStatus(event.payload, "event");
|
||||
@@ -560,7 +605,13 @@ async function bindBackfillStatusMonitoring(): Promise<void> {
|
||||
});
|
||||
});
|
||||
}
|
||||
frontendTrace("main", "Backfill Desk latest-value monitoring and cancellation handlers installed");
|
||||
const resumeButton = document.querySelector<HTMLButtonElement>("#resumeBackfillRun");
|
||||
if (resumeButton) {
|
||||
resumeButton.addEventListener("click", () => {
|
||||
void resumeBackfillRun();
|
||||
});
|
||||
}
|
||||
frontendTrace("main", "Backfill Desk latest-value monitoring, cancellation and Resume handlers installed");
|
||||
}
|
||||
|
||||
function renderRuntimeStatus(status: ShellStatusDto): void {
|
||||
|
||||
Reference in New Issue
Block a user