Detail and List card update

This commit is contained in:
2025-11-27 15:56:21 +03:00
parent 602065a71c
commit 5222cceb81
7 changed files with 308 additions and 26 deletions

View File

@@ -10,7 +10,19 @@ router.use(authMiddleware);
router.get("/", async (_req, res) => {
const jobs = await Job.find().sort({ createdAt: -1 }).lean();
res.json(jobs);
const counts = await JobRun.aggregate([
{ $group: { _id: "$job", runCount: { $sum: 1 } } }
]);
const countMap = counts.reduce<Record<string, number>>((acc, item) => {
acc[item._id.toString()] = item.runCount;
return acc;
}, {});
res.json(
jobs.map((job) => ({
...job,
runCount: countMap[job._id.toString()] || 0
}))
);
});
router.get("/:id", async (req, res) => {

View File

@@ -92,14 +92,16 @@ class JobService {
this.io = io;
}
private emitStatus(jobId: string, payload: Partial<JobDocument>) {
private async emitStatus(jobId: string, payload: Partial<JobDocument>) {
if (!this.io) return;
const runCount = await JobRun.countDocuments({ job: jobId });
const body = {
jobId,
status: payload.status,
lastRunAt: payload.lastRunAt,
lastDurationMs: payload.lastDurationMs,
lastMessage: payload.lastMessage
lastMessage: payload.lastMessage,
runCount
};
this.io.to(`job:${jobId}`).emit("job:status", body);
this.io.emit("job:status", body);
@@ -130,7 +132,7 @@ class JobService {
});
await Job.findByIdAndUpdate(jobId, { status: "running", lastMessage: "Çalıştırılıyor..." });
this.emitStatus(jobId, { status: "running", lastMessage: "Çalıştırılıyor..." } as JobDocument);
await this.emitStatus(jobId, { status: "running", lastMessage: "Çalıştırılıyor..." } as JobDocument);
try {
const repoDir = await cloneOrPull(job, (line) => pushLog(line));
@@ -151,7 +153,7 @@ class JobService {
durationMs: duration,
logs: runLogs
});
this.emitStatus(jobId, {
await this.emitStatus(jobId, {
status: "success",
lastRunAt: new Date(),
lastDurationMs: duration,
@@ -172,7 +174,7 @@ class JobService {
logs: runLogs
});
pushLog(`Hata: ${(err as Error).message}`);
this.emitStatus(jobId, {
await this.emitStatus(jobId, {
status: "failed",
lastRunAt: new Date(),
lastDurationMs: duration,