Files
triggerdotdev--trigger.dev/perf/src/trigger.ts
T
Eric Allam 8fc8f57b39 v2: MarQS powered job executions (#1149)
* WIP

* Allow marqsv2 and v2 graphile to run in parallel

* Fix missing GraphileLogger import

* Fixed heartbeat after rebase

* Replace postgres based run counters with redis ones with a backfill

* Add back in the graphile logger

* Remove duplicate visibility timeout calls

* Clamp simple weighted strategy to max of 5
2024-06-06 13:56:27 +01:00

198 lines
3.7 KiB
TypeScript

import { TriggerClient, eventTrigger } from "@trigger.dev/sdk";
export const triggerClient = new TriggerClient({
id: "perf",
apiKey: process.env.TRIGGER_API_KEY!,
apiUrl: process.env.TRIGGER_API_URL!,
});
triggerClient.defineJob({
id: `perf-test-1`,
name: `Perf Test 1`,
version: "1.0.0",
trigger: eventTrigger({
name: "perf.test",
}),
run: async (payload, io, ctx) => {
await io.runTask(
"task-1",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 1" }
);
await io.wait("wait", 1);
await io.runTask(
"task-2",
async (task) => {
return {
value: Math.random(),
};
},
{ name: "task 2" }
);
await io.runTask(
"task-3",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 3" }
);
},
});
triggerClient.defineJob({
id: `perf-test-2`,
name: `Perf Test 2`,
version: "1.0.0",
trigger: eventTrigger({
name: "perf.test",
}),
concurrencyLimit: 3,
run: async (payload, io, ctx) => {
await io.runTask(
"task-1",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 1" }
);
await io.wait("wait", 1);
await io.runTask(
"task-2",
async (task) => {
return {
value: Math.random(),
};
},
{ name: "task 2" }
);
await io.runTask(
"task-3",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 3" }
);
},
});
const concurrencyLimit = triggerClient.defineConcurrencyLimit({
id: `test-shared`,
limit: 5, // Limit all jobs in this group to 5 concurrent executions
});
triggerClient.defineJob({
id: `perf-test-3`,
name: `Perf Test 3`,
version: "1.0.0",
trigger: eventTrigger({
name: "perf.test",
}),
concurrencyLimit,
run: async (payload, io, ctx) => {
await io.runTask(
"task-1",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 1" }
);
await io.wait("wait", 1);
await io.runTask(
"task-2",
async (task) => {
return {
value: Math.random(),
};
},
{ name: "task 2" }
);
await io.runTask(
"task-3",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 3" }
);
},
});
triggerClient.defineJob({
id: `perf-test-4`,
name: `Perf Test 4`,
version: "1.0.0",
trigger: eventTrigger({
name: "perf.test",
}),
concurrencyLimit,
run: async (payload, io, ctx) => {
await io.runTask(
"task-1",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 1" }
);
await io.runTask(
"task-2",
async (task) => {
return {
value: Math.random(),
};
},
{ name: "task 2" }
);
await io.runTask(
"task-3",
async (task) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
value: Math.random(),
};
},
{ name: "task 3" }
);
},
});