UNPKG

agentic-qe

Version:

Agentic Quality Engineering Fleet System - AI-driven quality management platform

147 lines (145 loc) 6.33 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MonitorDashboard = void 0; const fs = __importStar(require("fs/promises")); class MonitorDashboard { constructor(dataDir, config) { this.metricsHistory = []; this.dataDir = dataDir; this.config = { refreshInterval: config?.refreshInterval ?? 1000, maxDataPoints: config?.maxDataPoints ?? 100, displayFormat: config?.displayFormat ?? 'table', }; } async initialize() { await fs.mkdir(this.dataDir, { recursive: true }); return { success: true, config: this.config }; } getConfig() { return { ...this.config }; } async update(metrics) { this.metricsHistory.push(metrics); // Keep only maxDataPoints to prevent memory leaks if (this.metricsHistory.length > this.config.maxDataPoints) { this.metricsHistory = this.metricsHistory.slice(-this.config.maxDataPoints); } } async render(metrics, format) { const displayFormat = format ?? this.config.displayFormat; switch (displayFormat) { case 'table': return this.renderTable(metrics); case 'graph': return this.renderGraph(metrics); case 'compact': return this.renderCompact(metrics); default: return this.renderTable(metrics); } } renderTable(metrics) { const cpuAvg = this.average(metrics.cpu); const memAvg = this.average(metrics.memory); const netAvg = this.average(metrics.network); return ` ╔════════════════════════════════════════╗ ║ MONITORING DASHBOARD ║ ╠════════════════════════════════════════╣ ║ Metric │ Current │ Avg │ Trend ║ ╟────────────┼─────────┼───────┼─────────╢ ║ CPU │ ${this.formatPercent(metrics.cpu[metrics.cpu.length - 1])} │ ${this.formatPercent(cpuAvg)} │ ${this.getTrendArrow(metrics.cpu)} ║ ║ Memory │ ${this.formatPercent(metrics.memory[metrics.memory.length - 1])} │ ${this.formatPercent(memAvg)} │ ${this.getTrendArrow(metrics.memory)} ║ ║ Network │ ${this.formatMbps(metrics.network[metrics.network.length - 1])} │ ${this.formatMbps(netAvg)} │ ${this.getTrendArrow(metrics.network)} ║ ╚════════════════════════════════════════╝ Updated: ${new Date(metrics.timestamp).toLocaleString()} `.trim(); } renderGraph(metrics) { const cpuGraph = this.createSparkline(metrics.cpu, 20); const memGraph = this.createSparkline(metrics.memory, 20); const netGraph = this.createSparkline(metrics.network, 20); return ` MONITORING DASHBOARD - GRAPHICAL VIEW CPU Usage: ${cpuGraph} ${this.formatPercent(this.average(metrics.cpu))} Memory Usage: ${memGraph} ${this.formatPercent(this.average(metrics.memory))} Network Usage: ${netGraph} ${this.formatMbps(this.average(metrics.network))} Updated: ${new Date(metrics.timestamp).toLocaleString()} `.trim(); } renderCompact(metrics) { const cpuAvg = this.average(metrics.cpu); const memAvg = this.average(metrics.memory); const netAvg = this.average(metrics.network); return `CPU: ${this.formatPercent(cpuAvg)} | MEM: ${this.formatPercent(memAvg)} | NET: ${this.formatMbps(netAvg)}`; } createSparkline(data, width) { const blocks = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']; const max = Math.max(...data); const min = Math.min(...data); const range = max - min || 1; // Sample data to fit width const step = Math.max(1, Math.floor(data.length / width)); const sampledData = []; for (let i = 0; i < data.length; i += step) { sampledData.push(data[i]); } return sampledData .map(value => { const normalized = (value - min) / range; const blockIndex = Math.floor(normalized * (blocks.length - 1)); return blocks[blockIndex]; }) .join(''); } average(values) { return values.reduce((a, b) => a + b, 0) / values.length; } getTrendArrow(values) { if (values.length < 2) return '→'; const recent = values.slice(-3); const older = values.slice(-6, -3); if (older.length === 0) return '→'; const recentAvg = this.average(recent); const olderAvg = this.average(older); if (recentAvg > olderAvg * 1.1) return '↑'; if (recentAvg < olderAvg * 0.9) return '↓'; return '→'; } formatPercent(value) { return `${value.toFixed(1).padStart(5)}%`; } formatMbps(value) { return `${value.toFixed(0).padStart(4)}Mb`; } } exports.MonitorDashboard = MonitorDashboard; //# sourceMappingURL=dashboard.js.map