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;