From 6aeff979ada4a1775bddb87a0ccad354faaa8093 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Thu, 10 Apr 2025 15:12:46 +0800 Subject: HALF WORK! --- services/docker/mail-server/aws-sendmail/logger.ts | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 services/docker/mail-server/aws-sendmail/logger.ts (limited to 'services/docker/mail-server/aws-sendmail/logger.ts') diff --git a/services/docker/mail-server/aws-sendmail/logger.ts b/services/docker/mail-server/aws-sendmail/logger.ts new file mode 100644 index 0000000..12dbc80 --- /dev/null +++ b/services/docker/mail-server/aws-sendmail/logger.ts @@ -0,0 +1,55 @@ +import * as path from "@std/path"; + +function generateTimeStringForFileName( + instant?: Temporal.Instant | Date, +): string { + if (instant == null) { + instant = Temporal.Now.instant(); + } else if (instant instanceof Date) { + instant = instant.toTemporalInstant(); + } + + return instant.toString().replaceAll(/:|\./g, "-"); +} + +export class Logger { + constructor(public readonly path: string) { + } + + generateLogFilePath( + prefix: string = "", + suffix: string = "", + instant?: Temporal.Instant | Date, + ): string { + return path.join( + this.path, + `${prefix}-${generateTimeStringForFileName(instant)}-${suffix}`, + ); + } + + openLogFile( + prefix: string = "", + suffix: string = "", + instant?: Temporal.Instant | Date, + ): Promise { + const logPath = this.generateLogFilePath(prefix, suffix, instant); + return Deno.open(logPath, { + read: false, + write: true, + append: true, + create: true, + }); + } + + async logProgramOutput( + process: Deno.ChildProcess, + program: string, + instant?: Temporal.Instant | Date, + ): Promise { + const stdoutFile = await this.openLogFile(program, "stdout", instant); + const stderrFile = await this.openLogFile(program, "stderr", instant); + + process.stdout.pipeTo(stdoutFile.writable); + process.stderr.pipeTo(stderrFile.writable); + } +} -- cgit v1.2.3