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 });
|
|
|
|
|
});
|
|
|
|
|
|
2026-05-21 14:53:08 -04:00
|
|
|
router.post('/rescan', async (req, res) => {
|
|
|
|
|
const targetDir = getConfig('target_dir');
|
|
|
|
|
const resultsDir = getConfig('results_dir');
|
|
|
|
|
if (!targetDir || !resultsDir) {
|
|
|
|
|
return res.status(400).json({ error: 'Directories not configured' });
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
await fullScan(targetDir, resultsDir);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('[config] rescan 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] Rescan complete — ${tests.length} tests, ${completed} completed`);
|
|
|
|
|
res.json({ ok: true, testCount: tests.length, completedCount: completed });
|
|
|
|
|
});
|
|
|
|
|
|
2026-05-20 11:52:18 -04:00
|
|
|
module.exports = router;
|