@gati-framework/runtime
Version:
Gati runtime execution engine for running handler-based applications
134 lines • 3.36 kB
TypeScript
/**
* @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