File size: 1,519 Bytes
11f4e50 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import { Router, Response } from 'express';
import { authMiddleware, adminMiddleware, AuthRequest } from '../middleware/auth';
import { activeSessions } from '../services/cliBridge';
import { User, Video } from '../models';
const router = Router();
router.use(authMiddleware);
router.use(adminMiddleware);
// GET /api/admin/queue -- view active CLI sessions
router.get('/queue', async (_req: AuthRequest, res: Response) => {
try {
const sessions = Array.from(activeSessions.entries()).map(([id, session]) => ({
sessionId: id,
userId: session.userId,
videoId: session.videoId,
logCount: session.logs.length,
}));
res.json({ activeSessions: sessions, count: sessions.length });
} catch (error) {
res.status(500).json({ error: 'Failed to fetch queue status.' });
}
});
// GET /api/admin/stats -- overview stats
router.get('/stats', async (_req: AuthRequest, res: Response) => {
try {
const userCount = await User.countDocuments();
const videoCount = await Video.countDocuments();
const pendingVideos = await Video.countDocuments({ status: 'generating' });
res.json({
users: userCount,
videos: videoCount,
pendingVideos,
activeCLISessions: activeSessions.size,
});
} catch (error) {
res.status(500).json({ error: 'Failed to fetch stats.' });
}
});
export default router;
|