health panel implementation
This commit is contained in:
@@ -188,4 +188,10 @@ export async function updateSettings(updates) {
|
||||
});
|
||||
if (!res.ok) throw new Error(`Failed to update settings: ${res.status}`);
|
||||
return res.json();
|
||||
}
|
||||
|
||||
export async function getServiceHealth() {
|
||||
const res = await fetch(`${BASE_URL}/health/services`);
|
||||
if (!res.ok) throw new Error(`Failed to fetch health: ${res.status}`);
|
||||
return res.json();
|
||||
}
|
||||
@@ -14,6 +14,8 @@ export default defineConfig({
|
||||
'/models': 'http://192.168.0.205:4000',
|
||||
'/projects': 'http://192.168.0.205:4000',
|
||||
'/episodes': 'http://192.168.0.205:4000',
|
||||
'/settings': 'http://192.168.0.205:4000',
|
||||
'/health': 'http://192.168.0.205:4000',
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -7,8 +7,9 @@ const chatRouter = require('./routes/chat');
|
||||
const sessionsRouter = require('./routes/sessions');
|
||||
const modelsRouter = require('./routes/models');
|
||||
const projectsRouter = require('./routes/projects');
|
||||
const episodesRouter = require('./routes/episodes')
|
||||
const settingsRouter = require('./routes/settings')
|
||||
const episodesRouter = require('./routes/episodes');
|
||||
const settingsRouter = require('./routes/settings');
|
||||
const healthRouter = require('./routes/health');
|
||||
|
||||
const cors = require('cors');
|
||||
|
||||
@@ -46,6 +47,7 @@ app.use('/models', modelsRouter);
|
||||
app.use('/projects', projectsRouter);
|
||||
app.use('/episodes', episodesRouter);
|
||||
app.use('/settings', settingsRouter);
|
||||
app.use('/health/services', healthRouter);
|
||||
|
||||
/******* Start the server ************/
|
||||
app.listen(PORT, () => {
|
||||
|
||||
30
packages/orchestration-service/src/routes/health.js
Normal file
30
packages/orchestration-service/src/routes/health.js
Normal file
@@ -0,0 +1,30 @@
|
||||
const { Router } = require('express');
|
||||
const fetch = require('node-fetch');
|
||||
const { getEnv, SERVICES, PORTS } = require('@nexusai/shared');
|
||||
|
||||
const router = Router();
|
||||
|
||||
const SERVICES_MAP = [
|
||||
{ key: 'inference', label: 'Inference', url: `${getEnv('INFERENCE_SERVICE_URL', SERVICES.INFERENCE_URL)}/health` },
|
||||
{ key: 'memory', label: 'Memory', url: `${getEnv('MEMORY_SERVICE_URL', SERVICES.MEMORY_URL)}/health` },
|
||||
{ key: 'embedding', label: 'Embedding', url: `${getEnv('EMBEDDING_SERVICE_URL', SERVICES.EMBEDDING_URL)}/health` },
|
||||
{ key: 'orchestration', label: 'Orchestration', url: `http://localhost:${getEnv('PORT', PORTS.ORCHESTRATION)}/health` },
|
||||
];
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
const results = await Promise.all(
|
||||
SERVICES_MAP.map(async ({ key, label, url }) => {
|
||||
const start = Date.now();
|
||||
try {
|
||||
const r = await fetch(url, { signal: AbortSignal.timeout(3000) });
|
||||
const data = await r.json();
|
||||
return { key, label, status: 'healthy', latency: Date.now() - start, detail: data };
|
||||
} catch (err) {
|
||||
return { key, label, status: 'unreachable', latency: Date.now() - start, detail: null };
|
||||
}
|
||||
})
|
||||
);
|
||||
res.json(results);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user