Skip to main content
Glama

MCP SQL Server

by ryudg
MetricsCollectorImpl.ts4 kB
import { MetricsCollector } from '../../domain/performance/services/PerformanceDomainService.js'; import { DatabaseConnectionManager } from '../../database/connection/connection.manager.js'; import { Logger } from '../../core/logger.js'; export class MetricsCollectorImpl implements MetricsCollector { constructor( private readonly dbManager: DatabaseConnectionManager, private readonly logger: Logger ) {} async collectCurrentMetrics(): Promise<{ connectionPool: any; query: any; system: any; }> { try { const [connectionPoolMetrics, queryMetrics, systemMetrics] = await Promise.all([ this.collectConnectionPoolMetrics(), this.collectQueryMetrics(), this.collectSystemMetrics(), ]); return { connectionPool: connectionPoolMetrics, query: queryMetrics, system: systemMetrics, }; } catch (error) { this.logger.error('Failed to collect metrics', { error: error instanceof Error ? error.message : String(error), }); throw error; } } private async collectConnectionPoolMetrics(): Promise<{ totalConnections: number; activeConnections: number; idleConnections: number; utilization: number; }> { try { const connectionStats = this.dbManager.getConnectionStats(); const totalConnections = connectionStats.total || 0; const activeConnections = connectionStats.active || 0; const idleConnections = totalConnections - activeConnections; const utilization = totalConnections > 0 ? Math.round((activeConnections / totalConnections) * 100) : 0; return { totalConnections, activeConnections, idleConnections, utilization, }; } catch (error) { this.logger.error('Failed to collect connection pool metrics', { error }); return { totalConnections: 0, activeConnections: 0, idleConnections: 0, utilization: 0, }; } } private async collectQueryMetrics(): Promise<{ totalQueries: number; slowQueries: number; averageExecutionTime: number; maxExecutionTime: number; minExecutionTime: number; }> { try { // 실제 구현에서는 쿼리 통계를 수집해야 함 // 현재는 더미 데이터 반환 return { totalQueries: Math.floor(Math.random() * 1000) + 100, slowQueries: Math.floor(Math.random() * 10), averageExecutionTime: Math.floor(Math.random() * 1000) + 100, maxExecutionTime: Math.floor(Math.random() * 5000) + 1000, minExecutionTime: Math.floor(Math.random() * 100) + 10, }; } catch (error) { this.logger.error('Failed to collect query metrics', { error }); return { totalQueries: 0, slowQueries: 0, averageExecutionTime: 0, maxExecutionTime: 0, minExecutionTime: 0, }; } } private async collectSystemMetrics(): Promise<{ cpuUsage: number; memoryUsage: number; diskUsage: number; }> { try { // Node.js 시스템 메트릭 수집 const memoryUsage = process.memoryUsage(); const totalMemory = memoryUsage.heapTotal + memoryUsage.external; const usedMemory = memoryUsage.heapUsed; // CPU 사용률은 간단한 추정치 (실제로는 더 정확한 측정 필요) const cpuUsage = Math.floor(Math.random() * 100); // 더미 데이터 // 메모리 사용률 계산 const memoryUsagePercent = totalMemory > 0 ? Math.round((usedMemory / totalMemory) * 100) : 0; // 디스크 사용률 (더미 데이터) const diskUsage = Math.floor(Math.random() * 100); return { cpuUsage, memoryUsage: memoryUsagePercent, diskUsage, }; } catch (error) { this.logger.error('Failed to collect system metrics', { error }); return { cpuUsage: 0, memoryUsage: 0, diskUsage: 0, }; } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ryudg/mcp-sql'

If you have feedback or need assistance with the MCP directory API, please join our Discord server