@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
93 lines (92 loc) • 2.66 kB
TypeScript
/**
* Concurrent operation handling with rate limiting and resource management
*/
import { EventEmitter } from 'events';
interface OperationOptions {
priority?: number;
timeout?: number;
retries?: number;
retryDelay?: number;
tags?: string[];
abortSignal?: AbortSignal;
}
interface OperationStats {
total: number;
pending: number;
running: number;
completed: number;
failed: number;
avgDuration: number;
successRate: number;
}
export declare class ConcurrentOperationManager extends EventEmitter {
private static instance;
private queue;
private running;
private completed;
private maxConcurrent;
private rateLimitWindow;
private maxOperationsPerWindow;
private operationTimes;
private constructor();
static getInstance(maxConcurrent?: number, rateLimitWindow?: number, maxOperationsPerWindow?: number): ConcurrentOperationManager;
/**
* Execute an operation with rate limiting and concurrency control
*/
execute<T>(operation: () => Promise<T>, options?: OperationOptions): Promise<T>;
/**
* Execute multiple operations concurrently with limits
*/
executeAll<T>(operations: Array<() => Promise<T>>, options?: OperationOptions): Promise<T[]>;
/**
* Execute operations with different strategies
*/
executeWithStrategy<T>(operations: Array<() => Promise<T>>, strategy?: 'all' | 'race' | 'allSettled', options?: OperationOptions): Promise<T[] | T | PromiseSettledResult<T>[]>;
/**
* Cancel operations by ID or tags
*/
cancel(idOrTags: string | string[]): number;
/**
* Get operation statistics
*/
getStats(): OperationStats;
/**
* Adjust concurrency limits
*/
setConcurrencyLimits(maxConcurrent?: number, rateLimitWindow?: number, maxOperationsPerWindow?: number): void;
/**
* Get current rate limiting status
*/
getRateLimitStatus(): {
currentWindow: number;
operationsInWindow: number;
canExecute: boolean;
nextSlotAvailable: number;
};
/**
* Add operation to queue with priority sorting
*/
private addToQueue;
/**
* Start processing operations from queue
*/
private startProcessing;
/**
* Process operations from queue
*/
private processQueue;
/**
* Execute a single operation
*/
private executeOperation;
/**
* Generate unique operation ID
*/
private generateId;
/**
* Setup cleanup and monitoring
*/
private setupCleanup;
}
export declare const concurrentOps: ConcurrentOperationManager;
export {};