UNPKG

fib-flow

Version:

A robust workflow management system for fibjs with task orchestration, state management, and distributed execution capabilities

285 lines (253 loc) 7 kB
export type TaskStatus = | 'pending' | 'running' | 'completed' | 'failed' | 'timeout' | 'permanently_failed' | 'paused' | 'suspended'; export type TaskType = 'async' | 'cron'; export type TaskEventType = | 'task_created' | 'task_claimed' | 'task_started' | 'task_checkpoint' | 'task_progress' | 'task_status_changed' | 'task_heartbeat' | 'task_subtasks_created' | 'task_retry_scheduled' | 'task_retry_started' | 'task_failed' | 'task_timed_out' | 'task_completed' | 'task_paused' | 'task_resumed' | 'task_permanently_failed' | 'task_expired_deleted'; export type TaskIdentifier = number | string; export type TaskAuditCode = string; export type TaskStageName = string; export interface TaskAuditMetadata { [key: string]: unknown; } export interface TaskProgressMetadata { [key: string]: unknown; } export interface TaskResultEntry { task_id: number; result?: unknown; error?: unknown; } export interface TaskRecord { id: TaskIdentifier; name: string; type: TaskType; status: TaskStatus; stage: number; priority?: number; payload?: unknown; result?: unknown; error?: string | null; cron_expr?: string | null; max_retries?: number; retry_count?: number; retry_interval?: number; timeout?: number; next_run_time?: number | null; created_at?: number; start_time?: number | null; last_active_time?: number | null; worker_id?: string | null; tag?: string | null; root_id?: TaskIdentifier | null; parent_id?: TaskIdentifier | null; last_event_time?: number | null; last_event_type?: TaskEventType | null; current_stage_name?: string | null; progress_text?: string | null; progress_percent?: number | null; total_children?: number; completed_children?: number; context?: Uint8Array | null; } export interface TaskEventRecord { id?: TaskIdentifier; task_id: TaskIdentifier; root_id?: TaskIdentifier | null; parent_id?: TaskIdentifier | null; event_type: TaskEventType; from_status?: TaskStatus | null; to_status?: TaskStatus | null; stage?: number | null; worker_id?: string | null; attempt?: number | null; event_time: number; message?: string | null; metadata?: Record<string, unknown> | null; } export interface TaskAttemptRecord { id?: TaskIdentifier; task_id: TaskIdentifier; attempt: number; worker_id?: string | null; started_at: number; ended_at?: number | null; outcome?: TaskStatus | null; error?: string | null; timeout_flag?: boolean; } export interface TaskAuditCheckpoint { /** * Runtime expects lowercase snake_case, for example payload_validated. */ code: TaskAuditCode; message?: string; metadata?: TaskAuditMetadata; } export interface TaskProgressSnapshot { /** * Runtime expects lowercase snake_case, for example download_phase. */ stage_name?: TaskStageName; progress_text?: string; progress_percent?: number; message?: string; metadata?: TaskProgressMetadata; } export interface TaskRetentionPolicy { expire_time?: number | null; statuses?: Array<'completed' | 'permanently_failed' | 'paused'>; } export interface TaskRetentionResult { tasks_deleted: number; events_deleted: number; attempts_deleted: number; } export interface SubTaskDefinition { name: string; payload?: unknown; priority?: number; tag?: string; max_retries?: number; retry_interval?: number; timeout?: number; } export interface TaskQueryFilters { tag?: string; status?: TaskStatus; name?: string; type?: TaskType; worker_id?: string; root_id?: TaskIdentifier; workflow_root_id?: TaskIdentifier; parent_id?: TaskIdentifier; event_type?: TaskEventType; started_after?: number; started_before?: number; } export interface PaginationQuery { limit?: number; offset?: number; order?: 'asc' | 'desc'; } export interface TaskEventQueryFilters extends TaskQueryFilters, PaginationQuery { event_types?: TaskEventType[]; attempt?: number; stage?: number; } export interface TaskAttemptQueryFilters extends PaginationQuery { worker_id?: string; outcome?: TaskStatus; started_after?: number; started_before?: number; ended_after?: number; ended_before?: number; open_only?: boolean; } export interface TaskListQueryFilters extends TaskQueryFilters, PaginationQuery {} export interface TaskAuditQueryOptions { events?: TaskEventQueryFilters; attempts?: TaskAttemptQueryFilters; } export interface WorkflowAuditQueryOptions { tasks?: TaskListQueryFilters; events?: TaskEventQueryFilters; } export interface PagedResult<T> { items: T[]; total: number; limit?: number | null; offset: number; has_more: boolean; } export interface TaskAuditView { task: TaskRecord | null; events: PagedResult<TaskEventRecord>; attempts: PagedResult<TaskAttemptRecord>; } export interface WorkflowAuditView { root_task: TaskRecord | null; tasks: PagedResult<TaskRecord>; events: PagedResult<TaskEventRecord>; } export interface WorkflowTimingSummary { created_at: number | null; first_started_at: number | null; last_ended_at: number | null; last_event_time: number | null; workflow_duration_seconds: number | null; } export interface WorkflowStageTimingSummary { stage: number; attempt: number; started_at: number; ended_at: number | null; duration_seconds: number | null; outcome: TaskStatus | null; worker_id: string | null; } export interface WorkflowFailedTaskSummary { task_id: TaskIdentifier; name: string; status: TaskStatus; error?: string | null; } export interface WorkflowCriticalPathNode { task_id: TaskIdentifier; name: string; status: TaskStatus; stage: number; attempt: number | null; outcome: TaskStatus | null; duration_seconds: number | null; started_at: number | null; ended_at: number | null; } export interface WorkflowCriticalPathSummary { total_duration_seconds: number; nodes: WorkflowCriticalPathNode[]; } export interface WorkflowAuditSummary { root_task: TaskRecord | null; totals: { tasks: number; attempts: number; events: number; checkpoints: number; max_attempt: number; }; statuses: Record<string, number>; attempt_outcomes: Record<string, number>; task_names: Record<string, number>; stages: Record<string, number>; workers: string[]; timing: WorkflowTimingSummary; stage_timings: WorkflowStageTimingSummary[]; failed_tasks: WorkflowFailedTaskSummary[]; critical_path: WorkflowCriticalPathSummary; slowest_attempts: Array<TaskAttemptRecord & { duration_seconds: number | null; }>; }