npmplus-mcp-server
Version:
Production-ready MCP server for intelligent JavaScript package management. Works with Claude, Windsurf, Cursor, VS Code, and any MCP-compatible AI editor.
231 lines (223 loc) • 5.21 kB
text/typescript
/**
* Analytics and metrics models for tracking server usage and performance.
*/
/**
* Individual usage metric for a single tool execution.
* Used for tracking tool usage patterns and performance.
*
* @interface UsageMetric
* @example
* ```typescript
* const metric: UsageMetric = {
* timestamp: "2024-01-01T12:00:00.000Z",
* toolName: "search_packages",
* success: true,
* responseTime: 250,
* ipHash: "abc123",
* userAgent: "Claude/1.0",
* editorType: "claude",
* cacheHit: false,
* packageManager: "npm",
* packageCount: 1
* };
* ```
*/
export interface UsageMetric {
timestamp: string;
toolName: string;
success: boolean;
responseTime: number;
ipHash: string;
userAgent?: string;
editorType: string;
cacheHit: boolean;
errorType?: string;
packageManager?: string;
packageCount?: number;
}
/**
* Aggregated statistics for a single day.
*
* @interface DailyStats
* @example
* ```typescript
* const stats: DailyStats = {
* date: "2024-01-01",
* totalCalls: 1250,
* successRate: 0.95,
* averageResponseTime: 180,
* uniqueUsers: 45,
* topTools: { "search_packages": 500, "install_packages": 300 },
* editors: { "claude": 800, "cursor": 450 },
* errors: { "ValidationError": 25, "NetworkError": 10 }
* };
* ```
*/
export interface DailyStats {
date: string;
totalCalls: number;
successRate: number;
averageResponseTime: number;
uniqueUsers: number;
topTools: Record<string, number>;
editors: Record<string, number>;
errors: Record<string, number>;
}
/**
* Comprehensive analytics summary for a given time period.
*
* @interface AnalyticsSummary
* @example
* ```typescript
* const summary: AnalyticsSummary = {
* period: "last-30-days",
* totalCalls: 37500,
* avgDailyCalls: 1250,
* successRate: 0.94,
* avgResponseTime: 185,
* uniqueUsers: 450,
* topTools: { "search_packages": 15000 },
* editors: { "claude": 20000 },
* dailyStats: { "2024-01-01": dailyStatsObj },
* trends: trendsObj
* };
* ```
*/
export interface AnalyticsSummary {
period: string;
totalCalls: number;
avgDailyCalls: number;
successRate: number;
avgResponseTime: number;
uniqueUsers: number;
topTools: Record<string, number>;
editors: Record<string, number>;
dailyStats: Record<string, DailyStats>;
trends: AnalyticsTrends;
}
/**
* Trend analysis showing changes over time.
*
* @interface AnalyticsTrends
* @example
* ```typescript
* const trends: AnalyticsTrends = {
* callsGrowth: 0.15, // 15% increase
* responseTimeChange: -0.05, // 5% decrease (improvement)
* successRateChange: 0.02, // 2% increase
* popularToolChanges: { "search_packages": 0.10 }
* };
* ```
*/
export interface AnalyticsTrends {
callsGrowth: number;
responseTimeChange: number;
successRateChange: number;
popularToolChanges: Record<string, number>;
}
/**
* Individual performance measurement for system monitoring.
*
* @interface PerformanceMetric
* @example
* ```typescript
* const metric: PerformanceMetric = {
* timestamp: "2024-01-01T12:00:00.000Z",
* metric: "response_time",
* value: 150,
* unit: "ms",
* tags: { "tool": "search_packages", "cache": "miss" }
* };
* ```
*/
export interface PerformanceMetric {
timestamp: string;
metric: string;
value: number;
unit: string;
tags?: Record<string, string>;
}
/**
* Cache performance and utilization metrics.
*
* @interface CacheMetrics
* @example
* ```typescript
* const cacheMetrics: CacheMetrics = {
* hitRate: 0.75,
* totalRequests: 10000,
* hits: 7500,
* misses: 2500,
* evictions: 100,
* avgTtl: 1800,
* memoryUsage: 52428800, // 50MB
* keyCount: 1250
* };
* ```
*/
export interface CacheMetrics {
hitRate: number;
totalRequests: number;
hits: number;
misses: number;
evictions: number;
avgTtl: number;
memoryUsage: number;
keyCount: number;
}
/**
* Error tracking and analysis metrics.
*
* @interface ErrorMetrics
* @example
* ```typescript
* const errorMetric: ErrorMetrics = {
* timestamp: "2024-01-01T12:00:00.000Z",
* errorType: "ValidationError",
* errorMessage: "Invalid package name format",
* toolName: "install_packages",
* stackTrace: "Error at line 42...",
* userAgent: "Cursor/1.0",
* ipHash: "def456",
* count: 1
* };
* ```
*/
export interface ErrorMetrics {
timestamp: string;
errorType: string;
errorMessage: string;
toolName?: string;
stackTrace?: string;
userAgent?: string;
ipHash?: string;
count: number;
}
/**
* System-level performance and health metrics.
*
* @interface SystemMetrics
* @example
* ```typescript
* const sysMetrics: SystemMetrics = {
* timestamp: "2024-01-01T12:00:00.000Z",
* cpuUsage: 0.45,
* memoryUsage: 536870912, // 512MB
* memoryTotal: 2147483648, // 2GB
* activeConnections: 25,
* queueSize: 5,
* responseTime95p: 300,
* errorRate: 0.05
* };
* ```
*/
export interface SystemMetrics {
timestamp: string;
cpuUsage: number;
memoryUsage: number;
memoryTotal: number;
activeConnections: number;
queueSize: number;
responseTime95p: number;
errorRate: number;
}