Skip to content

Commit 3905a6f

Browse files
committed
Merge branch 'main' into v3/waiting-for-deploy
2 parents 6d1d9ae + 03af44e commit 3905a6f

File tree

13 files changed

+103
-16
lines changed

13 files changed

+103
-16
lines changed

.changeset/pre.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"chilled-hornets-move",
4949
"clean-pianos-listen",
5050
"cool-glasses-bake",
51+
"cuddly-feet-approve",
5152
"eight-pumas-float",
5253
"few-students-share",
5354
"green-bags-wink",
@@ -62,6 +63,7 @@
6263
"new-rivers-tell",
6364
"odd-poets-own",
6465
"polite-ducks-switch",
66+
"poor-flowers-cross",
6567
"rare-roses-float",
6668
"real-planets-stare",
6769
"sharp-zebras-serve",

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
{
2424
"type": "node-terminal",
2525
"request": "launch",
26-
"name": "Debug BYO Auth",
26+
"name": "Debug v2 job catalog",
2727
"command": "pnpm run byo-auth",
2828
"envFile": "${workspaceFolder}/references/job-catalog/.env",
2929
"cwd": "${workspaceFolder}/references/job-catalog",

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
### The open source background jobs framework
99

10-
[Discord](https://discord.gg/JtBAxBr2m3) | [Website](https://trigger.dev) | [Issues](https://github.com/triggerdotdev/trigger.dev/issues) | [Docs](https://trigger.dev/docs)
10+
[Discord](https://trigger.dev/discord) | [Website](https://trigger.dev) | [Issues](https://github.com/triggerdotdev/trigger.dev/issues) | [Docs](https://trigger.dev/docs)
1111

1212
[![Twitter](https://img.shields.io/twitter/url/https/twitter.com/triggerdotdev.svg?style=social&label=Follow%20%40trigger.dev)](https://twitter.com/triggerdotdev)
1313
[![GitHub Repo stars](https://img.shields.io/github/stars/triggerdotdev/trigger.dev?style=social)](https://github.com/triggerdotdev/trigger.dev)

apps/webapp/app/metrics.server.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { OpenMetricsContentType, Registry, collectDefaultMetrics, register } from "prom-client";
2+
import { singleton } from "./utils/singleton";
3+
import { env } from "./env.server";
4+
5+
export const metricsRegister = singleton("metricsRegister", initializeMetricsRegister);
6+
7+
function initializeMetricsRegister() {
8+
const registry = new Registry<OpenMetricsContentType>();
9+
10+
register.setDefaultLabels({
11+
serviceName: env.SERVICE_NAME,
12+
});
13+
14+
registry.setContentType("application/openmetrics-text; version=1.0.0; charset=utf-8");
15+
16+
collectDefaultMetrics({ register: registry });
17+
18+
return registry;
19+
}

apps/webapp/app/routes/metrics.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { LoaderFunctionArgs } from "@remix-run/server-runtime";
2+
import { metricsRegister } from "~/metrics.server";
3+
4+
export async function loader({ request }: LoaderFunctionArgs) {
5+
return new Response(await metricsRegister.metrics(), {
6+
headers: {
7+
"Content-Type": metricsRegister.contentType,
8+
},
9+
});
10+
}

apps/webapp/app/v3/authenticatedSocketConnection.server.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import {
66
} from "@trigger.dev/core/v3";
77
import { Evt } from "evt";
88
import { randomUUID } from "node:crypto";
9+
import type { CloseEvent, ErrorEvent, MessageEvent, WebSocket } from "ws";
910
import { AuthenticatedEnvironment } from "~/services/apiAuth.server";
1011
import { logger } from "~/services/logger.server";
1112
import { DevQueueConsumer } from "./marqs/devQueueConsumer.server";
12-
import type { WebSocket, MessageEvent, CloseEvent, ErrorEvent } from "ws";
13-
import { env } from "~/env.server";
1413

1514
export class AuthenticatedSocketConnection {
1615
public id: string;
@@ -93,7 +92,11 @@ export class AuthenticatedSocketConnection {
9392

9493
await this._consumer.stop();
9594

96-
this.onClose.post(ev);
95+
const result = this.onClose.post(ev);
96+
97+
logger.debug("[AuthenticatedSocketConnection] Called onClose", {
98+
result,
99+
});
97100
}
98101

99102
async #handleError(ev: ErrorEvent) {

apps/webapp/app/v3/handleWebsockets.server.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { authenticateApiKey } from "~/services/apiAuth.server";
44
import { logger } from "~/services/logger.server";
55
import { singleton } from "../utils/singleton";
66
import { AuthenticatedSocketConnection } from "./authenticatedSocketConnection.server";
7+
import { Gauge } from "prom-client";
8+
import { metricsRegister } from "~/metrics.server";
79

810
export const wss = singleton("wss", initalizeWebSocketServer);
911

@@ -16,6 +18,15 @@ function initalizeWebSocketServer() {
1618

1719
authenticatedConnections = new Map();
1820

21+
new Gauge({
22+
name: "dev_authenticated_connections",
23+
help: "Number of authenticated dev connections",
24+
collect() {
25+
this.set(authenticatedConnections.size);
26+
},
27+
registers: [metricsRegister],
28+
});
29+
1930
return server;
2031
}
2132

@@ -47,8 +58,11 @@ async function handleWebSocketConnection(ws: WebSocket, req: IncomingMessage) {
4758

4859
authenticatedConnections.set(authenticatedConnection.id, authenticatedConnection);
4960

50-
authenticatedConnection.onClose.attach((closeEvent) => {
51-
logger.debug("Websocket closed", { closeEvent });
61+
authenticatedConnection.onClose.attachOnce((closeEvent) => {
62+
logger.debug("Websocket closed", {
63+
closeEvent,
64+
authenticatedConnectionId: authenticatedConnection.id,
65+
});
5266

5367
authenticatedConnections.delete(authenticatedConnection.id);
5468
});

apps/webapp/app/v3/marqs/devPubSub.server.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { z } from "zod";
22
import { singleton } from "~/utils/singleton";
33
import { ZodPubSub, ZodSubscriber } from "../utils/zodPubSub.server";
44
import { env } from "~/env.server";
5+
import { Gauge } from "prom-client";
6+
import { metricsRegister } from "~/metrics.server";
57

68
const messageCatalog = {
79
CANCEL_ATTEMPT: z.object({
@@ -17,7 +19,7 @@ export type DevSubscriber = ZodSubscriber<typeof messageCatalog>;
1719
export const devPubSub = singleton("devPubSub", initializeDevPubSub);
1820

1921
function initializeDevPubSub() {
20-
return new ZodPubSub({
22+
const pubSub = new ZodPubSub({
2123
redis: {
2224
port: env.REDIS_PORT,
2325
host: env.REDIS_HOST,
@@ -28,4 +30,15 @@ function initializeDevPubSub() {
2830
},
2931
schema: messageCatalog,
3032
});
33+
34+
new Gauge({
35+
name: "dev_pub_sub_subscribers",
36+
help: "Number of dev pub sub subscribers",
37+
collect() {
38+
this.set(pubSub.subscriberCount);
39+
},
40+
registers: [metricsRegister],
41+
});
42+
43+
return pubSub;
3144
}

apps/webapp/app/v3/utils/zodPubSub.server.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Logger } from "@trigger.dev/core-backend";
22
import { ZodMessageCatalogSchema, ZodMessageHandler, ZodMessageSender } from "@trigger.dev/core/v3";
3+
import { Evt } from "evt";
34
import Redis, { RedisOptions } from "ioredis";
45
import { z } from "zod";
56
import { logger } from "~/services/logger.server";
@@ -26,6 +27,10 @@ class RedisZodSubscriber<TMessageCatalog extends ZodMessageCatalogSchema>
2627
private _listeners: Map<string, (payload: unknown) => Promise<void>> = new Map();
2728
private _messageHandler: ZodMessageHandler<TMessageCatalog>;
2829

30+
public onUnsubscribed: Evt<{
31+
pattern: string;
32+
}> = new Evt();
33+
2934
constructor(
3035
private readonly _pattern: string,
3136
private readonly _options: ZodPubSubOptions<TMessageCatalog>,
@@ -51,7 +56,9 @@ class RedisZodSubscriber<TMessageCatalog extends ZodMessageCatalogSchema>
5156

5257
public async stopListening(): Promise<void> {
5358
this._listeners.clear();
54-
await this._subscriber.unsubscribe();
59+
await this._subscriber.punsubscribe();
60+
61+
this.onUnsubscribed.post({ pattern: this._pattern });
5562
}
5663

5764
async #onMessage(pattern: string, channel: string, serializedMessage: string) {
@@ -90,6 +97,11 @@ class RedisZodSubscriber<TMessageCatalog extends ZodMessageCatalogSchema>
9097
export class ZodPubSub<TMessageCatalog extends ZodMessageCatalogSchema> {
9198
private _publisher: Redis;
9299
private _logger = logger.child({ module: "ZodPubSub" });
100+
private _subscriberCount = 0;
101+
102+
get subscriberCount() {
103+
return this._subscriberCount;
104+
}
93105

94106
constructor(private _options: ZodPubSubOptions<TMessageCatalog>) {
95107
this._publisher = new Redis(_options.redis);
@@ -112,6 +124,14 @@ export class ZodPubSub<TMessageCatalog extends ZodMessageCatalogSchema> {
112124

113125
await subscriber.initialize();
114126

127+
this._subscriberCount++;
128+
129+
subscriber.onUnsubscribed.attachOnce(({ pattern }) => {
130+
logger.debug("Subscriber unsubscribed", { pattern });
131+
132+
this._subscriberCount--;
133+
});
134+
115135
return subscriber;
116136
}
117137
}

apps/webapp/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
"posthog-node": "^3.1.3",
127127
"prism-react-renderer": "^1.3.5",
128128
"prismjs": "^1.29.0",
129+
"prom-client": "^15.1.0",
129130
"random-words": "^2.0.0",
130131
"react": "^18.2.0",
131132
"react-aria": "^3.31.1",

packages/cli-v3/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# trigger.dev
22

3+
## 3.0.0-beta.9
4+
5+
### Patch Changes
6+
7+
- 279717b09: Don’t swallow some error messages when deploying
8+
- 328947dbf: Use the dashboard url instead of the API url for the View logs link
9+
310
## 3.0.0-beta.8
411

512
### Patch Changes

packages/cli-v3/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "trigger.dev",
3-
"version": "3.0.0-beta.8",
3+
"version": "3.0.0-beta.9",
44
"description": "A Command-Line Interface for Trigger.dev (v3) projects",
55
"main": "./dist/index.js",
66
"types": "./dist/index.d.ts",

pnpm-lock.yaml

Lines changed: 4 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)