fleet/frontend/interfaces/script.ts
jacobshandling 166e5ed663
UI: Batch script run detail page (#32333)
## For #31226 

New features:
- Dynamic header for each possible state of a batch script run: Started,
Scheduled, and Finished (corresponds to tabs at
`/controls/scripts/progress`
- Unique tabs for each possible status of hosts targeted by a batch
script run: Ran, Errored, Pending, Incompatible, Canceled.
- Within each tab, sortable, paginated host results with output preview
and execution time.
- View script/run details, cancel a batch, view manage hosts page
filtered for the script batch run and a status.
- Global script batch runs activities and and Scripts progress rows now
navigate to this details page.

Cleanups and improvements:
- Expand tab count badge options using “alert”/“pending” variants across
hosts, policies, and query results.
- Misc cleanups and improvements


![ezgif-1438d4041f694f](https://github.com/user-attachments/assets/2d93127b-dea4-4ca6-abcc-7c888b2e0b93)


- [x] Changes file added for user-visible changes in `changes/`,


- [x] Updated automated tests - new tests tracked for follow-up work
- [x] QA'd all new/changed functionality manually

---------

Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2025-08-29 09:37:05 -06:00

63 lines
1.9 KiB
TypeScript

import { HOST_LINUX_PLATFORMS } from "./platform";
export interface IScript {
id: number;
team_id: number | null;
name: string;
created_at: string;
updated_at: string;
}
export const isScriptSupportedPlatform = (hostPlatform: string) =>
["darwin", "windows", ...HOST_LINUX_PLATFORMS].includes(hostPlatform); // excludes chrome, ios, ipados, android see also https://github.com/fleetdm/fleet/blob/5a21e2cfb029053ddad0508869eb9f1f23997bf2/server/fleet/hosts.go#L775
export const addTeamIdCriteria = (
pred: any,
teamId: number,
isFreeTier?: boolean
) => (isFreeTier ? { ...pred } : { ...pred, team_id: teamId });
export type IScriptExecutionStatus = "ran" | "pending" | "error";
export interface ILastExecution {
execution_id: string;
executed_at: string;
status: IScriptExecutionStatus;
}
export type ScriptContent = string;
export interface IHostScript {
script_id: number;
name: string;
last_execution: ILastExecution | null;
}
const SCRIPT_BATCH_STATUSES = ["started", "scheduled", "finished"] as const;
export type ScriptBatchStatus = typeof SCRIPT_BATCH_STATUSES[number];
export const isValidScriptBatchStatus = (
status: string | null | undefined
): status is ScriptBatchStatus => {
return SCRIPT_BATCH_STATUSES.includes((status ?? "") as ScriptBatchStatus);
};
export const SCRIPT_BATCH_HOST_EXECUTED_STATUSES = ["ran", "errored"];
export const SCRIPT_BATCH_HOST_NOT_EXECUTED_STATUSES = [
"pending",
"incompatible",
"canceled",
];
export const SCRIPT_BATCH_HOST_STATUSES = SCRIPT_BATCH_HOST_EXECUTED_STATUSES.concat(
SCRIPT_BATCH_HOST_NOT_EXECUTED_STATUSES
);
export type ScriptBatchHostStatus = typeof SCRIPT_BATCH_HOST_STATUSES[number];
export const isValidScriptBatchHostStatus = (
status: string | null | undefined
): status is ScriptBatchHostStatus => {
return SCRIPT_BATCH_HOST_STATUSES.includes(
(status ?? "") as ScriptBatchHostStatus
);
};