health panel implementation
This commit is contained in:
@@ -189,3 +189,9 @@ export async function updateSettings(updates) {
|
|||||||
if (!res.ok) throw new Error(`Failed to update settings: ${res.status}`);
|
if (!res.ok) throw new Error(`Failed to update settings: ${res.status}`);
|
||||||
return res.json();
|
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',
|
'/models': 'http://192.168.0.205:4000',
|
||||||
'/projects': 'http://192.168.0.205:4000',
|
'/projects': 'http://192.168.0.205:4000',
|
||||||
'/episodes': '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 sessionsRouter = require('./routes/sessions');
|
||||||
const modelsRouter = require('./routes/models');
|
const modelsRouter = require('./routes/models');
|
||||||
const projectsRouter = require('./routes/projects');
|
const projectsRouter = require('./routes/projects');
|
||||||
const episodesRouter = require('./routes/episodes')
|
const episodesRouter = require('./routes/episodes');
|
||||||
const settingsRouter = require('./routes/settings')
|
const settingsRouter = require('./routes/settings');
|
||||||
|
const healthRouter = require('./routes/health');
|
||||||
|
|
||||||
const cors = require('cors');
|
const cors = require('cors');
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ app.use('/models', modelsRouter);
|
|||||||
app.use('/projects', projectsRouter);
|
app.use('/projects', projectsRouter);
|
||||||
app.use('/episodes', episodesRouter);
|
app.use('/episodes', episodesRouter);
|
||||||
app.use('/settings', settingsRouter);
|
app.use('/settings', settingsRouter);
|
||||||
|
app.use('/health/services', healthRouter);
|
||||||
|
|
||||||
/******* Start the server ************/
|
/******* Start the server ************/
|
||||||
app.listen(PORT, () => {
|
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