UNPKG

@gati-framework/runtime

Version:

Gati runtime execution engine for running handler-based applications

134 lines 3.36 kB
/** * @module timescape/lifecycle * @description Version lifecycle management with auto-deactivation */ import type { VersionRegistry } from './registry.js'; import type { TSV } from './types.js'; export interface LifecycleConfig { /** * Enable auto-deactivation */ enabled: boolean; /** * Interval for checking version status (ms) */ checkIntervalMs: number; /** * Time since last access to consider version cold (ms) */ coldThresholdMs: number; /** * Minimum request count to prevent deactivation */ minRequestCount: number; /** * Versions to never deactivate (e.g., tagged versions) */ protectedTags: string[]; /** * Handlers to exclude from auto-deactivation */ excludedHandlers: string[]; /** * Callback when version is deactivated */ onDeactivate?: (tsv: TSV, handlerPath: string, reason: string) => void; /** * Dry run mode (log but don't deactivate) */ dryRun: boolean; } export interface DeactivationReason { tsv: TSV; handlerPath: string; reason: 'cold' | 'low_usage' | 'manual'; lastAccessed: number; requestCount: number; deactivatedAt: number; } export declare class VersionLifecycleManager { private registry; private config; private intervalId?; private deactivationHistory; private manualOverrides; constructor(registry: VersionRegistry, config?: Partial<LifecycleConfig>); /** * Start lifecycle monitoring */ start(): void; /** * Stop lifecycle monitoring */ stop(): void; /** * Check all versions and deactivate cold ones */ private checkVersions; /** * Deactivate a version */ private deactivateVersion; /** * Check if version is protected from deactivation */ private isProtected; /** * Manually override version lifecycle */ setManualOverride(tsv: TSV, action: 'keep' | 'deactivate'): void; /** * Remove manual override */ removeManualOverride(tsv: TSV): void; /** * Get manual overrides */ getManualOverrides(): Map<TSV, 'keep' | 'deactivate'>; /** * Get deactivation history */ getDeactivationHistory(limit?: number): DeactivationReason[]; /** * Clear deactivation history */ clearDeactivationHistory(): void; /** * Update configuration */ updateConfig(config: Partial<LifecycleConfig>): void; /** * Get current configuration */ getConfig(): LifecycleConfig; /** * Get lifecycle statistics */ getStatistics(): { totalDeactivations: number; deactivationsByCold: number; deactivationsByLowUsage: number; deactivationsByManual: number; activeOverrides: number; isRunning: boolean; }; /** * Force check now (useful for testing) */ checkNow(): void; /** * Reactivate a cold version */ reactivateVersion(tsv: TSV): boolean; /** * Get versions eligible for deactivation */ getEligibleForDeactivation(): Array<{ tsv: TSV; handlerPath: string; reason: 'cold' | 'low_usage'; timeSinceLastAccess: number; requestCount: number; }>; } //# sourceMappingURL=lifecycle.d.ts.map