UNPKG

pm-orchestrator-enhancement

Version:

PM Orchestrator Enhancement - Multi-agent parallel execution system

125 lines 4.73 kB
"use strict"; /** * PM Orchestrator Enhancement - Metrics Collector * * タスク実行メトリクスの収集と集計を担当します。 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetricsCollector = void 0; const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const execution_logger_1 = require("../logger/execution-logger"); /** * MetricsCollectorクラス * * ExecutionLoggerが記録した実行ログからメトリクスを収集・集計します。 * 日次サマリーの保存とメトリクスの取得機能を提供します。 */ class MetricsCollector { /** * コンストラクタ * * @param baseDir メトリクスディレクトリのベースパス(デフォルト: カレントディレクトリ) */ constructor(baseDir = process.cwd()) { this.logger = new execution_logger_1.ExecutionLogger(baseDir); this.metricsDir = path_1.default.join(baseDir, '.pm-orchestrator', 'metrics'); } /** * 指定日の日次サマリーを保存します * * @param date サマリーの対象日 */ async saveDailySummary(date) { // 対象日の開始・終了時刻を設定 const startOfDay = new Date(date); startOfDay.setHours(0, 0, 0, 0); const endOfDay = new Date(date); endOfDay.setHours(23, 59, 59, 999); // 対象日のログを取得 const logs = await this.logger.getLogsBetween(startOfDay, endOfDay); // メトリクスを計算 const metrics = this.calculateMetrics(logs); // メトリクスディレクトリを作成 await fs_1.promises.mkdir(this.metricsDir, { recursive: true }); // 日次サマリーをファイルに保存 const dateStr = date.toISOString().split('T')[0]; // YYYY-MM-DD const fileName = `daily-summary-${dateStr}.json`; const filePath = path_1.default.join(this.metricsDir, fileName); const summary = { date: dateStr, metrics, logCount: logs.length }; await fs_1.promises.writeFile(filePath, JSON.stringify(summary, null, 2), 'utf-8'); } /** * 指定期間のメトリクスを取得します * * @param startDate 開始日 * @param endDate 終了日 * @returns メトリクス */ async getMetrics(startDate, endDate) { // 指定期間のログを取得 const logs = await this.logger.getLogsBetween(startDate, endDate); // メトリクスを計算 return this.calculateMetrics(logs); } /** * ログからメトリクスを計算します(プライベートメソッド) * * @param logs 実行ログの配列 * @returns メトリクス */ calculateMetrics(logs) { if (logs.length === 0) { return { totalTasks: 0, successRate: 0, averageDuration: 0, averageQualityScore: 0, errorDistribution: {}, subagentUsage: {} }; } // 総タスク数 const totalTasks = logs.length; // 成功率の計算 const successCount = logs.filter(log => log.status === 'success').length; const successRate = (successCount / totalTasks) * 100; // 平均実行時間の計算 const totalDuration = logs.reduce((sum, log) => sum + log.duration, 0); const averageDuration = totalDuration / totalTasks; // 平均品質スコアの計算 const totalQualityScore = logs.reduce((sum, log) => sum + log.qualityScore, 0); const averageQualityScore = totalQualityScore / totalTasks; // エラー分布の計算 const errorDistribution = {}; logs.forEach(log => { if (log.errorType) { errorDistribution[log.errorType] = (errorDistribution[log.errorType] || 0) + 1; } }); // サブエージェント使用回数の計算 const subagentUsage = {}; logs.forEach(log => { log.subagents.forEach(subagent => { subagentUsage[subagent.name] = (subagentUsage[subagent.name] || 0) + 1; }); }); return { totalTasks, successRate, averageDuration, averageQualityScore, errorDistribution, subagentUsage }; } } exports.MetricsCollector = MetricsCollector; //# sourceMappingURL=metrics-collector.js.map