Skip to content

Commit 9c89ab4

Browse files
authored
Throttle the live streaming of the run to 1 second updates (triggerdotdev#972)
1 parent b342e06 commit 9c89ab4

2 files changed

Lines changed: 25 additions & 10 deletions

File tree

apps/webapp/app/presenters/v3/RunStreamPresenter.server.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
import { TaskRun, TaskRunAttempt } from "@trigger.dev/database";
1+
import { TaskRun } from "@trigger.dev/database";
22
import { eventStream } from "remix-utils/sse/server";
33
import { PrismaClient, prisma } from "~/db.server";
44
import { logger } from "~/services/logger.server";
5+
import { throttle } from "~/utils/throttle";
56
import { eventRepository } from "~/v3/eventRepository.server";
67

7-
type RunWithAttempts = {
8-
updatedAt: Date;
9-
attempts: {
10-
status: TaskRunAttempt["status"];
11-
updatedAt: Date;
12-
}[];
13-
};
14-
158
const pingInterval = 1000;
169

1710
export class RunStreamPresenter {
@@ -77,8 +70,10 @@ export class RunStreamPresenter {
7770
}
7871
};
7972

73+
const throttledSend = throttle(safeSend, 1000);
74+
8075
eventEmitter.addListener("message", (event) => {
81-
safeSend({ data: event });
76+
throttledSend({ data: event });
8277
});
8378

8479
pinger = setInterval(() => {

apps/webapp/app/utils/throttle.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//From: https://kettanaito.com/blog/debounce-vs-throttle
2+
3+
/** A very simple throttle. Will execute the function every Xms and discard any other calls during that period. */
4+
export function throttle(
5+
func: (...args: any[]) => void,
6+
duration: number
7+
): (...args: any[]) => void {
8+
let shouldWait = false;
9+
10+
return (...args: any[]) => {
11+
if (!shouldWait) {
12+
func(...args);
13+
shouldWait = true;
14+
15+
setTimeout(() => {
16+
shouldWait = false;
17+
}, duration);
18+
}
19+
};
20+
}

0 commit comments

Comments
 (0)