Files
test_dashboard/server/routes/config.js
T

62 lines
1.8 KiB
JavaScript
Raw Normal View History

2026-05-20 11:52:18 -04:00
'use strict';
const { Router } = require('express');
const { getConfig, setConfig, delConfig, getAllTests } = require('../db');
const { fullScan } = require('../scanner');
const { startWatching } = require('../watcher');
const router = Router();
const ALLOWED_KEYS = new Set([
'target_dir', 'results_dir',
'avg_time_coe', 'avg_time_p2p', 'avg_time_p3p',
]);
router.get('/', (req, res) => {
const config = {};
for (const key of ALLOWED_KEYS) {
config[key] = getConfig(key);
}
res.json(config);
});
router.post('/', async (req, res) => {
const updates = req.body;
if (!updates || typeof updates !== 'object') {
return res.status(400).json({ error: 'Request body must be a JSON object' });
}
let dirsChanged = false;
for (const [key, value] of Object.entries(updates)) {
if (!ALLOWED_KEYS.has(key)) continue;
if (value === null || value === '') {
delConfig(key);
} else {
setConfig(key, String(value));
}
if (key === 'target_dir' || key === 'results_dir') dirsChanged = true;
}
if (dirsChanged) {
const targetDir = getConfig('target_dir');
const resultsDir = getConfig('results_dir');
try {
await fullScan(targetDir, resultsDir);
} catch (e) {
console.error('[config] fullScan error:', e.message);
return res.status(500).json({ error: `Scan failed: ${e.message}` });
}
startWatching(targetDir, resultsDir);
const tests = getAllTests();
const completed = tests.filter(t => t.completed).length;
console.log(`[config] Scan complete — ${tests.length} tests found, ${completed} completed`);
return res.json({ ok: true, testCount: tests.length, completedCount: completed });
}
res.json({ ok: true, testCount: null, completedCount: null });
});
module.exports = router;