crewai-ts
Version:
TypeScript port of crewAI for agent-based workflows
142 lines • 4.83 kB
TypeScript
/**
* FlowExecutionTracker
*
* Provides optimized tracking and metrics for flow execution in the Flow Orchestration system.
* Designed for high-performance in multi-flow environments with minimal memory footprint.
*/
import { EventEmitter } from 'events';
interface NodeExecutionData {
nodeId: string;
status: 'pending' | 'running' | 'completed' | 'failed';
startTime?: number;
endTime?: number;
duration?: number;
attempts: number;
result?: any;
error?: Error;
}
export type FlowStatus = 'pending' | 'ready' | 'running' | 'completed' | 'failed' | 'canceled';
export interface FlowMetrics {
startTime: number | undefined;
endTime?: number | undefined;
duration?: number | undefined;
status: FlowStatus;
attempts: number;
error?: Error | undefined;
result?: any;
nodeExecutions?: Map<string, NodeExecutionData> | undefined;
metadata?: Record<string, any> | undefined;
dependencies?: Set<string> | undefined;
dependents?: Set<string> | undefined;
resourceUsage?: {
cpu: number | undefined;
memory: number | undefined;
io: number | undefined;
network: number | undefined;
};
memory?: {
bytesAllocated?: number | undefined;
peakMemoryUsage?: number | undefined;
};
priority?: number | undefined;
}
export interface TrackerOptions {
/** Enable in-depth memory tracking (adds overhead) */
enableMemoryTracking?: boolean;
/** Maximum number of flows to keep in history */
maxHistorySize?: number;
/** Interval (ms) to collect time series data, 0 to disable */
timeSeriesInterval?: number;
/** Maximum number of time series data points to keep */
maxTimeSeriesPoints?: number;
/** Automatically calculate bottlenecks */
trackBottlenecks?: boolean;
/** Track performance variance */
trackVariance?: boolean;
/** Sample rate for detailed tracking (1 = track everything, 0.5 = track 50%) */
samplingRate?: number;
/** Maximum errors to store per flow */
maxErrorsPerFlow?: number;
}
/**
* Tracks flow execution with optimized data structures and algorithms
* for minimal overhead and maximum performance insight.
*/
export declare class FlowExecutionTracker extends EventEmitter {
private flowData;
private durations;
private totalDuration;
private statusCounts;
private bottlenecks;
private timeSeriesData;
private startTime;
private endTime?;
constructor(options?: TrackerOptions);
registerFlow(flowId: string): void;
addDependency(flowId: string, dependencyId: string): void;
startFlow(flowId: string): void;
completeFlow(flowId: string, result: any): void;
failFlow(flowId: string, error: Error): void;
cancelFlow(flowId: string): void;
resetFlow(flowId: string): void;
private getFlowMetrics;
getFlowExecutionTime(flowId: string): number;
getFlowStatus(flowId: string): FlowStatus;
getFlowError(flowId: string): Error | undefined;
getFlowResult(flowId: string): any;
getFlowCount(): number;
getCompletedFlows(): number;
getFailedFlows(): number;
getRunningFlows(): number;
getPendingFlows(): number;
getCanceledFlows(): number;
getReadyFlows(): number;
getBottlenecks(): string[];
getTimeSeriesData(): Array<{
timestamp: number;
metrics: Record<string, number>;
}>;
saveExecutionCheckpoint(): Promise<void>;
loadExecutionCheckpoint(): Promise<void>;
waitForAnyFlowToComplete(): Promise<string | undefined>;
reset(): void;
private collectTimeSeriesDataPoint;
startTracking(): void;
stopTracking(): void;
private updateBottlenecks;
private calculateMedian;
private calculateP95;
getMetrics(): FlowExecutionMetrics;
updateDependencies(flowId: string, dependencies: string[]): void;
updateFlowMetrics(flowId: string): void;
getFlowResourceUsage(flowId: string): FlowResourceUsage | undefined;
}
export interface FlowExecutionMetrics {
flowExecutionTimes: Map<string, number | undefined>;
startTime: number;
endTime: number | undefined;
duration: number;
averageFlowExecutionTime: number | undefined;
medianFlowExecutionTime: number | undefined;
maxFlowExecutionTime: number | undefined;
minFlowExecutionTime: number | undefined;
completedFlows: number;
failedFlows: number;
pendingFlows: number;
runningFlows: number;
readyFlows: number;
canceledFlows: number;
bottlenecks: string[];
timeSeriesData: Array<{
timestamp: number;
metrics: Record<string, number>;
}>;
}
export interface FlowResourceUsage {
cpu: number;
memory: number;
io: number;
network: number;
}
export {};
//# sourceMappingURL=FlowExecutionTracker.d.ts.map