From dca043535e2f1d87db1c8ff4f3222cd4465b31fa Mon Sep 17 00:00:00 2001 From: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> Date: Tue, 7 Mar 2023 09:31:40 +0200 Subject: [PATCH] Lint fix Signed-off-by: Sami Tiilikainen <97873007+samitiilikainen@users.noreply.github.com> --- .../common/logger/ipc-file-logger-channel.ts | 8 +- .../main/logger/ipc-file-logger.injectable.ts | 2 +- .../src/main/logger/ipc-file-logger.test.ts | 8 +- .../core/src/main/logger/ipc-file-logger.ts | 7 +- .../logger/ipc-logging-listener.injectable.ts | 4 +- .../init-cluster-frame/init-cluster-frame.ts | 82 +++++++++---------- .../logger/close-renderer-log-file-id.test.ts | 11 ++- .../logger/ipc-transport.injectable.ts | 7 +- .../src/renderer/logger/ipc-transport.test.ts | 12 ++- .../core/src/renderer/logger/ipc-transport.ts | 8 +- .../logger/renderer-log-file-id.injectable.ts | 1 + .../logger/renderer-log-file-id.test.ts | 7 ++ 12 files changed, 101 insertions(+), 56 deletions(-) diff --git a/packages/core/src/common/logger/ipc-file-logger-channel.ts b/packages/core/src/common/logger/ipc-file-logger-channel.ts index 8e2db7aaf4..7550f4f314 100644 --- a/packages/core/src/common/logger/ipc-file-logger-channel.ts +++ b/packages/core/src/common/logger/ipc-file-logger-channel.ts @@ -1,13 +1,17 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import type { MessageChannel } from "../utils/channel/message-channel-listener-injection-token"; -export type IpcFileLogObject = { +export interface IpcFileLogObject { fileId: string; entry: { level: string; message: string; internalMessage: string; }; -}; +} export type IpcFileLoggerChannel = MessageChannel; diff --git a/packages/core/src/main/logger/ipc-file-logger.injectable.ts b/packages/core/src/main/logger/ipc-file-logger.injectable.ts index ff26ea5c46..b4cd3e76ea 100644 --- a/packages/core/src/main/logger/ipc-file-logger.injectable.ts +++ b/packages/core/src/main/logger/ipc-file-logger.injectable.ts @@ -17,7 +17,7 @@ const ipcFileLoggerInjectable = getInjectable({ maxFiles: 2, tailable: true, }, - (options: transports.FileTransportOptions) => new transports.File(options) + (options: transports.FileTransportOptions) => new transports.File(options), ), }); diff --git a/packages/core/src/main/logger/ipc-file-logger.test.ts b/packages/core/src/main/logger/ipc-file-logger.test.ts index 09d2f6e9af..0c292fcb16 100644 --- a/packages/core/src/main/logger/ipc-file-logger.test.ts +++ b/packages/core/src/main/logger/ipc-file-logger.test.ts @@ -1,3 +1,7 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import IpcFileLogger from "./ipc-file-logger"; describe("ipc file logger in main", () => { @@ -19,7 +23,7 @@ describe("ipc file logger in main", () => { maxFiles: 1, tailable: true, }, - createFileTransportMock + createFileTransportMock, ); }); @@ -122,9 +126,11 @@ describe("ipc file logger in main", () => { if (options.filename === "lens-some-log-file.log") { return { log: someLogMock }; } + if (options.filename === "lens-some-other-log-file.log") { return { log: someOthertLogMock }; } + return null; }); diff --git a/packages/core/src/main/logger/ipc-file-logger.ts b/packages/core/src/main/logger/ipc-file-logger.ts index 8bc5694abf..9babbc09db 100644 --- a/packages/core/src/main/logger/ipc-file-logger.ts +++ b/packages/core/src/main/logger/ipc-file-logger.ts @@ -1,3 +1,7 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import type { LogEntry, transports } from "winston"; type IpcFileLoggerOptions = Omit; @@ -9,7 +13,7 @@ class IpcFileLogger { private options: IpcFileLoggerOptions, private createNewFileTransport: ( options: transports.FileTransportOptions - ) => transports.FileTransportInstance + ) => transports.FileTransportInstance, ) {} log({ fileId, entry }: { fileId: string; entry: LogEntry }) { @@ -20,6 +24,7 @@ class IpcFileLogger { close(fileId: string) { const transport = this.fileTransports.get(fileId); + if (transport) { transport.close?.(); this.fileTransports.delete(fileId); diff --git a/packages/core/src/main/logger/ipc-logging-listener.injectable.ts b/packages/core/src/main/logger/ipc-logging-listener.injectable.ts index b4cb6ded94..857e2ff6a1 100644 --- a/packages/core/src/main/logger/ipc-logging-listener.injectable.ts +++ b/packages/core/src/main/logger/ipc-logging-listener.injectable.ts @@ -4,9 +4,10 @@ */ import ipcFileLoggerInjectable from "./ipc-file-logger.injectable"; import { getMessageChannelListenerInjectable } from "../../common/utils/channel/message-channel-listener-injection-token"; +import type { + IpcFileLogObject } from "../../common/logger/ipc-file-logger-channel"; import { ipcFileLoggerChannel, - IpcFileLogObject, } from "../../common/logger/ipc-file-logger-channel"; import { MESSAGE } from "triple-beam"; @@ -17,6 +18,7 @@ import { MESSAGE } from "triple-beam"; */ export function deserializeLogFromIpc(ipcFileLogObject: IpcFileLogObject) { const { internalMessage, ...standardEntry } = ipcFileLogObject.entry; + return { ...ipcFileLogObject, entry: { diff --git a/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts b/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts index 7685604dad..30be33145f 100644 --- a/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts +++ b/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts @@ -34,50 +34,50 @@ export const initClusterFrame = showErrorNotification, closeFileLogging, }: Dependencies) => - async (unmountRoot: () => void) => { + async (unmountRoot: () => void) => { // TODO: Make catalogEntityRegistry already initialized when passed as dependency - catalogEntityRegistry.init(); + catalogEntityRegistry.init(); - logger.info( - `${logPrefix} Init dashboard, clusterId=${hostedCluster.id}, frameId=${frameRoutingId}`, - ); - - await requestSetClusterFrameId(hostedCluster.id); - await when(() => hostedCluster.ready.get()); // cluster.activate() is done at this point - - catalogEntityRegistry.activeEntity = hostedCluster.id; - - // Only load the extensions once the catalog has been populated. - // Note that the Catalog might still have unprocessed entities until the extensions are fully loaded. - when( - () => catalogEntityRegistry.items.get().length > 0, - () => loadExtensions(), - { - timeout: 15_000, - onError: (error) => { - logger.warn("[CLUSTER-FRAME]: error from activeEntity when()", error); - - showErrorNotification("Failed to get KubernetesCluster for this view. Extensions will not be loaded."); - }, - }, - ); - - setTimeout(() => { - emitAppEvent({ - name: "cluster", - action: "open", - params: { - clusterId: hostedCluster.id, - }, - }); - }); - - window.onbeforeunload = () => { logger.info( - `${logPrefix} Unload dashboard, clusterId=${hostedCluster.id}, frameId=${frameRoutingId}` + `${logPrefix} Init dashboard, clusterId=${hostedCluster.id}, frameId=${frameRoutingId}`, ); - unmountRoot(); - closeFileLogging(); + await requestSetClusterFrameId(hostedCluster.id); + await when(() => hostedCluster.ready.get()); // cluster.activate() is done at this point + + catalogEntityRegistry.activeEntity = hostedCluster.id; + + // Only load the extensions once the catalog has been populated. + // Note that the Catalog might still have unprocessed entities until the extensions are fully loaded. + when( + () => catalogEntityRegistry.items.get().length > 0, + () => loadExtensions(), + { + timeout: 15_000, + onError: (error) => { + logger.warn("[CLUSTER-FRAME]: error from activeEntity when()", error); + + showErrorNotification("Failed to get KubernetesCluster for this view. Extensions will not be loaded."); + }, + }, + ); + + setTimeout(() => { + emitAppEvent({ + name: "cluster", + action: "open", + params: { + clusterId: hostedCluster.id, + }, + }); + }); + + window.onbeforeunload = () => { + logger.info( + `${logPrefix} Unload dashboard, clusterId=${hostedCluster.id}, frameId=${frameRoutingId}`, + ); + + unmountRoot(); + closeFileLogging(); + }; }; - }; diff --git a/packages/core/src/renderer/logger/close-renderer-log-file-id.test.ts b/packages/core/src/renderer/logger/close-renderer-log-file-id.test.ts index 8b9b725d44..a294f3dc3a 100644 --- a/packages/core/src/renderer/logger/close-renderer-log-file-id.test.ts +++ b/packages/core/src/renderer/logger/close-renderer-log-file-id.test.ts @@ -1,9 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import winstonLoggerInjectable from "../../common/winston-logger.injectable"; import { getDiForUnitTesting } from "../getDiForUnitTesting"; import closeRendererLogFileInjectable from "./close-renderer-log-file.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; import type winston from "winston"; -import { SendMessageToChannel, sendMessageToChannelInjectionToken } from "../../common/utils/channel/message-to-channel-injection-token"; +import type { SendMessageToChannel } from "../../common/utils/channel/message-to-channel-injection-token"; +import { sendMessageToChannelInjectionToken } from "../../common/utils/channel/message-to-channel-injection-token"; import rendererLogFileIdInjectable from "./renderer-log-file-id.injectable"; import ipcLogTransportInjectable from "./ipc-transport.injectable"; import type IpcLogTransport from "./ipc-transport"; @@ -30,16 +35,18 @@ describe("close renderer file logging", () => { it("sends the ipc close message with correct log id", () => { const closeLog = di.inject(closeRendererLogFileInjectable); + closeLog(); expect(sendIpcMock).toHaveBeenCalledWith( { id: "close-ipc-file-logger-channel" }, - "some-log-id" + "some-log-id", ); }); it("removes the transport to prevent further logging to closed file", () => { const closeLog = di.inject(closeRendererLogFileInjectable); + closeLog(); expect(winstonMock.remove).toHaveBeenCalledWith({ diff --git a/packages/core/src/renderer/logger/ipc-transport.injectable.ts b/packages/core/src/renderer/logger/ipc-transport.injectable.ts index 9221d7d248..45139cd917 100644 --- a/packages/core/src/renderer/logger/ipc-transport.injectable.ts +++ b/packages/core/src/renderer/logger/ipc-transport.injectable.ts @@ -9,10 +9,11 @@ import { MESSAGE } from "triple-beam"; import IpcLogTransport from "./ipc-transport"; import { sendMessageToChannelInjectionToken } from "../../common/utils/channel/message-to-channel-injection-token"; +import type { + IpcFileLogObject } from "../../common/logger/ipc-file-logger-channel"; import { closeIpcFileLoggerChannel, ipcFileLoggerChannel, - IpcFileLogObject, } from "../../common/logger/ipc-file-logger-channel"; import rendererLogFileIdInjectable from "./renderer-log-file-id.injectable"; @@ -23,7 +24,7 @@ import rendererLogFileIdInjectable from "./renderer-log-file-id.injectable"; */ function serializeLogForIpc( fileId: string, - entry: winston.LogEntry + entry: winston.LogEntry, ): IpcFileLogObject { return { fileId, @@ -45,7 +46,7 @@ const ipcLogTransportInjectable = getInjectable({ sendIpcLogMessage: (entry) => messageToChannel( ipcFileLoggerChannel, - serializeLogForIpc(fileId, entry) + serializeLogForIpc(fileId, entry), ), closeIpcLogging: () => messageToChannel(closeIpcFileLoggerChannel, fileId), diff --git a/packages/core/src/renderer/logger/ipc-transport.test.ts b/packages/core/src/renderer/logger/ipc-transport.test.ts index 6e7135cc41..1ec40026b5 100644 --- a/packages/core/src/renderer/logger/ipc-transport.test.ts +++ b/packages/core/src/renderer/logger/ipc-transport.test.ts @@ -1,5 +1,10 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import type { DiContainer } from "@ogre-tools/injectable"; -import { SendMessageToChannel, sendMessageToChannelInjectionToken } from "../../common/utils/channel/message-to-channel-injection-token"; +import type { SendMessageToChannel } from "../../common/utils/channel/message-to-channel-injection-token"; +import { sendMessageToChannelInjectionToken } from "../../common/utils/channel/message-to-channel-injection-token"; import { getDiForUnitTesting } from "../getDiForUnitTesting"; import rendererLogFileIdInjectable from "./renderer-log-file-id.injectable"; import ipcLogTransportInjectable from "./ipc-transport.injectable"; @@ -18,13 +23,14 @@ describe("renderer log transport through ipc", () => { it("send serialized ipc messages on log", () => { const logTransport = di.inject(ipcLogTransportInjectable); + logTransport.log( { level: "info", message: "some log text", [MESSAGE]: "actual winston log text", }, - () => {} + () => {}, ); expect(sendIpcMock).toHaveBeenCalledWith( @@ -36,7 +42,7 @@ describe("renderer log transport through ipc", () => { internalMessage: "actual winston log text", }, fileId: "some-log-id", - } + }, ); }); }); diff --git a/packages/core/src/renderer/logger/ipc-transport.ts b/packages/core/src/renderer/logger/ipc-transport.ts index a474d66eb0..a1f6fa819e 100644 --- a/packages/core/src/renderer/logger/ipc-transport.ts +++ b/packages/core/src/renderer/logger/ipc-transport.ts @@ -1,5 +1,10 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import type { LogEntry } from "winston"; -import TransportStream, { TransportStreamOptions } from "winston-transport"; +import type { TransportStreamOptions } from "winston-transport"; +import TransportStream from "winston-transport"; interface IpcLogTransportOptions extends TransportStreamOptions { sendIpcLogMessage: (entry: LogEntry) => void; @@ -13,6 +18,7 @@ class IpcLogTransport extends TransportStream { constructor(options: IpcLogTransportOptions) { const { sendIpcLogMessage, closeIpcLogging, ...winstonOptions } = options; + super(winstonOptions); this.sendIpcLogMessage = sendIpcLogMessage; diff --git a/packages/core/src/renderer/logger/renderer-log-file-id.injectable.ts b/packages/core/src/renderer/logger/renderer-log-file-id.injectable.ts index 8a1255b50e..e0c4a50e3c 100644 --- a/packages/core/src/renderer/logger/renderer-log-file-id.injectable.ts +++ b/packages/core/src/renderer/logger/renderer-log-file-id.injectable.ts @@ -17,6 +17,7 @@ const rendererLogFileIdInjectable = getInjectable({ if (currentlyInClusterFrame) { const { host } = di.inject(windowLocationInjectable); const clusterId = getClusterIdFromHost(host); + frameId = clusterId ? `cluster-${clusterId}` : "cluster"; } else { frameId = "main"; diff --git a/packages/core/src/renderer/logger/renderer-log-file-id.test.ts b/packages/core/src/renderer/logger/renderer-log-file-id.test.ts index f220a1c7d2..df871ebd95 100644 --- a/packages/core/src/renderer/logger/renderer-log-file-id.test.ts +++ b/packages/core/src/renderer/logger/renderer-log-file-id.test.ts @@ -1,3 +1,7 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ import windowLocationInjectable from "../../common/k8s-api/window-location.injectable"; import { getDiForUnitTesting } from "../getDiForUnitTesting"; import currentlyInClusterFrameInjectable from "../routes/currently-in-cluster-frame.injectable"; @@ -7,9 +11,11 @@ describe("renderer log file id", () => { it("clearly names log for renderer main frame", () => { const di = getDiForUnitTesting({ doGeneralOverrides: false }); + di.override(currentlyInClusterFrameInjectable, () => false); const mainFileId = di.inject(rendererLogFileIdInjectable); + expect(mainFileId).toBe("renderer-main"); }); @@ -22,6 +28,7 @@ describe("renderer log file id", () => { port: "irrelevant", })); const clusterFileId = di.inject(rendererLogFileIdInjectable); + expect(clusterFileId).toBe("renderer-cluster-some-cluster"); }); });