claude-flow-tbowman01
Version:
Enterprise-grade AI agent orchestration with ruv-swarm integration (Alpha Release)
390 lines • 12 kB
TypeScript
/**
* Comprehensive resource management system for swarm operations
*/
import { EventEmitter } from 'node:events';
import type { ILogger } from '../core/logger.js';
import type { IEventBus } from '../core/event-bus.js';
import type { AgentId, TaskId } from '../swarm/types.js';
export interface ResourceManagerConfig {
enableResourcePooling: boolean;
enableResourceMonitoring: boolean;
enableAutoScaling: boolean;
enableQoS: boolean;
monitoringInterval: number;
cleanupInterval: number;
defaultLimits: ResourceLimits;
reservationTimeout: number;
allocationStrategy: 'first-fit' | 'best-fit' | 'worst-fit' | 'balanced';
priorityWeights: PriorityWeights;
enablePredictiveAllocation: boolean;
enableResourceSharing: boolean;
debugMode: boolean;
}
export interface ResourceLimits {
cpu: number;
memory: number;
disk: number;
network: number;
gpu?: number;
custom: Record<string, number>;
}
export interface PriorityWeights {
critical: number;
high: number;
normal: number;
low: number;
background: number;
}
export interface Resource {
id: string;
type: ResourceType;
name: string;
description: string;
capacity: ResourceLimits;
allocated: ResourceLimits;
available: ResourceLimits;
status: ResourceStatus;
metadata: ResourceMetadata;
reservations: ResourceReservation[];
allocations: ResourceAllocation[];
sharable: boolean;
persistent: boolean;
cost: number;
location?: string;
tags: string[];
}
export interface ResourcePool {
id: string;
name: string;
type: ResourceType;
resources: string[];
strategy: PoolStrategy;
loadBalancing: LoadBalancingStrategy;
scaling: ScalingConfig;
qos: QoSConfig;
statistics: PoolStatistics;
filters: ResourceFilter[];
}
export interface ResourceReservation {
id: string;
resourceId: string;
agentId: AgentId;
taskId?: TaskId;
requirements: ResourceRequirements;
status: ReservationStatus;
priority: ResourcePriority;
createdAt: Date;
expiresAt?: Date;
activatedAt?: Date;
releasedAt?: Date;
metadata: Record<string, any>;
}
export interface ResourceAllocation {
id: string;
reservationId: string;
resourceId: string;
agentId: AgentId;
taskId?: TaskId;
allocated: ResourceLimits;
actualUsage: ResourceUsage;
efficiency: number;
startTime: Date;
endTime?: Date;
status: AllocationStatus;
qosViolations: QoSViolation[];
}
export interface ResourceRequirements {
cpu?: ResourceSpec;
memory?: ResourceSpec;
disk?: ResourceSpec;
network?: ResourceSpec;
gpu?: ResourceSpec;
custom?: Record<string, ResourceSpec>;
constraints?: ResourceConstraints;
preferences?: ResourcePreferences;
}
export interface ResourceSpec {
min: number;
max?: number;
preferred?: number;
unit: string;
shared?: boolean;
exclusive?: boolean;
}
export interface ResourceConstraints {
location?: string[];
excludeLocation?: string[];
nodeAffinity?: NodeAffinity[];
antiAffinity?: AntiAffinity[];
timeWindow?: TimeWindow;
dependencies?: string[];
maxCost?: number;
}
export interface ResourcePreferences {
location?: string;
performanceClass?: 'high' | 'medium' | 'low';
costOptimized?: boolean;
energyEfficient?: boolean;
highAvailability?: boolean;
}
export interface ResourceUsage {
cpu: number;
memory: number;
disk: number;
network: number;
gpu?: number;
custom: Record<string, number>;
timestamp: Date;
duration: number;
}
export interface ResourceMetadata {
provider: string;
region?: string;
zone?: string;
instance?: string;
capabilities: string[];
performance: PerformanceMetrics;
reliability: ReliabilityMetrics;
cost: CostMetrics;
lastUpdated: Date;
}
export interface PerformanceMetrics {
cpuScore: number;
memoryBandwidth: number;
diskIOPS: number;
networkBandwidth: number;
gpuScore?: number;
benchmarkResults: Record<string, number>;
}
export interface ReliabilityMetrics {
uptime: number;
meanTimeBetweenFailures: number;
errorRate: number;
lastFailure?: Date;
failureHistory: FailureRecord[];
}
export interface CostMetrics {
hourlyRate: number;
dataTransferCost: number;
storageCost: number;
spotPricing?: boolean;
billing: BillingModel;
}
export interface FailureRecord {
timestamp: Date;
type: string;
duration: number;
impact: 'low' | 'medium' | 'high' | 'critical';
resolved: boolean;
}
export interface QoSConfig {
guarantees: QoSGuarantee[];
objectives: QoSObjective[];
violations: QoSViolationPolicy;
}
export interface QoSGuarantee {
metric: string;
threshold: number;
operator: 'gt' | 'lt' | 'eq' | 'gte' | 'lte';
priority: ResourcePriority;
penalty?: number;
}
export interface QoSObjective {
metric: string;
target: number;
weight: number;
tolerance: number;
}
export interface QoSViolation {
timestamp: Date;
metric: string;
expected: number;
actual: number;
severity: 'low' | 'medium' | 'high' | 'critical';
duration: number;
resolved: boolean;
}
export interface QoSViolationPolicy {
autoRemediation: boolean;
escalationThreshold: number;
penaltyFunction: string;
notificationEnabled: boolean;
}
export interface ScalingConfig {
enabled: boolean;
minResources: number;
maxResources: number;
scaleUpThreshold: number;
scaleDownThreshold: number;
cooldownPeriod: number;
metrics: ScalingMetric[];
}
export interface ScalingMetric {
name: string;
weight: number;
threshold: number;
aggregation: 'avg' | 'max' | 'min' | 'sum';
}
export interface PoolStatistics {
totalResources: number;
availableResources: number;
utilizationRate: number;
allocationSuccessRate: number;
averageWaitTime: number;
throughput: number;
efficiency: number;
costPerHour: number;
qosScore: number;
}
export interface NodeAffinity {
key: string;
operator: 'in' | 'notin' | 'exists' | 'notexists';
values?: string[];
}
export interface AntiAffinity {
type: 'agent' | 'task' | 'resource';
scope: 'node' | 'zone' | 'region';
weight: number;
}
export interface TimeWindow {
start: Date;
end: Date;
timezone?: string;
}
export interface ResourceFilter {
id: string;
name: string;
enabled: boolean;
conditions: FilterCondition[];
action: 'include' | 'exclude' | 'prioritize' | 'deprioritize';
}
export interface FilterCondition {
field: string;
operator: 'eq' | 'ne' | 'gt' | 'lt' | 'contains' | 'matches';
value: any;
}
export type ResourceType = 'compute' | 'storage' | 'network' | 'memory' | 'gpu' | 'custom';
export type ResourceStatus = 'available' | 'allocated' | 'reserved' | 'maintenance' | 'failed' | 'offline';
export type ResourcePriority = 'critical' | 'high' | 'normal' | 'low' | 'background';
export type ReservationStatus = 'pending' | 'confirmed' | 'active' | 'expired' | 'cancelled' | 'failed';
export type AllocationStatus = 'active' | 'completed' | 'failed' | 'terminated' | 'suspended';
export type PoolStrategy = 'round-robin' | 'least-loaded' | 'performance-based' | 'cost-optimized';
export type LoadBalancingStrategy = 'round-robin' | 'weighted' | 'least-connections' | 'resource-based';
export type BillingModel = 'hourly' | 'per-usage' | 'reserved' | 'spot' | 'hybrid';
/**
* Comprehensive resource management with allocation, monitoring, and optimization
*/
export declare class ResourceManager extends EventEmitter {
private logger;
private eventBus;
private config;
private resources;
private pools;
private reservations;
private allocations;
private usageHistory;
private predictions;
private optimizer;
private monitoringInterval?;
private cleanupInterval?;
private scalingInterval?;
private metrics;
constructor(config: Partial<ResourceManagerConfig>, logger: ILogger, eventBus: IEventBus);
private setupEventHandlers;
initialize(): Promise<void>;
shutdown(): Promise<void>;
registerResource(type: ResourceType, name: string, capacity: ResourceLimits, metadata?: Partial<ResourceMetadata>): Promise<string>;
unregisterResource(resourceId: string): Promise<void>;
requestResources(agentId: AgentId, requirements: ResourceRequirements, options?: {
taskId?: TaskId;
priority?: ResourcePriority;
timeout?: number;
preemptible?: boolean;
}): Promise<string>;
activateReservation(reservationId: string): Promise<string>;
releaseResources(allocationId: string, reason?: string): Promise<void>;
cancelReservation(reservationId: string, reason?: string): Promise<void>;
createResourcePool(name: string, type: ResourceType, resourceIds: string[], strategy?: PoolStrategy): Promise<string>;
addResourceToPool(poolId: string, resourceId: string): Promise<void>;
removeResourceFromPool(poolId: string, resourceId: string): Promise<void>;
private findSuitableResource;
private calculateResourceScore;
private canSatisfyRequirements;
private checkConstraints;
private selectResourceByStrategy;
private calculateWaste;
private calculateAllocation;
private startMonitoring;
private startCleanup;
private startAutoScaling;
private performMonitoring;
private performCleanup;
private evaluateScaling;
private canActivateReservation;
private calculateResourceUtilization;
private calculateEfficiency;
private updateResourceAvailability;
private addToResourceLimits;
private subtractFromResourceLimits;
private createEmptyLimits;
private createEmptyUsage;
private createDefaultPerformanceMetrics;
private createDefaultReliabilityMetrics;
private createDefaultCostMetrics;
private createPoolStatistics;
private createDefaultPools;
private updateResourceUsage;
private updateResourceStatistics;
private updatePoolStatistics;
private checkQoSViolations;
private checkPoolQoS;
private updatePredictions;
private calculatePoolMetrics;
private shouldScale;
private scalePoolUp;
private scalePoolDown;
private getMetricValue;
private evaluateQoSCondition;
private calculateViolationSeverity;
private remediateQoSViolation;
private releaseAllAllocations;
private handleResourceRequest;
private handleResourceRelease;
private handleResourceFailure;
private handleScalingTrigger;
getResource(resourceId: string): Resource | undefined;
getAllResources(): Resource[];
getResourcesByType(type: ResourceType): Resource[];
getPool(poolId: string): ResourcePool | undefined;
getAllPools(): ResourcePool[];
getReservation(reservationId: string): ResourceReservation | undefined;
getAllReservations(): ResourceReservation[];
getAllocation(allocationId: string): ResourceAllocation | undefined;
getAllAllocations(): ResourceAllocation[];
getResourceUsageHistory(resourceId: string): ResourceUsage[];
getResourcePrediction(resourceId: string): ResourcePrediction | undefined;
getManagerStatistics(): {
resources: number;
pools: number;
reservations: number;
allocations: number;
utilization: number;
efficiency: number;
};
}
interface ResourcePrediction {
resourceId: string;
predictions: Array<{
timestamp: Date;
predictedUsage: ResourceUsage;
confidence: number;
}>;
trends: {
cpu: 'increasing' | 'decreasing' | 'stable';
memory: 'increasing' | 'decreasing' | 'stable';
disk: 'increasing' | 'decreasing' | 'stable';
};
recommendations: string[];
}
export {};
//# sourceMappingURL=resource-manager.d.ts.map