jobList

tcmts.studio.jobList · #jgvpxp6k · term · runs on the server

uses tcmts.studio.withJobs, which uses node:path

The queue, newest first (status narrows it: queued, running, done, failed or cancelled; 200 at most), and how many jobs are in each state.

import type { Codebase } from "#codebase/tcmts/cli/codebase";
import { jobOfRow, withJobs } from "#codebase/tcmts/studio";
import type { Job } from "#codebase/tcmts/studio";

export function jobList(
  cb: Codebase,
  status: string,
): { jobs: Job[]; counts: Record<string, number> } {
  return (
    withJobs(cb, (db) => {
      const counts = Object.fromEntries(
        (
          db.prepare("SELECT status, count(*) AS n FROM jobs GROUP BY status").all() as {
            status: string;
            n: number;
          }[]
        ).map((r) => [r.status, r.n]),
      );
      const rows = (
        status
          ? db
              .prepare("SELECT * FROM jobs WHERE status = ? ORDER BY created DESC LIMIT 200")
              .all(status)
          : db.prepare("SELECT * FROM jobs ORDER BY created DESC LIMIT 200").all()
      ) as Record<string, unknown>[];
      return { jobs: rows.map(jobOfRow), counts };
    }) ?? { jobs: [], counts: {} }
  );
}

uses

used by