Files
Matt Aitken 1c5ee5d94c Added TaskRun completedAt column (#1243)
* Added TaskRun completedAt column

* When finalising a run set the completedAt date

* A note to discuss whether we need to set the completedAt to null

* Remove the note in the sharedQueueConsumer
2024-08-02 10:31:38 +01:00

103 lines
2.3 KiB
TypeScript

// Bulk adds data to the database for testing
// Call it like this
// 1. pnpm run build:db:populate
// 2. pnpm run db:populate -- --projectRef=proj_liazlkfgmfcusswwgohl --taskIdentifier=child-task --runCount=100000
import { generateFriendlyId } from "~/v3/friendlyIdentifiers";
import { prisma } from "../app/db.server";
async function populate() {
if (process.env.NODE_ENV !== "development") {
return;
}
const projectRef = getArg("projectRef");
if (!projectRef) {
throw new Error("projectRef is required");
}
const project = await prisma.project.findUnique({
include: {
environments: true,
},
where: {
externalRef: projectRef,
},
});
if (!project) {
throw new Error("Project not found");
}
const taskIdentifier = getArg("taskIdentifier");
if (!taskIdentifier) {
throw new Error("taskIdentifier is required");
}
const runCount = parseInt(getArg("runCount") || "100");
const task = await prisma.backgroundWorkerTask.findFirst({
where: {
projectId: project.id,
slug: taskIdentifier,
},
orderBy: {
createdAt: "desc",
},
});
if (!task) {
throw new Error("Task not found");
}
const runs = await prisma.taskRun.createMany({
data: Array(runCount)
.fill(0)
.map((_, index) => {
const friendlyId = generateFriendlyId("run");
return {
status: "CANCELED",
completedAt: new Date(),
number: index + 1,
friendlyId,
runtimeEnvironmentId: project.environments[randomIndex(project.environments)].id,
projectId: project.id,
taskIdentifier,
payload: JSON.stringify({ foo: "bar" }),
traceId: "traceId",
spanId: "spanId",
queue: "task/${taskIdentifier}",
};
}),
skipDuplicates: true,
});
console.log(`Added ${runs.count} runs`);
}
function getArg(name: string) {
const args = process.argv.slice(2);
let value = "";
args.forEach((val) => {
if (val.startsWith(`--${name}=`)) {
value = val.split("=")[1];
}
});
return !value ? undefined : value;
}
function randomIndex<T>(array: T[]) {
return Math.floor(Math.random() * array.length);
}
populate()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});