149 lines
4.7 KiB
JavaScript
149 lines
4.7 KiB
JavaScript
/**
|
||
* /api/databases/:name — 获取数据库数据路由
|
||
* /api/syslogs — 获取最近 SYSLOG
|
||
* /api/agents — 获取 Agent 注册表
|
||
* /api/tickets — 获取活跃工单
|
||
* /api/repo/status — 获取仓库状态
|
||
*
|
||
* 版权:国作登字-2026-A-00037559
|
||
*/
|
||
|
||
'use strict';
|
||
|
||
var express = require('express');
|
||
var router = express.Router();
|
||
var notionService = require('../services/notion');
|
||
var githubService = require('../services/github');
|
||
var dbConfig = require('../config/databases');
|
||
|
||
// 通用数据库查询
|
||
router.get('/databases/:name', async function(req, res) {
|
||
var name = req.params.name;
|
||
|
||
var dbMap = {
|
||
'agent-registry': dbConfig.agentRegistry,
|
||
'syslog-recent': dbConfig.syslogInbox,
|
||
'tickets-active': dbConfig.ticketBook,
|
||
'maintenance-log': dbConfig.maintenanceLog,
|
||
'receipt-tracker': dbConfig.receiptTracker
|
||
};
|
||
|
||
var dbId = dbMap[name];
|
||
if (!dbId) {
|
||
return res.status(404).json({
|
||
error: true,
|
||
code: 'DB_NOT_FOUND',
|
||
message: '数据库不存在或未配置: ' + name
|
||
});
|
||
}
|
||
|
||
try {
|
||
var sorts = null;
|
||
var filter = null;
|
||
var pageSize = 50;
|
||
|
||
// 不同数据库有不同的默认排序和筛选
|
||
if (name === 'syslog-recent') {
|
||
sorts = [{ property: 'Created time', direction: 'descending' }];
|
||
} else if (name === 'tickets-active') {
|
||
filter = { property: '状态', select: { does_not_equal: '已完成' } };
|
||
sorts = [{ property: 'Created time', direction: 'descending' }];
|
||
} else if (name === 'maintenance-log') {
|
||
sorts = [{ property: 'Created time', direction: 'descending' }];
|
||
pageSize = 20;
|
||
}
|
||
|
||
var result = await notionService.queryDB(dbId, filter, sorts, pageSize);
|
||
res.json({
|
||
synced: new Date().toISOString(),
|
||
count: result.results ? result.results.length : 0,
|
||
data: result.results || [],
|
||
_source: 'realtime'
|
||
});
|
||
} catch (err) {
|
||
console.error('[/api/databases/' + name + '] Error:', err.message);
|
||
res.status(500).json({
|
||
error: true,
|
||
code: 'QUERY_FAILED',
|
||
message: '数据库查询失败: ' + err.message
|
||
});
|
||
}
|
||
});
|
||
|
||
// 快捷路由:最近 SYSLOG
|
||
router.get('/syslogs', async function(_req, res) {
|
||
if (!dbConfig.syslogInbox) {
|
||
return res.status(404).json({ error: true, code: 'DB_NOT_CONFIGURED', message: 'SYSLOG 数据库未配置' });
|
||
}
|
||
try {
|
||
var result = await notionService.queryDB(dbConfig.syslogInbox, null,
|
||
[{ property: 'Created time', direction: 'descending' }], 50);
|
||
res.json({
|
||
synced: new Date().toISOString(),
|
||
count: result.results ? result.results.length : 0,
|
||
data: result.results || [],
|
||
_source: 'realtime'
|
||
});
|
||
} catch (err) {
|
||
res.status(500).json({ error: true, code: 'QUERY_FAILED', message: err.message });
|
||
}
|
||
});
|
||
|
||
// 快捷路由:Agent 注册表
|
||
router.get('/agents', async function(_req, res) {
|
||
if (!dbConfig.agentRegistry) {
|
||
return res.status(404).json({ error: true, code: 'DB_NOT_CONFIGURED', message: 'Agent 注册表未配置' });
|
||
}
|
||
try {
|
||
var result = await notionService.queryDB(dbConfig.agentRegistry, null, null, 100);
|
||
res.json({
|
||
synced: new Date().toISOString(),
|
||
count: result.results ? result.results.length : 0,
|
||
data: result.results || [],
|
||
_source: 'realtime'
|
||
});
|
||
} catch (err) {
|
||
res.status(500).json({ error: true, code: 'QUERY_FAILED', message: err.message });
|
||
}
|
||
});
|
||
|
||
// 快捷路由:活跃工单
|
||
router.get('/tickets', async function(_req, res) {
|
||
if (!dbConfig.ticketBook) {
|
||
return res.status(404).json({ error: true, code: 'DB_NOT_CONFIGURED', message: '工单簿未配置' });
|
||
}
|
||
try {
|
||
var result = await notionService.queryDB(dbConfig.ticketBook,
|
||
{ property: '状态', select: { does_not_equal: '已完成' } },
|
||
[{ property: 'Created time', direction: 'descending' }], 50);
|
||
res.json({
|
||
synced: new Date().toISOString(),
|
||
count: result.results ? result.results.length : 0,
|
||
data: result.results || [],
|
||
_source: 'realtime'
|
||
});
|
||
} catch (err) {
|
||
res.status(500).json({ error: true, code: 'QUERY_FAILED', message: err.message });
|
||
}
|
||
});
|
||
|
||
// 仓库状态(GitHub API)
|
||
router.get('/repo/status', async function(_req, res) {
|
||
try {
|
||
var status = await githubService.getRepoStatus('guanghulab');
|
||
var commits = await githubService.getRecentCommits('guanghulab', 5);
|
||
var workflows = await githubService.getWorkflowRuns('guanghulab', 5);
|
||
res.json({
|
||
repo: status,
|
||
recent_commits: commits,
|
||
recent_workflows: workflows,
|
||
_source: 'realtime',
|
||
timestamp: new Date().toISOString()
|
||
});
|
||
} catch (err) {
|
||
res.status(500).json({ error: true, code: 'GITHUB_ERROR', message: err.message });
|
||
}
|
||
});
|
||
|
||
module.exports = router;
|