UNPKG

@re-shell/cli

Version:

Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja

132 lines (131 loc) 3.3 kB
/** * Operation queue management with priority scheduling */ import { EventEmitter } from 'events'; export interface QueuedTask<T = any> { id: string; name: string; priority: number; operation: () => Promise<T>; dependencies?: string[]; timeout?: number; retries?: number; retryDelay?: number; metadata?: Record<string, any>; createdAt: number; scheduledAt?: number; startedAt?: number; completedAt?: number; attempts: number; status: 'pending' | 'scheduled' | 'running' | 'completed' | 'failed' | 'cancelled'; } export interface QueueStats { total: number; pending: number; scheduled: number; running: number; completed: number; failed: number; cancelled: number; averageWaitTime: number; averageExecutionTime: number; throughput: number; } export declare class OperationQueue extends EventEmitter { private static instance; private tasks; private runningTasks; private completedTasks; private maxConcurrent; private processing; private processingInterval?; static readonly PRIORITY: { readonly CRITICAL: 100; readonly HIGH: 75; readonly NORMAL: 50; readonly LOW: 25; readonly BACKGROUND: 0; }; private constructor(); static getInstance(maxConcurrent?: number): OperationQueue; /** * Add a task to the queue */ add<T>(name: string, operation: () => Promise<T>, options?: { priority?: number; dependencies?: string[]; timeout?: number; retries?: number; retryDelay?: number; metadata?: Record<string, any>; }): string; /** * Add multiple related tasks as a batch */ addBatch<T>(tasks: Array<{ name: string; operation: () => Promise<T>; priority?: number; dependencies?: string[]; timeout?: number; retries?: number; metadata?: Record<string, any>; }>): string[]; /** * Cancel a task */ cancel(id: string): boolean; /** * Cancel all tasks with specific priority or lower */ cancelByPriority(maxPriority: number): number; /** * Get task by ID */ getTask(id: string): QueuedTask | undefined; /** * Get all tasks by status */ getTasksByStatus(status: QueuedTask['status']): QueuedTask[]; /** * Get queue statistics */ getStats(): QueueStats; /** * Wait for all tasks to complete */ waitForCompletion(timeout?: number): Promise<void>; /** * Clear completed tasks from memory */ clearCompleted(): number; /** * Start processing queue */ private startProcessing; /** * Stop processing queue */ private stopProcessing; /** * Process tasks from queue */ private processQueue; /** * Get next executable task considering priority and dependencies */ private getNextExecutableTask; /** * Check if all dependencies are completed */ private areDependenciesCompleted; /** * Execute a single task */ private executeTask; /** * Generate unique task ID */ private generateId; } export declare const operationQueue: OperationQueue;