yt-dlp hem "kanal canlı değil" hem de gerçek bir hata (ağ engeli, bot tespiti, extractor kırılması) durumunda non-zero exit code veriyor; ikisi ayırt edilemiyordu. Son hata mesajı artık kanal başına saklanıp GET /status içinde lastPollError alanında dönüyor. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
39 lines
989 B
TypeScript
39 lines
989 B
TypeScript
import express from "express";
|
|
import { prisma } from "@streamclipper/db";
|
|
import { env } from "./env";
|
|
import { lastPollErrors } from "./youtubePolling";
|
|
|
|
export function startServer() {
|
|
const app = express();
|
|
|
|
app.get("/health", (_req, res) => res.json({ ok: true }));
|
|
|
|
app.get("/status", async (_req, res) => {
|
|
const channels = await prisma.channel.findMany({
|
|
include: {
|
|
sessions: {
|
|
where: { endedAt: null },
|
|
orderBy: { startedAt: "desc" },
|
|
take: 1,
|
|
},
|
|
},
|
|
});
|
|
|
|
res.json({
|
|
channels: channels.map((c) => ({
|
|
id: c.id,
|
|
name: c.name,
|
|
isActive: c.isActive,
|
|
lastCheckedAt: c.lastCheckedAt,
|
|
recording: c.sessions.length > 0,
|
|
activeSessionId: c.sessions[0]?.id ?? null,
|
|
lastPollError: lastPollErrors.get(c.channelId) ?? null,
|
|
})),
|
|
});
|
|
});
|
|
|
|
app.listen(env.port, () => {
|
|
console.log(`[server] api-daemon listening on :${env.port}`);
|
|
});
|
|
}
|