UNPKG

mcp-quiz-server

Version:

🧠 AI-Powered Quiz Management via Model Context Protocol (MCP) - Create, manage, and take quizzes directly from VS Code, Claude, and other AI agents.

109 lines (108 loc) • 3.07 kB
"use strict"; /** * @fileoverview MCP Metrics Tracker - Performance Monitoring * @version 1.0.0 * @since 2025-08-03 * @module MetricsTracker * @description Tracks MCP handler performance and analytics * @contributors Claude Code Agent * @requirements REQ_MONITORING_001 (Performance Tracking) * @testCoverage Unit tests for metrics collection */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MetricsTracker = void 0; /** * Performance metrics tracker for MCP handlers */ class MetricsTracker { constructor() { this.analyticsHistory = []; this.metrics = { requestCount: 0, errorCount: 0, averageResponseTime: 0, toolCallCount: {}, resourceAccessCount: {}, }; } /** * Record a successful request */ recordRequest(method, executionTime) { this.metrics.requestCount++; this.updateAverageResponseTime(executionTime); // Track method-specific metrics if (method.startsWith('tools/')) { const toolName = method.replace('tools/call', ''); this.metrics.toolCallCount[toolName] = (this.metrics.toolCallCount[toolName] || 0) + 1; } } /** * Record an error */ recordError() { this.metrics.errorCount++; } /** * Record analytics data */ recordAnalytics(sessionId, request, executionTime, success, errorCode) { const analytics = { sessionId, timestamp: new Date(), method: request.method, executionTime, success, errorCode, metadata: { requestSize: JSON.stringify(request).length, }, }; this.analyticsHistory.push(analytics); // Keep only last 100 analytics entries to prevent memory bloat if (this.analyticsHistory.length > 100) { this.analyticsHistory = this.analyticsHistory.slice(-100); } } /** * Update average response time */ updateAverageResponseTime(newTime) { const totalRequests = this.metrics.requestCount; const currentAverage = this.metrics.averageResponseTime; this.metrics.averageResponseTime = (currentAverage * (totalRequests - 1) + newTime) / totalRequests; } /** * Get current metrics */ getMetrics() { return { ...this.metrics }; } /** * Get analytics history */ getAnalytics() { return [...this.analyticsHistory]; } /** * Generate session ID */ generateSessionId() { return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; } /** * Reset metrics */ reset() { this.metrics = { requestCount: 0, errorCount: 0, averageResponseTime: 0, toolCallCount: {}, resourceAccessCount: {}, }; this.analyticsHistory = []; } } exports.MetricsTracker = MetricsTracker;