Skip to main content
Glama
track-performance.js3.12 kB
#!/usr/bin/env node import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); /** * Track performance over time */ function trackPerformance() { const resultsDir = path.join(__dirname, "../results"); const summaryFile = path.join(resultsDir, "evaluation-summary.json"); const historyFile = path.join(resultsDir, "performance-history.json"); try { // Read current results if (!fs.existsSync(summaryFile)) { console.log("⚠️ No evaluation summary found"); return; } const currentResults = JSON.parse(fs.readFileSync(summaryFile, "utf8")); // Read or initialize history let history = []; if (fs.existsSync(historyFile)) { history = JSON.parse(fs.readFileSync(historyFile, "utf8")); } // Add current results to history const historyEntry = { timestamp: currentResults.timestamp || new Date().toISOString(), overall_score: parseFloat(currentResults.overall_score), tests_passed: currentResults.tests_passed, total_tests: currentResults.total_tests, status: currentResults.status, git_sha: process.env.GITHUB_SHA || "unknown", categories: currentResults.categories || {}, }; history.push(historyEntry); // Keep only last 100 entries if (history.length > 100) { history = history.slice(-100); } // Calculate trends const trends = calculateTrends(history); // Write updated history const historyData = { entries: history, trends: trends, last_updated: new Date().toISOString(), }; fs.writeFileSync(historyFile, JSON.stringify(historyData, null, 2)); console.log("📈 Performance tracking updated"); console.log(`📊 Current Score: ${historyEntry.overall_score}/5.0`); console.log(`📈 Trend: ${trends.score_trend}`); console.log(`🎯 Pass Rate: ${((historyEntry.tests_passed / historyEntry.total_tests) * 100).toFixed(1)}%`); } catch (error) { console.error("❌ Error tracking performance:", error.message); process.exit(1); } } function calculateTrends(history) { if (history.length < 2) { return { score_trend: "stable", pass_rate_trend: "stable", recent_change: 0, }; } const recent = history.slice(-5); // Last 5 entries const current = recent[recent.length - 1]; const previous = recent[recent.length - 2]; const scoreDiff = current.overall_score - previous.overall_score; const passRateDiff = current.tests_passed / current.total_tests - previous.tests_passed / previous.total_tests; return { score_trend: scoreDiff > 0.1 ? "improving" : scoreDiff < -0.1 ? "declining" : "stable", pass_rate_trend: passRateDiff > 0.05 ? "improving" : passRateDiff < -0.05 ? "declining" : "stable", recent_change: scoreDiff, average_score: recent.reduce((sum, entry) => sum + entry.overall_score, 0) / recent.length, }; } if (import.meta.url === `file://${process.argv[1]}`) { trackPerformance(); } export { trackPerformance };

Latest Blog Posts

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/docdyhr/mcp-wordpress'

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