65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { Router } from 'express';
|
|
|
|
import { db } from '../db/client';
|
|
import { mediaConfig } from '../media/config';
|
|
import { mediaProvider } from '../media/service';
|
|
import { sfuService } from '../media/sfu/service';
|
|
import { getAllMetrics } from '../observability/metrics';
|
|
import { minioBucket, minioClient } from '../utils/minio';
|
|
|
|
const router = Router();
|
|
|
|
router.get('/live', (_req, res) => {
|
|
res.json({ status: 'ok', service: 'backend', timestamp: new Date().toISOString() });
|
|
});
|
|
|
|
router.get('/ready', async (_req, res) => {
|
|
try {
|
|
await db.execute('select 1');
|
|
await minioClient.bucketExists(minioBucket);
|
|
const sfu = sfuService;
|
|
const sfuSessions = sfu ? await sfu.listSessions() : [];
|
|
const sfuSessionIds = sfuSessions.map((session) => session.streamSessionId);
|
|
const sfuTransports = sfu
|
|
? (await Promise.all(sfuSessionIds.map(async (streamSessionId) => await sfu.listTransports(streamSessionId)))).flat()
|
|
: [];
|
|
const sfuProducers = sfu
|
|
? (await Promise.all(sfuSessionIds.map(async (streamSessionId) => await sfu.listProducers(streamSessionId)))).flat()
|
|
: [];
|
|
const sfuConsumers = sfu
|
|
? (await Promise.all(sfuSessionIds.map(async (streamSessionId) => await sfu.listConsumers(streamSessionId)))).flat()
|
|
: [];
|
|
|
|
res.json({
|
|
status: 'ready',
|
|
checks: {
|
|
database: 'ok',
|
|
minio: 'ok',
|
|
mediaMode: mediaConfig.mode,
|
|
mediaProvider: mediaProvider.name,
|
|
sfuService: sfuService ? sfuService.mode : 'disabled',
|
|
sfuActiveSessions: sfuSessions.filter((session) => session.state !== 'ended').length,
|
|
sfuTransports: sfuTransports.length,
|
|
sfuProducers: sfuProducers.length,
|
|
sfuConsumers: sfuConsumers.length,
|
|
},
|
|
timestamp: new Date().toISOString(),
|
|
});
|
|
} catch (error) {
|
|
res.status(503).json({
|
|
status: 'not_ready',
|
|
error: error instanceof Error ? error.message : 'unknown error',
|
|
timestamp: new Date().toISOString(),
|
|
});
|
|
}
|
|
});
|
|
|
|
router.get('/metrics', (_req, res) => {
|
|
res.json({
|
|
timestamp: new Date().toISOString(),
|
|
metrics: getAllMetrics(),
|
|
});
|
|
});
|
|
|
|
export default router;
|