UNPKG

@agentscope/studio

Version:

AgentScope Studio is a powerful local monitoring and visualization tool designed to provide real-time insights into your system's performance and behavior.

243 lines (242 loc) 9.51 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RunDao = void 0; const Run_1 = require("../models/Run"); const utils_1 = require("../utils"); const RunView_1 = require("../models/RunView"); const typeorm_1 = require("typeorm"); const messageForm_1 = require("../../../shared/src/types/messageForm"); class RunDao { static doesProjectExist(project) { return __awaiter(this, void 0, void 0, function* () { try { const run = yield Run_1.RunTable.findOne({ where: { project } }); return run !== null; } catch (error) { console.error(error); throw error; } }); } static doesRunExist(runId) { return __awaiter(this, void 0, void 0, function* () { try { const run = yield Run_1.RunTable.findOne({ where: { id: runId } }); return run !== null; } catch (error) { console.error(error); throw error; } }); } static addRun(runData) { return __awaiter(this, void 0, void 0, function* () { try { const run = Run_1.RunTable.create(Object.assign({}, runData)); yield run.save(); } catch (error) { console.error(error); throw error; } }); } static getAllProjects() { return __awaiter(this, void 0, void 0, function* () { try { const result = yield Run_1.RunTable.createQueryBuilder('run') .select('DISTINCT run.project', 'project') .addSelect((qb) => qb .select('COUNT(*)') .from(Run_1.RunTable, 'r') .where('r.project = run.project') .andWhere('r.status = :running', { running: messageForm_1.Status.RUNNING, }), 'running') .addSelect((qb) => qb .select('COUNT(*)') .from(Run_1.RunTable, 'r') .where('r.project = run.project') .andWhere('r.status = :pending', { pending: messageForm_1.Status.PENDING, }), 'pending') .addSelect((qb) => qb .select('COUNT(*)') .from(Run_1.RunTable, 'r') .where('r.project = run.project') .andWhere('r.status = :finished', { finished: messageForm_1.Status.DONE, }), 'finished') .groupBy('run.project') .getRawMany(); return result.map((row) => ({ project: row.project, running: parseInt(row.running), pending: parseInt(row.pending), finished: parseInt(row.finished), total: parseInt(row.running) + parseInt(row.pending) + parseInt(row.finished), })); } catch (error) { console.error(error); throw error; } }); } /* * Get all runs for a project */ static getAllProjectRuns(project) { return __awaiter(this, void 0, void 0, function* () { try { const result = yield Run_1.RunTable.find({ where: { project }, order: { timestamp: 'DESC' }, }); return result.map((row) => ({ id: row.id, project: row.project, name: row.name, timestamp: row.timestamp, run_dir: row.run_dir, pid: row.pid, status: row.status, })); } catch (error) { console.error(error); throw error; } }); } static getRunData(runId) { return __awaiter(this, void 0, void 0, function* () { try { const result = yield Run_1.RunTable.findOne({ where: { id: runId }, relations: ['messages', 'inputRequests'], }); if (result) { return { runData: { id: result.id, project: result.project, name: result.name, timestamp: result.timestamp, run_dir: result.run_dir, pid: result.pid, status: result.status, }, inputRequests: result.inputRequests.map((row) => ({ requestId: row.requestId, agentId: row.agentId, agentName: row.agentName, structuredInput: row.structuredInput, })), messages: result.messages.map((row) => (Object.assign({ id: row.id, runId: row.runId, replyId: row.replyId }, row.msg))), }; } else { throw new Error(`Run with id ${runId} not found`); } } catch (error) { console.error(error); throw error; } }); } static changeRunStatus(runId, newStatus) { return __awaiter(this, void 0, void 0, function* () { try { const run = yield Run_1.RunTable.findOne({ where: { id: runId } }); if (run) { run.status = newStatus; yield run.save(); } else { throw new Error(`Run with id ${runId} not found`); } } catch (error) { console.error(error); throw error; } }); } static updateRunStatusAtBeginning() { return __awaiter(this, void 0, void 0, function* () { try { const runs = yield Run_1.RunTable.find({ where: [{ status: messageForm_1.Status.RUNNING }, { status: messageForm_1.Status.PENDING }], }); for (const run of runs) { const processExists = yield (0, utils_1.checkProcessByPid)(run.pid); if (!processExists) { run.status = messageForm_1.Status.DONE; yield run.save(); } } } catch (error) { console.error(error); throw error; } }); } static getRunViewData() { return __awaiter(this, void 0, void 0, function* () { // Get run view data const runViewData = yield RunView_1.RunView.find(); // Search four projects that are updated most recently const recentProjects = yield Run_1.RunTable.createQueryBuilder('run') .select('run.project', 'project') .addSelect('MAX(run.timestamp)', 'lastUpdateTime') .addSelect('COUNT(*)', 'runCount') // 按项目分组 .groupBy('run.project') // 按最后更新时间降序排序 .orderBy('lastUpdateTime', 'DESC') // 限制返回4个结果 .limit(4) .getRawMany(); return Object.assign(Object.assign({}, runViewData[0]), { recentProjects: recentProjects.map((project) => ({ name: project.project, lastUpdateTime: project.lastUpdateTime, runCount: parseInt(project.runCount), })) }); }); } static deleteRuns(runIds) { return __awaiter(this, void 0, void 0, function* () { const conditions = { id: (0, typeorm_1.In)(runIds), }; const result = yield Run_1.RunTable.delete(conditions); return result.affected; }); } static deleteProjects(projects) { return __awaiter(this, void 0, void 0, function* () { const conditions = { project: (0, typeorm_1.In)(projects), }; const result = yield Run_1.RunTable.delete(conditions); return result.affected; }); } } exports.RunDao = RunDao;