Skip to content

Commit 35ba69f

Browse files
committed
structured logs for all things coordinator
1 parent 2a2d50b commit 35ba69f

File tree

4 files changed

+36
-37
lines changed

4 files changed

+36
-37
lines changed

apps/coordinator/src/checkpointer.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Buildah, Crictl, Exec } from "./exec";
88
import { setTimeout } from "node:timers/promises";
99
import { TempFileCleaner } from "./cleaner";
1010
import { numFromEnv, boolFromEnv } from "./util";
11+
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
1112

1213
type CheckpointerInitializeReturn = {
1314
canCheckpoint: boolean;
@@ -86,7 +87,7 @@ export class Checkpointer {
8687
#canCheckpoint = false;
8788
#dockerMode: boolean;
8889

89-
#logger = new SimpleLogger("[checkptr]");
90+
#logger = new SimpleStructuredLogger("checkpointer");
9091
#abortControllers = new Map<string, AbortController>();
9192
#failedCheckpoints = new Map<string, unknown>();
9293
#waitingForRetry = new Set<string>();
@@ -137,7 +138,7 @@ export class Checkpointer {
137138
return this.#getInitReturn(true);
138139
}
139140

140-
this.#logger.error(testCheckpoint.message, testCheckpoint.error ?? "");
141+
this.#logger.error(testCheckpoint.message, { error: testCheckpoint.error });
141142
return this.#getInitReturn(false);
142143
}
143144

apps/coordinator/src/exec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
1+
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
22
import { randomUUID } from "crypto";
33
import { homedir } from "os";
44
import { type Result, x } from "tinyexec";
@@ -18,23 +18,23 @@ class TinyResult {
1818
}
1919

2020
interface ExecOptions {
21-
logger?: SimpleLogger;
21+
logger?: SimpleStructuredLogger;
2222
abortSignal?: AbortSignal;
2323
logOutput?: boolean;
2424
trimArgs?: boolean;
2525
neverThrow?: boolean;
2626
}
2727

2828
export class Exec {
29-
private logger: SimpleLogger;
29+
private logger: SimpleStructuredLogger;
3030
private abortSignal: AbortSignal | undefined;
3131

3232
private logOutput: boolean;
3333
private trimArgs: boolean;
3434
private neverThrow: boolean;
3535

3636
constructor(opts: ExecOptions) {
37-
this.logger = opts.logger ?? new SimpleLogger();
37+
this.logger = opts.logger ?? new SimpleStructuredLogger("exec");
3838
this.abortSignal = opts.abortSignal;
3939

4040
this.logOutput = opts.logOutput ?? true;
@@ -103,15 +103,15 @@ interface BuildahOptions {
103103

104104
export class Buildah {
105105
private id: string;
106-
private logger: SimpleLogger;
106+
private logger: SimpleStructuredLogger;
107107
private exec: Exec;
108108

109109
private containers = new Set<string>();
110110
private images = new Set<string>();
111111

112112
constructor(opts: BuildahOptions) {
113113
this.id = opts.id ?? randomUUID();
114-
this.logger = new SimpleLogger(`[buildah][${this.id}]`);
114+
this.logger = new SimpleStructuredLogger("buildah", undefined, { id: this.id });
115115

116116
this.exec = new Exec({
117117
logger: this.logger,
@@ -220,14 +220,14 @@ interface CrictlOptions {
220220

221221
export class Crictl {
222222
private id: string;
223-
private logger: SimpleLogger;
223+
private logger: SimpleStructuredLogger;
224224
private exec: Exec;
225225

226226
private archives = new Set<string>();
227227

228228
constructor(opts: CrictlOptions) {
229229
this.id = opts.id ?? randomUUID();
230-
this.logger = new SimpleLogger(`[crictl][${this.id}]`);
230+
this.logger = new SimpleStructuredLogger("crictl", undefined, { id: this.id });
231231

232232
this.exec = new Exec({
233233
logger: this.logger,

apps/coordinator/src/index.ts

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import {
1111
import { ZodNamespace } from "@trigger.dev/core/v3/zodNamespace";
1212
import { ZodSocketConnection } from "@trigger.dev/core/v3/zodSocket";
1313
import { HttpReply, getTextBody } from "@trigger.dev/core/v3/apps";
14-
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
1514
import { ChaosMonkey } from "./chaosMonkey";
1615
import { Checkpointer } from "./checkpointer";
1716
import { boolFromEnv, numFromEnv } from "./util";
1817

1918
import { collectDefaultMetrics, register, Gauge } from "prom-client";
19+
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
2020
collectDefaultMetrics();
2121

2222
const HTTP_SERVER_PORT = Number(process.env.HTTP_SERVER_PORT || 8020);
@@ -29,7 +29,7 @@ const PLATFORM_WS_PORT = process.env.PLATFORM_WS_PORT || 3030;
2929
const PLATFORM_SECRET = process.env.PLATFORM_SECRET || "coordinator-secret";
3030
const SECURE_CONNECTION = ["1", "true"].includes(process.env.SECURE_CONNECTION ?? "false");
3131

32-
const logger = new SimpleLogger(`[${NODE_NAME}]`);
32+
const logger = new SimpleStructuredLogger(NODE_NAME);
3333
const chaosMonkey = new ChaosMonkey(
3434
!!process.env.CHAOS_MONKEY_ENABLED,
3535
!!process.env.CHAOS_MONKEY_DISABLE_ERRORS,
@@ -335,12 +335,22 @@ class TaskCoordinator {
335335
next();
336336
},
337337
onConnection: async (socket, handler, sender) => {
338-
const logger = new SimpleLogger(`[prod-worker][${socket.id}]`);
338+
const logger = new SimpleStructuredLogger("prod-worker", undefined, {
339+
socketId: socket.id,
340+
});
339341

340342
const getAttemptNumber = () => {
341343
return socket.data.attemptNumber ? parseInt(socket.data.attemptNumber) : undefined;
342344
};
343345

346+
const exitRun = () => {
347+
logger.log("exitRun", { runId: socket.data.runId });
348+
349+
socket.emit("REQUEST_EXIT", {
350+
version: "v1",
351+
});
352+
};
353+
344354
const crashRun = async (error: { name: string; message: string; stack?: string }) => {
345355
try {
346356
this.#platformSocket?.send("RUN_CRASHED", {
@@ -349,9 +359,7 @@ class TaskCoordinator {
349359
error,
350360
});
351361
} finally {
352-
socket.emit("REQUEST_EXIT", {
353-
version: "v1",
354-
});
362+
exitRun();
355363
}
356364
};
357365

@@ -669,9 +677,7 @@ class TaskCoordinator {
669677
});
670678

671679
if (!checkpoint.docker || !willSimulate) {
672-
socket.emit("REQUEST_EXIT", {
673-
version: "v1",
674-
});
680+
exitRun();
675681
}
676682
});
677683

@@ -687,9 +693,7 @@ class TaskCoordinator {
687693
completion,
688694
});
689695

690-
socket.emit("REQUEST_EXIT", {
691-
version: "v1",
692-
});
696+
exitRun();
693697
});
694698

695699
// MARK: CHECKPOINT
@@ -784,9 +788,7 @@ class TaskCoordinator {
784788
}
785789

786790
if (!checkpoint.docker || !willSimulate) {
787-
socket.emit("REQUEST_EXIT", {
788-
version: "v1",
789-
});
791+
exitRun();
790792
}
791793
});
792794

@@ -867,9 +869,7 @@ class TaskCoordinator {
867869
}
868870

869871
if (!checkpoint.docker || !willSimulate) {
870-
socket.emit("REQUEST_EXIT", {
871-
version: "v1",
872-
});
872+
exitRun();
873873
}
874874
});
875875

@@ -951,9 +951,7 @@ class TaskCoordinator {
951951
}
952952

953953
if (!checkpoint.docker || !willSimulate) {
954-
socket.emit("REQUEST_EXIT", {
955-
version: "v1",
956-
});
954+
exitRun();
957955
}
958956
});
959957

@@ -1081,7 +1079,7 @@ class TaskCoordinator {
10811079
// MARK: HTTP SERVER
10821080
#createHttpServer() {
10831081
const httpServer = createServer(async (req, res) => {
1084-
logger.log(`[${req.method}]`, req.url);
1082+
logger.log(`[${req.method}]`, { url: req.url });
10851083

10861084
const reply = new HttpReply(res);
10871085

@@ -1111,7 +1109,7 @@ class TaskCoordinator {
11111109
});
11121110

11131111
httpServer.on("listening", () => {
1114-
logger.log("server listening on port", HTTP_SERVER_PORT);
1112+
logger.log("server listening on port", { port: HTTP_SERVER_PORT });
11151113
});
11161114

11171115
return httpServer;

packages/core/src/v3/utils/structuredLogger.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ export class SimpleStructuredLogger implements StructuredLogger {
6767
...args: StructuredArgs
6868
) {
6969
const structuredLog = {
70-
...(args.length === 1 ? args[0] : args),
71-
...this.fields,
7270
timestamp: new Date(),
73-
name: this.name,
71+
$name: this.name,
7472
message,
75-
level,
73+
$level: level,
74+
...(args.length === 1 ? args[0] : args),
75+
...this.fields,
7676
};
7777

7878
loggerFunction(JSON.stringify(structuredLog));

0 commit comments

Comments
 (0)