@dorothywebb/any-browser-mcp
Version:
Any Browser MCP - Launch Chrome with your actual data in debug mode for comprehensive browser automation
230 lines • 6.88 kB
TypeScript
/**
* Resource Manager for Any Browser MCP
*
* @fileoverview Manages system resources including memory usage, connection limits,
* and performance monitoring. Provides automatic resource cleanup and optimization.
*
* @example
* ```typescript
* import { ResourceManager } from './ResourceManager.js';
*
* const resourceManager = ResourceManager.getInstance();
*
* // Monitor resource usage
* const usage = resourceManager.getResourceUsage();
* console.log(`Memory usage: ${usage.memoryUsage.heapUsed / 1024 / 1024} MB`);
*
* // Register a resource for cleanup
* resourceManager.registerResource('connection-1', async () => {
* await connection.close();
* });
* ```
*
* @category Utilities
*/
/// <reference types="node" resolution-mode="require"/>
/// <reference types="node" resolution-mode="require"/>
import { EventEmitter } from 'events';
/**
* Resource usage information.
*/
export interface ResourceUsage {
/** Memory usage statistics */
memoryUsage: NodeJS.MemoryUsage;
/** CPU usage percentage (if available) */
cpuUsage?: number;
/** Number of active connections */
activeConnections: number;
/** Number of registered resources */
registeredResources: number;
/** Uptime in milliseconds */
uptime: number;
/** Timestamp of measurement */
timestamp: Date;
}
/**
* Resource limits configuration.
*/
export interface ResourceLimits {
/** Maximum memory usage in bytes */
maxMemoryUsage?: number;
/** Maximum number of connections */
maxConnections?: number;
/** Maximum CPU usage percentage */
maxCpuUsage?: number;
/** Memory cleanup threshold percentage */
memoryCleanupThreshold?: number;
}
/**
* Resource cleanup function.
*/
export type CleanupFunction = () => Promise<void> | void;
/**
* Registered resource information.
*/
interface RegisteredResource {
/** Unique identifier for the resource */
id: string;
/** Cleanup function for the resource */
cleanup: CleanupFunction;
/** When the resource was registered */
registeredAt: Date;
/** Resource type/category */
type: string;
/** Resource metadata */
metadata?: Record<string, any>;
}
/**
* Resource manager events.
*/
export interface ResourceManagerEvents {
/** Emitted when resource usage exceeds limits */
'resource-limit-exceeded': (usage: ResourceUsage, limit: keyof ResourceLimits) => void;
/** Emitted when resources are cleaned up */
'resources-cleaned': (count: number) => void;
/** Emitted when memory cleanup is triggered */
'memory-cleanup': (beforeUsage: number, afterUsage: number) => void;
/** Emitted when resource monitoring detects issues */
'resource-warning': (message: string, usage: ResourceUsage) => void;
}
/**
* Resource manager for monitoring and managing system resources.
*
* @description This class provides centralized resource management including
* memory monitoring, connection tracking, automatic cleanup, and performance
* optimization. It helps prevent resource leaks and maintains system stability.
*/
export declare class ResourceManager extends EventEmitter {
private static instance;
private resources;
private limits;
private config;
private monitoringInterval?;
private startTime;
private activeConnections;
/**
* Private constructor to enforce singleton pattern.
*/
private constructor();
/**
* Gets the singleton instance of ResourceManager.
*
* @returns The singleton ResourceManager instance
*/
static getInstance(): ResourceManager;
/**
* Registers a resource for automatic cleanup.
*
* @param id - Unique identifier for the resource
* @param cleanup - Function to call when cleaning up the resource
* @param type - Type/category of the resource
* @param metadata - Optional metadata about the resource
*
* @example
* ```typescript
* resourceManager.registerResource(
* 'browser-connection-1',
* async () => await connection.close(),
* 'connection',
* { port: 9223, pid: 12345 }
* );
* ```
*/
registerResource(id: string, cleanup: CleanupFunction, type?: string, metadata?: Record<string, any>): void;
/**
* Unregisters a resource.
*
* @param id - Unique identifier of the resource to unregister
* @param cleanup - Whether to run cleanup function before unregistering
*
* @example
* ```typescript
* await resourceManager.unregisterResource('browser-connection-1', true);
* ```
*/
unregisterResource(id: string, cleanup?: boolean): Promise<void>;
/**
* Gets current resource usage information.
*
* @returns Current resource usage statistics
*/
getResourceUsage(): ResourceUsage;
/**
* Sets resource limits.
*
* @param limits - New resource limits to apply
*
* @example
* ```typescript
* resourceManager.setLimits({
* maxMemoryUsage: 1024 * 1024 * 1024, // 1 GB
* maxConnections: 10
* });
* ```
*/
setLimits(limits: Partial<ResourceLimits>): void;
/**
* Gets current resource limits.
*
* @returns Current resource limits
*/
getLimits(): ResourceLimits;
/**
* Increments the active connection count.
*/
incrementConnections(): void;
/**
* Decrements the active connection count.
*/
decrementConnections(): void;
/**
* Forces garbage collection if available.
*
* @returns Whether garbage collection was triggered
*/
forceGarbageCollection(): boolean;
/**
* Cleans up all registered resources.
*
* @param type - Optional type filter for cleanup
*
* @example
* ```typescript
* // Clean up all resources
* await resourceManager.cleanupResources();
*
* // Clean up only connection resources
* await resourceManager.cleanupResources('connection');
* ```
*/
cleanupResources(type?: string): Promise<void>;
/**
* Shuts down the resource manager and cleans up all resources.
*/
shutdown(): Promise<void>;
/**
* Gets a list of all registered resources.
*
* @param type - Optional type filter
* @returns Array of registered resources
*/
getRegisteredResources(type?: string): RegisteredResource[];
/**
* Starts resource monitoring.
*/
private startMonitoring;
/**
* Checks current resource usage against limits.
*/
private checkResourceUsage;
/**
* Sets up process event handlers for cleanup.
*/
private setupProcessHandlers;
}
/**
* Global resource manager instance.
*/
export declare const globalResourceManager: ResourceManager;
export {};
//# sourceMappingURL=ResourceManager.d.ts.map