datajets/file-datajet.ts (40 lines of code) (raw):

/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import fs from "fs"; import path from "path"; import { IDatajet, ILogData } from "../core/ext-types.js"; interface IDatajetConfig { folder: string, filename: string, logKey: string, } const defaultConfig: IDatajetConfig = { folder: "./workspace/tmp", filename: "output-logs.log", logKey: "log" } const fileDatajet: IDatajet = { name: "file", defaultConfig: defaultConfig, createConfiguredDatajet: function (config: IDatajetConfig) { const file = path.resolve(`${config.folder}/${config.filename}`); let logStream; return { datajetTemplate: this, transmitBatch: async (batch: Array<ILogData>) => { if (!logStream) { logStream = fs.createWriteStream(file, { flags: 'a' }); /* 27.48 seconds - 27.862 */ } /* does stringify take too long? */ const len = batch.length; for (let i = 0; i < len; ++i) { const log = batch[i]; /* const str = `${log[config.key] ?? "null"}\n`; */ /* log[config.key] ?? "null" */ logStream.write((config.logKey) ? `${log[config.logKey] ?? "null"}\n` : /* Elapsed time: 27.48 seconds - 27.41 seconds single string */ ((typeof log === "object") ? `${JSON.stringify(log)}\n` : log ?? "null")); // fs.writeFileSync(file, , { flag: 'a+' }); } return true; } } } } export default fileDatajet;