添加更多的延迟选择

This commit is contained in:
CN-JS-HuiBai
2026-04-05 23:53:22 +08:00
parent 4e953c01fc
commit dddf9dba65
4 changed files with 287 additions and 141 deletions

View File

@@ -842,24 +842,69 @@ app.get('*', (req, res, next) => {
});
// Get latency for A-B connection
// ==================== Latency Routes CRUD ====================
app.get('/api/latency-routes', async (req, res) => {
try {
const [rows] = await db.query(`
SELECT r.*, s.name as source_name
FROM latency_routes r
LEFT JOIN prometheus_sources s ON r.source_id = s.id
ORDER BY r.created_at DESC
`);
res.json(rows);
} catch (err) {
res.status(500).json({ error: 'Failed to fetch latency routes' });
}
});
app.post('/api/latency-routes', requireAuth, async (req, res) => {
const { source_id, latency_source, latency_dest, latency_target } = req.body;
try {
await db.query('INSERT INTO latency_routes (source_id, latency_source, latency_dest, latency_target) VALUES (?, ?, ?, ?)', [source_id, latency_source, latency_dest, latency_target]);
res.json({ success: true });
} catch (err) {
res.status(500).json({ error: 'Failed to add latency route' });
}
});
app.delete('/api/latency-routes/:id', requireAuth, async (req, res) => {
try {
await db.query('DELETE FROM latency_routes WHERE id = ?', [req.params.id]);
res.json({ success: true });
} catch (err) {
res.status(500).json({ error: 'Failed to delete latency route' });
}
});
// ==================== Metrics Latency ====================
app.get('/api/metrics/latency', async (req, res) => {
try {
const [settings] = await db.query('SELECT blackbox_source_id, latency_target FROM site_settings WHERE id = 1');
if (settings.length === 0 || !settings[0].blackbox_source_id || !settings[0].latency_target) {
return res.json({ latency: null });
}
const [routes] = await db.query(`
SELECT r.*, s.url
FROM latency_routes r
JOIN prometheus_sources s ON r.source_id = s.id
`);
// Lookup source URL from the source ID
const [sources] = await db.query('SELECT url FROM prometheus_sources WHERE id = ?', [settings[0].blackbox_source_id]);
if (sources.length === 0) {
return res.json({ latency: null });
if (routes.length === 0) {
// Return empty routes array instead of null for consistency
return res.json({ routes: [] });
}
const latency = await prometheusService.getLatency(sources[0].url, settings[0].latency_target);
res.json({ latency });
const results = await Promise.all(routes.map(async (route) => {
const latency = await prometheusService.getLatency(route.url, route.latency_target);
return {
id: route.id,
source: route.latency_source,
dest: route.latency_dest,
latency: latency
};
}));
res.json({ routes: results });
} catch (err) {
console.error('Error fetching latency:', err);
console.error('Error fetching latencies:', err);
res.status(500).json({ error: 'Failed to fetch latency' });
}
});