diff --git a/.eslintrc.js b/.eslintrc.js index 514ab56bd7..61d150ecf7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -58,6 +58,7 @@ module.exports = { "header/header": [2, "./license-header"], "comma-dangle": ["error", "always-multiline"], "comma-spacing": "error", + "no-console": "error", "indent": ["error", 2, { "SwitchCase": 1, }], @@ -124,6 +125,7 @@ module.exports = { rules: { "no-constant-condition": ["error", { "checkLoops": false }], "header/header": [2, "./license-header"], + "no-console": "error", "no-invalid-this": "off", "@typescript-eslint/no-invalid-this": ["error"], "@typescript-eslint/explicit-function-return-type": "off", @@ -210,6 +212,7 @@ module.exports = { "no-constant-condition": ["error", { "checkLoops": false }], "header/header": [2, "./license-header"], "react/prop-types": "off", + "no-console": "error", "no-invalid-this": "off", "@typescript-eslint/no-invalid-this": ["error"], "@typescript-eslint/explicit-function-return-type": "off", diff --git a/build/build_theme_vars.ts b/build/build_theme_vars.ts index f7c8a2f66b..d7b3a8583a 100644 --- a/build/build_theme_vars.ts +++ b/build/build_theme_vars.ts @@ -22,10 +22,11 @@ import fs from "fs-extra"; import path from "path"; import defaultBaseLensTheme from "../src/renderer/themes/lens-dark.json"; +import logger from "../src/common/logger"; const outputCssFile = path.resolve("src/renderer/themes/theme-vars.css"); -const banner = `/* +const banner = `/* Generated Lens theme CSS-variables, don't edit manually. To refresh file run $: yarn run ts-node build/${path.basename(__filename)} */`; @@ -42,6 +43,6 @@ ${themeCssVars.join("\n")} `; // Run -console.info(`"Saving default Lens theme css-variables to "${outputCssFile}""`); +logger.info(`"Saving default Lens theme css-variables to "${outputCssFile}""`); fs.ensureFileSync(outputCssFile); fs.writeFile(outputCssFile, content); diff --git a/build/build_tray_icon.ts b/build/build_tray_icon.ts index 026edeb217..fbeb12c6de 100644 --- a/build/build_tray_icon.ts +++ b/build/build_tray_icon.ts @@ -22,6 +22,7 @@ import path from "path"; import sharp from "sharp"; import jsdom from "jsdom"; import fs from "fs-extra"; +import logger from "../src/common/logger"; export async function generateTrayIcon( { @@ -52,9 +53,9 @@ export async function generateTrayIcon( // Save icon await fs.writeFile(pngIconDestPath, pngIconBuffer); - console.info(`[DONE]: Tray icon saved at "${pngIconDestPath}"`); + logger.info(`[DONE]: Tray icon saved at "${pngIconDestPath}"`); } catch (err) { - console.error(`[ERROR]: ${err}`); + logger.error(`[ERROR]: ${err}`); } } diff --git a/build/download_helm.ts b/build/download_helm.ts index b9d9714d92..92a6eb91de 100644 --- a/build/download_helm.ts +++ b/build/download_helm.ts @@ -25,11 +25,11 @@ import * as path from "path"; const helmVersion = packageInfo.config.bundledHelmVersion; -if (!isWindows) { +if (isWindows) { + new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary(); +} else { Promise.all([ new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary(), new HelmCli(path.join(process.cwd(), "binaries", "client", "arm64"), helmVersion).ensureBinary(), ]); -} else { - new HelmCli(path.join(process.cwd(), "binaries", "client", "x64"), helmVersion).ensureBinary(); } diff --git a/build/download_kubectl.ts b/build/download_kubectl.ts index 5269bb39c8..ce13e8928d 100644 --- a/build/download_kubectl.ts +++ b/build/download_kubectl.ts @@ -27,6 +27,7 @@ import { ensureDir, pathExists } from "fs-extra"; import path from "path"; import { noop } from "lodash"; import { isLinux, isMac } from "../src/common/vars"; +import logger from "../src/common/logger"; class KubectlDownloader { public kubectlVersion: string; @@ -48,7 +49,7 @@ class KubectlDownloader { method: "HEAD", uri: this.url, resolveWithFullResponse: true, - }).catch(console.error); + }).catch(logger.error); if (response.headers["etag"]) { return response.headers["etag"].replace(/"/g, ""); @@ -65,12 +66,12 @@ class KubectlDownloader { const etag = await this.urlEtag(); if (hash == etag) { - console.log("Kubectl md5sum matches the remote etag"); + logger.info("Kubectl md5sum matches the remote etag"); return true; } - console.log(`Kubectl md5sum ${hash} does not match the remote etag ${etag}, unlinking and downloading again`); + logger.info(`Kubectl md5sum ${hash} does not match the remote etag ${etag}, unlinking and downloading again`); await fs.promises.unlink(this.path); } @@ -79,14 +80,14 @@ class KubectlDownloader { public async downloadKubectl() { if (await this.checkBinary()) { - return console.log("Already exists and is valid"); + return logger.info("Already exists and is valid"); } await ensureDir(path.dirname(this.path), 0o755); const file = fs.createWriteStream(this.path); - console.log(`Downloading kubectl ${this.kubectlVersion} from ${this.url} to ${this.path}`); + logger.info(`Downloading kubectl ${this.kubectlVersion} from ${this.url} to ${this.path}`); const requestOpts: request.UriOptions & request.CoreOptions = { uri: this.url, gzip: true, @@ -94,19 +95,19 @@ class KubectlDownloader { const stream = request(requestOpts); stream.on("complete", () => { - console.log("kubectl binary download finished"); + logger.info("kubectl binary download finished"); file.end(noop); }); stream.on("error", (error) => { - console.log(error); + logger.info(error); fs.unlink(this.path, noop); throw error; }); return new Promise((resolve, reject) => { file.on("close", () => { - console.log("kubectl binary download closed"); + logger.info("kubectl binary download closed"); fs.chmod(this.path, 0o755, (err) => { if (err) reject(err); }); @@ -133,9 +134,9 @@ if (isMac) { } downloads.forEach((dlOpts) => { - console.log(dlOpts); + logger.info(dlOpts); const downloader = new KubectlDownloader(downloadVersion, dlOpts.platform, dlOpts.arch, dlOpts.target); - console.log(`Downloading: ${JSON.stringify(dlOpts)}`); - downloader.downloadKubectl().then(() => downloader.checkBinary().then(() => console.log("Download complete"))); + logger.info(`Downloading: ${JSON.stringify(dlOpts)}`); + downloader.downloadKubectl().then(() => downloader.checkBinary().then(() => logger.info("Download complete"))); }); diff --git a/build/set_build_version.ts b/build/set_build_version.ts index 0b1d5724a8..033c739dd8 100644 --- a/build/set_build_version.ts +++ b/build/set_build_version.ts @@ -23,6 +23,7 @@ import * as path from "path"; import appInfo from "../package.json"; import semver from "semver"; import fastGlob from "fast-glob"; +import logger from "../src/common/logger"; const packagePath = path.join(__dirname, "../package.json"); const versionInfo = semver.parse(appInfo.version); @@ -63,7 +64,7 @@ async function writeOutNewVersions() { ]); } -function main() { +async function main() { const prereleaseParts: string[] = [getBuildChannel()]; if (versionInfo.prerelease && versionInfo.prerelease.length > 1) { @@ -74,11 +75,12 @@ function main() { appInfo.version = `${versionInfo.major}.${versionInfo.minor}.${versionInfo.patch}-${prereleaseParts.join(".")}`; - writeOutNewVersions() - .catch((error) => { - console.error(error); - process.exit(1); - }); + try { + await writeOutNewVersions(); + } catch (error) { + logger.error("Failed to write new build versions", error); + process.exit(1); + } } main(); diff --git a/extensions/metrics-cluster-feature/src/metrics-feature.ts b/extensions/metrics-cluster-feature/src/metrics-feature.ts index 7027e4f200..cff916ecab 100644 --- a/extensions/metrics-cluster-feature/src/metrics-feature.ts +++ b/extensions/metrics-cluster-feature/src/metrics-feature.ts @@ -24,6 +24,7 @@ import semver from "semver"; import * as path from "path"; const { ResourceStack, forCluster, StorageClass, Namespace } = Renderer.K8sApi; +const { logger } = Common; type ResourceStack = Renderer.K8sApi.ResourceStack; @@ -110,7 +111,7 @@ export class MetricsFeature { if (e?.error?.code === 404) { status.installed = false; } else { - console.warn("[LENS-METRICS] failed to resolve install state", e); + logger.warn("[LENS-METRICS] failed to resolve install state", e); } } diff --git a/integration/__tests__/cluster-pages.tests.ts b/integration/__tests__/cluster-pages.tests.ts index 64ca60380d..90dee953d1 100644 --- a/integration/__tests__/cluster-pages.tests.ts +++ b/integration/__tests__/cluster-pages.tests.ts @@ -18,6 +18,7 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/* eslint-disable no-console */ /* Cluster tests are run if there is a pre-existing minikube cluster. Before running cluster tests the TEST_NAMESPACE diff --git a/integration/helpers/minikube.ts b/integration/helpers/minikube.ts index b7c2356dab..2fdad02be0 100644 --- a/integration/helpers/minikube.ts +++ b/integration/helpers/minikube.ts @@ -18,6 +18,8 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/* eslint-disable no-console */ + import { spawnSync } from "child_process"; export function minikubeReady(testNamespace: string): boolean { diff --git a/src/common/__tests__/hotbar-store.test.ts b/src/common/__tests__/hotbar-store.test.ts index 95a244f3c1..75721b3609 100644 --- a/src/common/__tests__/hotbar-store.test.ts +++ b/src/common/__tests__/hotbar-store.test.ts @@ -22,7 +22,7 @@ import { anyObject } from "jest-mock-extended"; import { merge } from "lodash"; import mockFs from "mock-fs"; -import logger from "../../main/logger"; +import logger from "../logger"; import { AppPaths } from "../app-paths"; import type { CatalogEntity, CatalogEntityData, CatalogEntityKindData } from "../catalog"; import { ClusterStore } from "../cluster-store"; @@ -253,21 +253,14 @@ describe("HotbarStore", () => { hotbarStore.add({ name: "hottest", id: "hottest" }); hotbarStore.setActiveHotbar("hottest"); - const { error } = logger; - const mocked = jest.fn(); - - logger.error = mocked; - hotbarStore.addToHotbar(testCluster, -1); - expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject()); + expect(logger.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject()); hotbarStore.addToHotbar(testCluster, 12); - expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject()); + expect(logger.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject()); hotbarStore.addToHotbar(testCluster, 13); - expect(mocked).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject()); - - logger.error = error; + expect(logger.error).toBeCalledWith("[HOTBAR-STORE]: cannot pin entity to hotbar outside of index range", anyObject()); }); it("throws an error if getId is invalid or returns not a string", () => { @@ -305,12 +298,6 @@ describe("HotbarStore", () => { }); it("throws if invalid arguments provided", () => { - // Prevent writing to stderr during this render. - const { error, warn } = console; - - console.error = jest.fn(); - console.warn = jest.fn(); - const hotbarStore = HotbarStore.getInstance(); hotbarStore.addToHotbar(testCluster); @@ -319,10 +306,6 @@ describe("HotbarStore", () => { expect(() => hotbarStore.restackItems(2, -1)).toThrow(); expect(() => hotbarStore.restackItems(14, 1)).toThrow(); expect(() => hotbarStore.restackItems(11, 112)).toThrow(); - - // Restore writing to stderr. - console.error = error; - console.warn = warn; }); it("checks if entity already pinned to hotbar", () => { diff --git a/src/common/base-store.ts b/src/common/base-store.ts index 9f00ec3fbb..3ab6d183fb 100644 --- a/src/common/base-store.ts +++ b/src/common/base-store.ts @@ -25,7 +25,7 @@ import type { Options as ConfOptions } from "conf/dist/source/types"; import { ipcMain, ipcRenderer } from "electron"; import { IEqualsComparer, makeObservable, reaction, runInAction } from "mobx"; import { getAppVersion, Singleton, toJS, Disposer } from "./utils"; -import logger from "../main/logger"; +import logger from "./logger"; import { broadcastMessage, ipcMainOn, ipcRendererOn } from "./ipc"; import isEqual from "lodash/isEqual"; import { isTestEnv } from "./vars"; @@ -75,7 +75,7 @@ export abstract class BaseStore extends Singleton { const res: any = this.fromStore(this.storeConfig.store); if (res instanceof Promise || (typeof res === "object" && res && typeof res.then === "function")) { - console.error(`${this.displayName} extends BaseStore's fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`); + logger.error(`${this.displayName} extends BaseStore's fromStore method returns a Promise or promise-like object. This is an error and must be fixed.`); } this.enableSync(); diff --git a/src/common/cluster-store.ts b/src/common/cluster-store.ts index a3dbc97645..3ea48b30b8 100644 --- a/src/common/cluster-store.ts +++ b/src/common/cluster-store.ts @@ -24,7 +24,7 @@ import { action, comparer, computed, makeObservable, observable, reaction } from import { BaseStore } from "./base-store"; import { Cluster } from "../main/cluster"; import migrations from "../migrations/cluster-store"; -import logger from "../main/logger"; +import logger from "../common/logger"; import { appEventBus } from "./event-bus"; import { ipcMainHandle, requestMain } from "./ipc"; import { disposer, toJS } from "./utils"; diff --git a/src/common/getTSLoader.ts b/src/common/getTSLoader.ts index 8b64186f5d..bdbd85119f 100644 --- a/src/common/getTSLoader.ts +++ b/src/common/getTSLoader.ts @@ -20,6 +20,7 @@ */ import esbuild from "esbuild"; +import logger from "./logger"; /** * A function returning webpack ts/tsx loader @@ -33,7 +34,7 @@ const getTSLoader = ( testRegExp: RegExp, transpileOnly = true, ) => { if (process.env.LENS_DEV_USE_ESBUILD_LOADER === "true") { - console.info(`\nšŸš€ using esbuild-loader for ts(x)`); + logger.info(`šŸš€ using esbuild-loader for ts(x)`); return { test: testRegExp, diff --git a/src/common/hotbar-store.ts b/src/common/hotbar-store.ts index 504ba55cda..ba3cab3b2a 100644 --- a/src/common/hotbar-store.ts +++ b/src/common/hotbar-store.ts @@ -25,7 +25,7 @@ import migrations from "../migrations/hotbar-store"; import { toJS } from "./utils"; import { CatalogEntity } from "./catalog"; import { catalogEntity } from "../main/catalog-sources/general"; -import logger from "../main/logger"; +import logger from "./logger"; import { broadcastMessage, HotbarTooManyItems } from "./ipc"; import { defaultHotbarCells, getEmptyHotbar, Hotbar, CreateHotbarData, CreateHotbarOptions } from "./hotbar-types"; @@ -148,7 +148,7 @@ export class HotbarStore extends BaseStore { const index = this.hotbars.findIndex((hotbar) => hotbar.id === id); if (index < 0) { - return void console.warn(`[HOTBAR-STORE]: cannot setHotbarName: unknown id`, { id }); + return void logger.warn(`[HOTBAR-STORE]: cannot setHotbarName: unknown id`, { id }); } this.hotbars[index].name = name; diff --git a/src/common/ipc/ipc.ts b/src/common/ipc/ipc.ts index 95b7c672a4..07d6637d4a 100644 --- a/src/common/ipc/ipc.ts +++ b/src/common/ipc/ipc.ts @@ -25,7 +25,7 @@ import { ipcMain, ipcRenderer, webContents } from "electron"; import { toJS } from "../utils/toJS"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { ClusterFrameInfo, clusterFrameMap } from "../cluster-frames"; import type { Disposer } from "../utils"; import type remote from "@electron/remote"; diff --git a/src/common/ipc/type-enforced-ipc.ts b/src/common/ipc/type-enforced-ipc.ts index 29d0305b52..43658f3aaa 100644 --- a/src/common/ipc/type-enforced-ipc.ts +++ b/src/common/ipc/type-enforced-ipc.ts @@ -21,7 +21,7 @@ import type { EventEmitter } from "events"; import { ipcMain } from "electron"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import type { Disposer } from "../utils"; import { ipcMainHandle } from "./ipc"; diff --git a/src/common/k8s-api/__tests__/helm-charts.api.test.ts b/src/common/k8s-api/__tests__/helm-charts.api.test.ts index aa56826480..8711d4ac7a 100644 --- a/src/common/k8s-api/__tests__/helm-charts.api.test.ts +++ b/src/common/k8s-api/__tests__/helm-charts.api.test.ts @@ -20,6 +20,7 @@ */ import { anyObject } from "jest-mock-extended"; +import logger from "../../logger"; import { HelmChart } from "../endpoints/helm-charts.api"; describe("HelmChart tests", () => { @@ -262,9 +263,6 @@ describe("HelmChart tests", () => { }); it("should warn on unknown fields", () => { - const { warn } = console; - const warnFn = console.warn = jest.fn(); - HelmChart.create({ apiVersion: "1", name: "1", @@ -280,11 +278,10 @@ describe("HelmChart tests", () => { "asdjhajksdhadjks": 1, } as any); - expect(warnFn).toHaveBeenCalledWith("HelmChart data has unexpected fields", { + expect(logger.warn).toHaveBeenCalledWith("HelmChart data has unexpected fields", { original: anyObject(), unknownFields: ["asdjhajksdhadjks"], }); - console.warn = warn; }); }); }); diff --git a/src/common/k8s-api/endpoints/helm-charts.api.ts b/src/common/k8s-api/endpoints/helm-charts.api.ts index 9f3f85054d..04b1e68318 100644 --- a/src/common/k8s-api/endpoints/helm-charts.api.ts +++ b/src/common/k8s-api/endpoints/helm-charts.api.ts @@ -25,6 +25,7 @@ import { stringify } from "querystring"; import type { RequestInit } from "node-fetch"; import { autoBind, bifurcateArray } from "../../utils"; import Joi from "joi"; +import logger from "../../logger"; export type RepoHelmChartList = Record; @@ -321,7 +322,7 @@ export class HelmChart { const [actualErrors, unknownDetails] = bifurcateArray(error.details, ({ type }) => type === "object.unknown"); if (unknownDetails.length > 0) { - console.warn("HelmChart data has unexpected fields", { original: data, unknownFields: unknownDetails.flatMap(d => d.path) }); + logger.warn("HelmChart data has unexpected fields", { original: data, unknownFields: unknownDetails.flatMap(d => d.path) }); } if (actualErrors.length === 0) { @@ -334,7 +335,7 @@ export class HelmChart { throw validationError; } - console.warn("[HELM-CHART]: failed to validate data", data, validationError); + logger.warn("[HELM-CHART]: failed to validate data", data, validationError); return undefined; } diff --git a/src/common/k8s-api/kube-api-parse.ts b/src/common/k8s-api/kube-api-parse.ts index a5d137be02..20a3a6e830 100644 --- a/src/common/k8s-api/kube-api-parse.ts +++ b/src/common/k8s-api/kube-api-parse.ts @@ -23,7 +23,7 @@ import { splitArray } from "../utils"; import { isDebugging } from "../vars"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { inspect } from "util"; export interface IKubeObjectRef { diff --git a/src/common/k8s-api/kube-api.ts b/src/common/k8s-api/kube-api.ts index b6a823935a..52edbd48ac 100644 --- a/src/common/k8s-api/kube-api.ts +++ b/src/common/k8s-api/kube-api.ts @@ -24,7 +24,7 @@ import { isFunction, merge } from "lodash"; import { stringify } from "querystring"; import { apiKubePrefix, isDevelopment } from "../../common/vars"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { apiManager } from "./api-manager"; import { apiBase, apiKube } from "./index"; import { createKubeApiURL, parseKubeApi } from "./kube-api-parse"; diff --git a/src/common/k8s-api/kube-object.store.ts b/src/common/k8s-api/kube-object.store.ts index 8f82b9e92a..a582bff3c2 100644 --- a/src/common/k8s-api/kube-object.store.ts +++ b/src/common/k8s-api/kube-object.store.ts @@ -35,6 +35,7 @@ import type { RequestInit } from "node-fetch"; // eslint-disable-next-line import/no-named-as-default import AbortController from "abort-controller"; import type { Patch } from "rfc6902"; +import logger from "../logger"; export interface KubeObjectStoreLoadingParams { namespaces: string[]; @@ -253,7 +254,7 @@ export abstract class KubeObjectStore extends ItemStore return items; } catch (error) { - console.warn("[KubeObjectStore] loadAll failed", this.api.apiBase, error); + logger.warn("[KubeObjectStore] loadAll failed", this.api.apiBase, error); this.resetOnError(error); this.failedLoading = true; } finally { diff --git a/src/common/k8s-api/kube-watch-api.ts b/src/common/k8s-api/kube-watch-api.ts index 63636eddc3..cab136c122 100644 --- a/src/common/k8s-api/kube-watch-api.ts +++ b/src/common/k8s-api/kube-watch-api.ts @@ -86,7 +86,7 @@ class WatchCount { const newCount = this.#data.get(store) + 1; - logger.info(`[KUBE-WATCH-API]: inc() count for ${store.api.objectConstructor.apiBase} is now ${newCount}`); + logger.debug(`[KUBE-WATCH-API]: inc() count for ${store.api.objectConstructor.apiBase} is now ${newCount}`); this.#data.set(store, newCount); return newCount; @@ -151,10 +151,10 @@ export class KubeWatchApi { if (curSelectedAll && prevSelectedAll) { const action = namespaces.length > prevNamespaces.length ? "created" : "deleted"; - return console.debug(`[KUBE-WATCH-API]: Not changing watch for ${store.api.apiBase} because a new namespace was ${action} but all namespaces are selected`); + return this.log(`[KUBE-WATCH-API]: Not changing watch for ${store.api.apiBase} because a new namespace was ${action} but all namespaces are selected`); } - console.log(`[KUBE-WATCH-API]: changing watch ${store.api.apiBase}`, namespaces); + this.log(`[KUBE-WATCH-API]: changing watch ${store.api.apiBase}`, namespaces); childController.abort(); unsubscribe(); childController = new WrappedAbortController(parent); @@ -195,10 +195,10 @@ export class KubeWatchApi { }); } - protected log(message: any, meta: any) { + protected log(message: any, meta: object = {}) { const log = message instanceof Error - ? console.error - : console.debug; + ? logger.error + : logger.debug; log("[KUBE-WATCH-API]:", message, { time: new Date().toLocaleString(), diff --git a/src/common/k8s/resource-stack.ts b/src/common/k8s/resource-stack.ts index 483dbeeb9b..1c4410fd71 100644 --- a/src/common/k8s/resource-stack.ts +++ b/src/common/k8s/resource-stack.ts @@ -23,7 +23,7 @@ import path from "path"; import hb from "handlebars"; import { ResourceApplier } from "../../main/resource-applier"; import type { KubernetesCluster } from "../catalog-entities"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { app } from "electron"; import { requestMain } from "../ipc"; import { clusterKubectlApplyAllHandler, clusterKubectlDeleteAllHandler } from "../cluster-ipc"; diff --git a/src/common/kube-helpers.ts b/src/common/kube-helpers.ts index 0dc678550f..62b3ec36b4 100644 --- a/src/common/kube-helpers.ts +++ b/src/common/kube-helpers.ts @@ -24,7 +24,7 @@ import fse from "fs-extra"; import path from "path"; import os from "os"; import yaml from "js-yaml"; -import logger from "../main/logger"; +import logger from "../common/logger"; import { Cluster, Context, newClusters, newContexts, newUsers, User } from "@kubernetes/client-node/dist/config_types"; import { resolvePath } from "./utils"; import Joi from "joi"; @@ -123,10 +123,10 @@ function loadToOptions(rawYaml: string): OptionsResult { arrays: true, }, }); - const { - clusters: rawClusters, - users: rawUsers, - contexts: rawContexts, + const { + clusters: rawClusters, + users: rawUsers, + contexts: rawContexts, "current-context": currentContext, } = value ?? {}; const clusters = newClusters(rawClusters); diff --git a/src/common/logger.ts b/src/common/logger.ts index 69cda771c6..cc18d14b72 100644 --- a/src/common/logger.ts +++ b/src/common/logger.ts @@ -19,12 +19,10 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { app, ipcMain } from "electron"; +import { app, ipcRenderer } from "electron"; import winston, { format } from "winston"; -import type Transport from "winston-transport"; import { consoleFormat } from "winston-console-format"; import { isDebugging, isTestEnv } from "./vars"; -import BrowserConsole from "winston-transport-browserconsole"; const logLevel = process.env.LOG_LEVEL ? process.env.LOG_LEVEL @@ -34,10 +32,34 @@ const logLevel = process.env.LOG_LEVEL ? "error" : "info"; -const transports: Transport[] = []; +interface Logger { + silly(...args: any[]): void; + warn(...args: any[]): void; + info(...args: any[]): void; + debug(...args: any[]): void; + error(...args: any[]): void; +} -if (ipcMain) { - transports.push( +function createRendererLogger(): Logger { + return { + ...console, + // eslint-disable-next-line no-console + silly: (...args: any[]) => console.debug(...args), + }; +} + +function createUnitTestingLogger(): Logger { + return { + silly: jest.fn(), + warn: jest.fn(), + info: jest.fn(), + debug: jest.fn(), + error: jest.fn(), + }; +} + +function createMainLogger(): Logger { + const transports: winston.transport[] = [ new winston.transports.Console({ handleExceptions: false, level: logLevel, @@ -57,18 +79,14 @@ if (ipcMain) { }), ), }), - ); + ]; - if (!isTestEnv) { + if (app) { transports.push( new winston.transports.File({ handleExceptions: false, level: logLevel, filename: "lens.log", - /** - * SAFTEY: the `ipcMain` check above should mean that this is only - * called in the main process - */ dirname: app.getPath("logs"), maxsize: 16 * 1024, maxFiles: 16, @@ -76,11 +94,24 @@ if (ipcMain) { }), ); } -} else { - transports.push(new BrowserConsole()); + + return winston.createLogger({ + format: format.simple(), + transports, + }); } -export default winston.createLogger({ - format: format.simple(), - transports, -}); +function createLogger(): Logger { + if (isTestEnv && !process.env.CICD) { + // CICD is present during integration tests + return createUnitTestingLogger(); + } + + if (ipcRenderer) { + return createRendererLogger(); + } + + return createMainLogger(); +} + +export default createLogger(); diff --git a/src/common/protocol-handler/router.ts b/src/common/protocol-handler/router.ts index b51e687677..29237e2e7c 100644 --- a/src/common/protocol-handler/router.ts +++ b/src/common/protocol-handler/router.ts @@ -23,7 +23,7 @@ import { match, matchPath } from "react-router"; import { countBy } from "lodash"; import { iter } from "../utils"; import { pathToRegexp } from "path-to-regexp"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import type Url from "url-parse"; import { RoutingError, RoutingErrorType } from "./error"; import { ExtensionsStore } from "../../extensions/extensions-store"; diff --git a/src/common/system-ca.ts b/src/common/system-ca.ts index bc7231a5f6..c11846a6c1 100644 --- a/src/common/system-ca.ts +++ b/src/common/system-ca.ts @@ -23,6 +23,7 @@ import { isMac, isWindows } from "./vars"; import wincaAPI from "win-ca/api"; import https from "https"; import { promiseExecFile } from "./utils/promise-exec"; +import logger from "./logger"; // DST Root CA X3, which was expired on 9.30.2021 export const DSTRootCAX3 = "-----BEGIN CERTIFICATE-----\nMIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/\nMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\nDkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow\nPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD\nEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\nAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O\nrz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq\nOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b\nxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw\n7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD\naeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV\nHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG\nSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69\nikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr\nAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz\nR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5\nJDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo\nOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ\n-----END CERTIFICATE-----\n"; @@ -101,7 +102,7 @@ export async function injectSystemCAs() { injectCAs(osxRootCAs); } catch (error) { - console.warn(`[MAC-CA]: Error injecting root CAs from MacOSX. ${error?.message}`); + logger.warn(`[MAC-CA]: Error injecting root CAs from MacOSX. ${error?.message}`); } } @@ -112,7 +113,7 @@ export async function injectSystemCAs() { wincaAPI.inject("+", winRootCAs); } catch (error) { - console.warn(`[WIN-CA]: Error injecting root CAs from Windows. ${error?.message}`); + logger.warn(`[WIN-CA]: Error injecting root CAs from Windows. ${error?.message}`); } } } diff --git a/src/common/user-store/user-store.ts b/src/common/user-store/user-store.ts index 952ca32ecc..0d1829ad4f 100644 --- a/src/common/user-store/user-store.ts +++ b/src/common/user-store/user-store.ts @@ -30,7 +30,7 @@ import { appEventBus } from "../event-bus"; import path from "path"; import { ObservableToggleSet, toJS } from "../../renderer/utils"; import { DESCRIPTORS, EditorConfiguration, ExtensionRegistry, KubeconfigSyncValue, UserPreferencesModel } from "./preferences-helpers"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { AppPaths } from "../app-paths"; export interface UserStoreModel { diff --git a/src/extensions/extension-discovery.ts b/src/extensions/extension-discovery.ts index d45c8bde80..df65aa5e51 100644 --- a/src/extensions/extension-discovery.ts +++ b/src/extensions/extension-discovery.ts @@ -28,7 +28,7 @@ import os from "os"; import path from "path"; import { broadcastMessage, ipcMainHandle, ipcRendererOn, requestMain } from "../common/ipc"; import { Singleton, toJS } from "../common/utils"; -import logger from "../main/logger"; +import logger from "../common/logger"; import { ExtensionInstallationStateStore } from "../renderer/components/+extensions/extension-install.store"; import { extensionInstaller } from "./extension-installer"; import { ExtensionsStore } from "./extensions-store"; diff --git a/src/extensions/extension-installer.ts b/src/extensions/extension-installer.ts index 97eab7999f..abe821b626 100644 --- a/src/extensions/extension-installer.ts +++ b/src/extensions/extension-installer.ts @@ -23,7 +23,7 @@ import AwaitLock from "await-lock"; import child_process from "child_process"; import fs from "fs-extra"; import path from "path"; -import logger from "../main/logger"; +import logger from "../common/logger"; import { extensionPackagesRoot } from "./extension-loader"; import type { PackageJson } from "type-fest"; diff --git a/src/extensions/extension-loader/extension-loader.ts b/src/extensions/extension-loader/extension-loader.ts index 33a716e03a..b791f95329 100644 --- a/src/extensions/extension-loader/extension-loader.ts +++ b/src/extensions/extension-loader/extension-loader.ts @@ -27,7 +27,7 @@ import path from "path"; import { AppPaths } from "../../common/app-paths"; import { broadcastMessage, ipcMainOn, ipcRendererOn, requestMain, ipcMainHandle } from "../../common/ipc"; import { Disposer, toJS } from "../../common/utils"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import type { KubernetesCluster } from "../common-api/catalog"; import type { InstalledExtension } from "../extension-discovery"; import { ExtensionsStore } from "../extensions-store"; @@ -360,11 +360,7 @@ export class ExtensionLoader { try { return __non_webpack_require__(extAbsolutePath).default; } catch (error) { - if (ipcRenderer) { - console.error(`${logModule}: can't load ${entryPointName} for "${extension.manifest.name}": ${error.stack || error}`, extension); - } else { - logger.error(`${logModule}: can't load ${entryPointName} for "${extension.manifest.name}": ${error}`, { extension }); - } + logger.error(`${logModule}: can't load ${entryPointName} for "${extension.manifest.name}": ${error.stack || error}`, extension); } return null; diff --git a/src/extensions/ipc/ipc-main.ts b/src/extensions/ipc/ipc-main.ts index 05d225cb7c..168c3cddd0 100644 --- a/src/extensions/ipc/ipc-main.ts +++ b/src/extensions/ipc/ipc-main.ts @@ -25,7 +25,7 @@ import type { LensMainExtension } from "../lens-main-extension"; import type { Disposer } from "../../common/utils"; import { once } from "lodash"; import { ipcMainHandle } from "../../common/ipc"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; export abstract class IpcMain extends IpcRegistrar { constructor(extension: LensMainExtension) { diff --git a/src/extensions/ipc/ipc-renderer.ts b/src/extensions/ipc/ipc-renderer.ts index 6ec4b870b7..df24cf3db1 100644 --- a/src/extensions/ipc/ipc-renderer.ts +++ b/src/extensions/ipc/ipc-renderer.ts @@ -24,6 +24,7 @@ import { Disposers } from "../lens-extension"; import type { LensRendererExtension } from "../lens-renderer-extension"; import type { Disposer } from "../../common/utils"; import { once } from "lodash"; +import logger from "../../common/logger"; export abstract class IpcRenderer extends IpcRegistrar { constructor(extension: LensRendererExtension) { @@ -44,12 +45,12 @@ export abstract class IpcRenderer extends IpcRegistrar { listen(channel: string, listener: (event: Electron.IpcRendererEvent, ...args: any[]) => any): Disposer { const prefixedChannel = `extensions@${this[IpcPrefix]}:${channel}`; const cleanup = once(() => { - console.info(`[IPC-RENDERER]: removing extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }}); + logger.info(`[IPC-RENDERER]: removing extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }}); return ipcRenderer.removeListener(prefixedChannel, listener); }); - console.info(`[IPC-RENDERER]: adding extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }}); + logger.info(`[IPC-RENDERER]: adding extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version }}); ipcRenderer.addListener(prefixedChannel, listener); this.extension[Disposers].push(cleanup); diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts index 7b6ca8c94f..0eb7942c7f 100644 --- a/src/extensions/lens-extension.ts +++ b/src/extensions/lens-extension.ts @@ -22,7 +22,7 @@ import type { InstalledExtension } from "./extension-discovery"; import { action, observable, makeObservable, computed } from "mobx"; import { FilesystemProvisionerStore } from "../main/extension-filesystem"; -import logger from "../main/logger"; +import logger from "../common/logger"; import type { ProtocolHandlerRegistration } from "./registries"; import type { PackageJson } from "type-fest"; import { Disposer, disposer } from "../common/utils"; diff --git a/src/main/__test__/cluster.test.ts b/src/main/__test__/cluster.test.ts index ffd77da3d2..f92a943831 100644 --- a/src/main/__test__/cluster.test.ts +++ b/src/main/__test__/cluster.test.ts @@ -19,31 +19,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -const logger = { - silly: jest.fn(), - debug: jest.fn(), - log: jest.fn(), - info: jest.fn(), - error: jest.fn(), - crit: jest.fn(), -}; - -jest.mock("winston", () => ({ - format: { - colorize: jest.fn(), - combine: jest.fn(), - simple: jest.fn(), - label: jest.fn(), - timestamp: jest.fn(), - printf: jest.fn(), - }, - createLogger: jest.fn().mockReturnValue(logger), - transports: { - Console: jest.fn(), - File: jest.fn(), - }, -})); - jest.mock("../../common/ipc"); jest.mock("../context-handler"); jest.mock("request"); diff --git a/src/main/__test__/kube-auth-proxy.test.ts b/src/main/__test__/kube-auth-proxy.test.ts index a2ba4cb453..b28e7aa80d 100644 --- a/src/main/__test__/kube-auth-proxy.test.ts +++ b/src/main/__test__/kube-auth-proxy.test.ts @@ -19,31 +19,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -jest.mock("winston", () => ({ - format: { - colorize: jest.fn(), - combine: jest.fn(), - simple: jest.fn(), - label: jest.fn(), - timestamp: jest.fn(), - printf: jest.fn(), - padLevels: jest.fn(), - ms: jest.fn(), - }, - createLogger: jest.fn().mockReturnValue({ - silly: jest.fn(), - debug: jest.fn(), - log: jest.fn(), - info: jest.fn(), - error: jest.fn(), - crit: jest.fn(), - }), - transports: { - Console: jest.fn(), - File: jest.fn(), - }, -})); - jest.mock("../../common/ipc"); jest.mock("child_process"); jest.mock("tcp-port-used"); diff --git a/src/main/__test__/kubeconfig-manager.test.ts b/src/main/__test__/kubeconfig-manager.test.ts index 641881c38b..41d4926e98 100644 --- a/src/main/__test__/kubeconfig-manager.test.ts +++ b/src/main/__test__/kubeconfig-manager.test.ts @@ -19,33 +19,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -const logger = { - silly: jest.fn(), - debug: jest.fn(), - log: jest.fn(), - info: jest.fn(), - error: jest.fn(), - crit: jest.fn(), -}; - -jest.mock("winston", () => ({ - format: { - colorize: jest.fn(), - combine: jest.fn(), - simple: jest.fn(), - label: jest.fn(), - timestamp: jest.fn(), - padLevels: jest.fn(), - ms: jest.fn(), - printf: jest.fn(), - }, - createLogger: jest.fn().mockReturnValue(logger), - transports: { - Console: jest.fn(), - File: jest.fn(), - }, -})); - import { KubeconfigManager } from "../kubeconfig-manager"; import mockFs from "mock-fs"; import { Cluster } from "../cluster"; @@ -123,7 +96,6 @@ describe("kubeconfig manager tests", () => { it("should create 'temp' kube config with proxy", async () => { const kubeConfManager = new KubeconfigManager(cluster, contextHandler); - expect(logger.error).not.toBeCalled(); expect(await kubeConfManager.getPath()).toBe(`tmp${path.sep}kubeconfig-foo`); // this causes an intermittent "ENXIO: no such device or address, read" error // const file = await fse.readFile(await kubeConfManager.getPath()); diff --git a/src/main/kubectl_spec.ts b/src/main/__test__/kubectl.test.ts similarity index 80% rename from src/main/kubectl_spec.ts rename to src/main/__test__/kubectl.test.ts index 974ced9f73..c76fa36787 100644 --- a/src/main/kubectl_spec.ts +++ b/src/main/__test__/kubectl.test.ts @@ -19,14 +19,28 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import packageInfo from "../../package.json"; +import packageInfo from "../../../package.json"; import path from "path"; -import { Kubectl } from "../../src/main/kubectl"; -import { isWindows } from "../common/vars"; +import { Kubectl } from "../kubectl"; +import { isWindows } from "../../common/vars"; +import { UserStore } from "../../common/user-store"; -jest.mock("../common/user-store"); +jest.mock("../../common/app-paths", () => ({ + AppPaths: { + get: () => "tmp", + getAsync: () => "tmp", + }, +})); describe("kubectlVersion", () => { + beforeEach(() => { + UserStore.createInstance(); + }); + + afterEach(() => { + UserStore.resetInstance(); + }); + it("returns bundled version if exactly same version used", async () => { const kubectl = new Kubectl(Kubectl.bundled().kubectlVersion); @@ -42,6 +56,14 @@ describe("kubectlVersion", () => { }); describe("getPath()", () => { + beforeEach(() => { + UserStore.createInstance(); + }); + + afterEach(() => { + UserStore.resetInstance(); + }); + it("returns path to downloaded kubectl binary", async () => { const { bundledKubectlVersion } = packageInfo.config; const kubectl = new Kubectl(bundledKubectlVersion); @@ -61,12 +83,7 @@ describe("getPath()", () => { const kubectl = new Kubectl(bundledKubectlVersion); jest.spyOn(kubectl, "getBundledPath").mockReturnValue("/invalid/path/kubectl"); - const kubectlPath = await kubectl.getPath(); - let binaryName = "kubectl"; - if (isWindows) { - binaryName += ".exe"; - } - expect(kubectlPath).toBe(binaryName); + expect(await kubectl.getPath()).toBe("kubectl"); }); }); diff --git a/src/main/app-updater.ts b/src/main/app-updater.ts index fb4300b266..2886112d8e 100644 --- a/src/main/app-updater.ts +++ b/src/main/app-updater.ts @@ -20,7 +20,7 @@ */ import { autoUpdater, UpdateInfo } from "electron-updater"; -import logger from "./logger"; +import logger from "../common/logger"; import { isLinux, isMac, isPublishConfigured, isTestEnv } from "../common/vars"; import { delay } from "../common/utils"; import { areArgsUpdateAvailableToBackchannel, AutoUpdateChecking, AutoUpdateLogPrefix, AutoUpdateNoUpdateAvailable, broadcastMessage, onceCorrect, UpdateAvailableChannel, UpdateAvailableToBackchannel } from "../common/ipc"; diff --git a/src/main/catalog-sources/kubeconfig-sync.ts b/src/main/catalog-sources/kubeconfig-sync.ts index e011ff6860..6a654553b5 100644 --- a/src/main/catalog-sources/kubeconfig-sync.ts +++ b/src/main/catalog-sources/kubeconfig-sync.ts @@ -27,7 +27,7 @@ import fs from "fs"; import path from "path"; import type stream from "stream"; import { bytesToUnits, Disposer, ExtendedObservableMap, iter, noop, Singleton, storedKubeConfigFolder } from "../../common/utils"; -import logger from "../logger"; +import logger from "../../common/logger"; import type { KubeConfig } from "@kubernetes/client-node"; import { loadConfigFromString, splitConfig } from "../../common/kube-helpers"; import { Cluster } from "../cluster"; @@ -370,8 +370,7 @@ function watchFileChanges(filePath: string): [IComputedValue, D }) .on("error", error => logger.error(`${logPrefix} watching file/folder failed: ${error}`, { filePath })); } catch (error) { - console.log(error.stack); - logger.warn(`${logPrefix} failed to start watching changes: ${error}`); + logger.warn(`${logPrefix} failed to start watching changes:`, error); } })(); diff --git a/src/main/cluster-manager.ts b/src/main/cluster-manager.ts index 850b87c7b8..45c50528b9 100644 --- a/src/main/cluster-manager.ts +++ b/src/main/cluster-manager.ts @@ -23,7 +23,7 @@ import "../common/cluster-ipc"; import type http from "http"; import { action, makeObservable, observable, observe, reaction, toJS } from "mobx"; import { Cluster } from "./cluster"; -import logger from "./logger"; +import logger from "../common/logger"; import { apiKubePrefix } from "../common/vars"; import { getClusterIdFromHost, Singleton } from "../common/utils"; import { catalogEntityRegistry } from "./catalog"; diff --git a/src/main/cluster.ts b/src/main/cluster.ts index 2ec97c792a..7aee52b2fe 100644 --- a/src/main/cluster.ts +++ b/src/main/cluster.ts @@ -28,7 +28,7 @@ import { Kubectl } from "./kubectl"; import { KubeconfigManager } from "./kubeconfig-manager"; import { loadConfigFromFile, loadConfigFromFileSync, validateKubeConfig } from "../common/kube-helpers"; import { apiResourceRecord, apiResources, KubeApiResource, KubeResource } from "../common/rbac"; -import logger from "./logger"; +import logger from "../common/logger"; import { VersionDetector } from "./cluster-detectors/version-detector"; import { DetectorRegistry } from "./cluster-detectors/detector-registry"; import plimit from "p-limit"; diff --git a/src/main/context-handler.ts b/src/main/context-handler.ts index 3042c0c4f3..ef7f9dd092 100644 --- a/src/main/context-handler.ts +++ b/src/main/context-handler.ts @@ -26,7 +26,7 @@ import type { Cluster } from "./cluster"; import type httpProxy from "http-proxy"; import url, { UrlWithStringQuery } from "url"; import { CoreV1Api } from "@kubernetes/client-node"; -import logger from "./logger"; +import logger from "../common/logger"; import { KubeAuthProxy } from "./kube-auth-proxy"; export interface PrometheusDetails { diff --git a/src/main/developer-tools.ts b/src/main/developer-tools.ts index 1e28964c74..7031643ab6 100644 --- a/src/main/developer-tools.ts +++ b/src/main/developer-tools.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import logger from "./logger"; +import logger from "../common/logger"; /** * Installs Electron developer tools in the development build. diff --git a/src/main/exit-app.ts b/src/main/exit-app.ts index 8f9f85d2a4..b522d3da00 100644 --- a/src/main/exit-app.ts +++ b/src/main/exit-app.ts @@ -23,7 +23,7 @@ import { app } from "electron"; import { WindowManager } from "./window-manager"; import { appEventBus } from "../common/event-bus"; import { ClusterManager } from "./cluster-manager"; -import logger from "./logger"; +import logger from "../common/logger"; export function exitApp() { const windowManager = WindowManager.getInstance(false); diff --git a/src/main/helm/helm-chart-manager.ts b/src/main/helm/helm-chart-manager.ts index 522107e8a7..7e1aad75f5 100644 --- a/src/main/helm/helm-chart-manager.ts +++ b/src/main/helm/helm-chart-manager.ts @@ -23,7 +23,7 @@ import fs from "fs"; import v8 from "v8"; import * as yaml from "js-yaml"; import type { HelmRepo } from "./helm-repo-manager"; -import logger from "../logger"; +import logger from "../../common/logger"; import { promiseExecFile } from "../../common/utils/promise-exec"; import { helmCli } from "./helm-cli"; import type { RepoHelmChartList } from "../../common/k8s-api/endpoints/helm-charts.api"; diff --git a/src/main/helm/helm-repo-manager.ts b/src/main/helm/helm-repo-manager.ts index 8c8c0c6996..608055a3fa 100644 --- a/src/main/helm/helm-repo-manager.ts +++ b/src/main/helm/helm-repo-manager.ts @@ -26,7 +26,7 @@ import { helmCli } from "./helm-cli"; import { Singleton } from "../../common/utils/singleton"; import { customRequestPromise } from "../../common/request"; import orderBy from "lodash/orderBy"; -import logger from "../logger"; +import logger from "../../common/logger"; import type { ExecFileOptions } from "child_process"; export type HelmEnv = Record & { @@ -79,7 +79,6 @@ export class HelmRepoManager extends Singleton { } private async init() { - helmCli.setLogger(logger); await helmCli.ensureBinary(); if (!this.initialized) { diff --git a/src/main/helm/helm-service.ts b/src/main/helm/helm-service.ts index 4d4637b3b1..9f627b8fb8 100644 --- a/src/main/helm/helm-service.ts +++ b/src/main/helm/helm-service.ts @@ -20,7 +20,7 @@ */ import type { Cluster } from "../cluster"; -import logger from "../logger"; +import logger from "../../common/logger"; import { HelmRepoManager } from "./helm-repo-manager"; import { HelmChartManager } from "./helm-chart-manager"; import { deleteRelease, getHistory, getRelease, getValues, installChart, listReleases, rollback, upgradeRelease } from "./helm-release-manager"; diff --git a/src/main/index.ts b/src/main/index.ts index f40b92aa21..29d6b736e9 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -34,7 +34,7 @@ import { ClusterManager } from "./cluster-manager"; import { shellSync } from "./shell-sync"; import { mangleProxyEnv } from "./proxy-env"; import { registerFileProtocol } from "../common/register-protocol"; -import logger from "./logger"; +import logger from "../common/logger"; import { appEventBus } from "../common/event-bus"; import { InstalledExtension, ExtensionDiscovery } from "../extensions/extension-discovery"; import type { LensExtensionId } from "../extensions/lens-extension"; @@ -285,8 +285,7 @@ app.on("ready", async () => { extensionLoader.initExtensions(extensions); } catch (error) { dialog.showErrorBox("Lens Error", `Could not load extensions${error?.message ? `: ${error.message}` : ""}`); - console.error(error); - console.trace(); + logger.error(`Could not load extensions`, error); } setTimeout(() => { diff --git a/src/main/kube-auth-proxy.ts b/src/main/kube-auth-proxy.ts index 8627570138..6664aabdf6 100644 --- a/src/main/kube-auth-proxy.ts +++ b/src/main/kube-auth-proxy.ts @@ -24,7 +24,7 @@ import { waitUntilUsed } from "tcp-port-used"; import { randomBytes } from "crypto"; import type { Cluster } from "./cluster"; import { Kubectl } from "./kubectl"; -import logger from "./logger"; +import logger from "../common/logger"; import * as url from "url"; import { getPortFrom } from "./utils/get-port"; import { makeObservable, observable, when } from "mobx"; diff --git a/src/main/kubeconfig-manager.ts b/src/main/kubeconfig-manager.ts index 7f0cfb25ee..6c7044b167 100644 --- a/src/main/kubeconfig-manager.ts +++ b/src/main/kubeconfig-manager.ts @@ -25,7 +25,7 @@ import type { ContextHandler } from "./context-handler"; import path from "path"; import fs from "fs-extra"; import { dumpConfigYaml } from "../common/kube-helpers"; -import logger from "./logger"; +import logger from "../common/logger"; import { LensProxy } from "./lens-proxy"; import { AppPaths } from "../common/app-paths"; diff --git a/src/main/kubectl.ts b/src/main/kubectl.ts index 88daa10b80..b7197556ec 100644 --- a/src/main/kubectl.ts +++ b/src/main/kubectl.ts @@ -22,7 +22,7 @@ import path from "path"; import fs from "fs"; import { promiseExecFile } from "../common/utils/promise-exec"; -import logger from "./logger"; +import logger from "../common/logger"; import { ensureDir, pathExists } from "fs-extra"; import * as lockFile from "proper-lockfile"; import { helmCli } from "./helm/helm-cli"; diff --git a/src/main/lens-binary.ts b/src/main/lens-binary.ts index 7b9f580783..a49a8aaf4a 100644 --- a/src/main/lens-binary.ts +++ b/src/main/lens-binary.ts @@ -25,7 +25,7 @@ import request from "request"; import { ensureDir, pathExists } from "fs-extra"; import * as tar from "tar"; import { isWindows } from "../common/vars"; -import type winston from "winston"; +import logger from "../common/logger"; export type LensBinaryOpts = { version: string; @@ -48,7 +48,6 @@ export class LensBinary { protected arch: string; protected originalBinaryName: string; protected requestOpts: request.Options; - protected logger: Console | winston.Logger; constructor(opts: LensBinaryOpts) { const baseDir = opts.baseDir; @@ -57,7 +56,6 @@ export class LensBinary { this.binaryName = opts.newBinaryName || opts.originalBinaryName; this.binaryVersion = opts.version; this.requestOpts = opts.requestOpts; - this.logger = console; let arch = null; if (process.env.BINARY_ARCH) { @@ -84,10 +82,6 @@ export class LensBinary { } } - public setLogger(logger: Console | winston.Logger) { - this.logger = logger; - } - protected binaryDir() { throw new Error("binaryDir not implemented"); } @@ -124,7 +118,7 @@ export class LensBinary { return this.dirname; } catch (err) { - this.logger.error(err); + logger.error(err); return ""; } @@ -141,17 +135,17 @@ export class LensBinary { if (!isValid) { await this.downloadBinary().catch((error) => { - this.logger.error(error); + logger.error(error); }); if (this.tarPath) await this.untarBinary(); if (this.originalBinaryName != this.binaryName) await this.renameBinary(); - this.logger.info(`${this.originalBinaryName} has been downloaded to ${this.getBinaryPath()}`); + logger.info(`${this.originalBinaryName} has been downloaded to ${this.getBinaryPath()}`); } } protected async untarBinary() { return new Promise(resolve => { - this.logger.debug(`Extracting ${this.originalBinaryName} binary`); + logger.debug(`Extracting ${this.originalBinaryName} binary`); tar.x({ file: this.tarPath, cwd: this.dirname, @@ -163,7 +157,7 @@ export class LensBinary { protected async renameBinary() { return new Promise((resolve, reject) => { - this.logger.debug(`Renaming ${this.originalBinaryName} binary to ${this.binaryName}`); + logger.debug(`Renaming ${this.originalBinaryName} binary to ${this.binaryName}`); fs.rename(this.getOriginalBinaryPath(), this.getBinaryPath(), (err) => { if (err) { reject(err); @@ -183,7 +177,7 @@ export class LensBinary { const file = fs.createWriteStream(binaryPath); const url = this.getUrl(); - this.logger.info(`Downloading ${this.originalBinaryName} ${this.binaryVersion} from ${url} to ${binaryPath}`); + logger.info(`Downloading ${this.originalBinaryName} ${this.binaryVersion} from ${url} to ${binaryPath}`); const requestOpts: request.UriOptions & request.CoreOptions = { uri: url, gzip: true, @@ -192,12 +186,12 @@ export class LensBinary { const stream = request(requestOpts); stream.on("complete", () => { - this.logger.info(`Download of ${this.originalBinaryName} finished`); + logger.info(`Download of ${this.originalBinaryName} finished`); file.end(); }); stream.on("error", (error) => { - this.logger.error(error); + logger.error(error); fs.unlink(binaryPath, () => { // do nothing }); @@ -206,7 +200,7 @@ export class LensBinary { return new Promise((resolve, reject) => { file.on("close", () => { - this.logger.debug(`${this.originalBinaryName} binary download closed`); + logger.debug(`${this.originalBinaryName} binary download closed`); if (!this.tarPath) fs.chmod(binaryPath, 0o755, (err) => { if (err) reject(err); }); diff --git a/src/main/lens-proxy.ts b/src/main/lens-proxy.ts index a9982d5cb7..111660d91f 100644 --- a/src/main/lens-proxy.ts +++ b/src/main/lens-proxy.ts @@ -26,7 +26,7 @@ import httpProxy from "http-proxy"; import { apiPrefix, apiKubePrefix } from "../common/vars"; import type { Router } from "./router"; import type { ContextHandler } from "./context-handler"; -import logger from "./logger"; +import logger from "../common/logger"; import { Singleton } from "../common/utils"; import type { Cluster } from "./cluster"; import type { ProxyApiRequestArgs } from "./proxy-functions"; diff --git a/src/main/logger.ts b/src/main/logger.ts deleted file mode 100644 index b6d7e7ebb9..0000000000 --- a/src/main/logger.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) 2021 OpenLens Authors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -import logger from "../common/logger"; - -export default logger; diff --git a/src/main/menu/menu.ts b/src/main/menu/menu.ts index 13cca14ac7..bfa52abc05 100644 --- a/src/main/menu/menu.ts +++ b/src/main/menu/menu.ts @@ -22,7 +22,7 @@ import { app, BrowserWindow, dialog, Menu, MenuItem, MenuItemConstructorOptions, import { autorun, IComputedValue } from "mobx"; import type { WindowManager } from "../window-manager"; import { appName, isMac, isWindows, docsUrl, supportUrl, productName } from "../../common/vars"; -import logger from "../logger"; +import logger from "../../common/logger"; import { exitApp } from "../exit-app"; import { broadcastMessage } from "../../common/ipc"; import * as packageJson from "../../../package.json"; diff --git a/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts b/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts index cae62989f4..41b1cba5a0 100644 --- a/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts +++ b/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import logger from "../../logger"; +import logger from "../../../common/logger"; import * as proto from "../../../common/protocol-handler"; import URLParse from "url-parse"; import type { LensExtension } from "../../../extensions/lens-extension"; diff --git a/src/main/proxy-functions/shell-api-request.ts b/src/main/proxy-functions/shell-api-request.ts index 76340585e1..40789230f8 100644 --- a/src/main/proxy-functions/shell-api-request.ts +++ b/src/main/proxy-functions/shell-api-request.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import logger from "../logger"; +import logger from "../../common/logger"; import { Server as WebSocketServer } from "ws"; import { NodeShellSession, LocalShellSession } from "../shell-session"; import type { ProxyApiRequestArgs } from "./types"; diff --git a/src/main/resource-applier.ts b/src/main/resource-applier.ts index 61ca1dc1d0..517ff3884e 100644 --- a/src/main/resource-applier.ts +++ b/src/main/resource-applier.ts @@ -25,8 +25,8 @@ import { exec } from "child_process"; import fs from "fs-extra"; import * as yaml from "js-yaml"; import path from "path"; -import tempy from "tempy"; -import logger from "./logger"; +import * as tempy from "tempy"; +import logger from "../common/logger"; import { appEventBus } from "../common/event-bus"; import { cloneJsonObject } from "../common/utils"; import type { Patch } from "rfc6902"; diff --git a/src/main/router.ts b/src/main/router.ts index 082d710f68..3c44f0097d 100644 --- a/src/main/router.ts +++ b/src/main/router.ts @@ -27,7 +27,7 @@ import { readFile } from "fs-extra"; import type { Cluster } from "./cluster"; import { apiPrefix, appName, publicPath, isDevelopment, webpackDevServerPort } from "../common/vars"; import { HelmApiRoute, KubeconfigRoute, MetricsRoute, PortForwardRoute, ResourceApplierApiRoute, VersionRoute } from "./routes"; -import logger from "./logger"; +import logger from "../common/logger"; export interface RouterRequestOpts { req: http.IncomingMessage; diff --git a/src/main/routes/helm-route.ts b/src/main/routes/helm-route.ts index 46112d7111..e0a26b4787 100644 --- a/src/main/routes/helm-route.ts +++ b/src/main/routes/helm-route.ts @@ -21,7 +21,7 @@ import type { LensApiRequest } from "../router"; import { helmService } from "../helm/helm-service"; -import logger from "../logger"; +import logger from "../../common/logger"; import { respondJson, respondText } from "../utils/http-responses"; import { getBoolean } from "../utils/parse-query"; diff --git a/src/main/routes/metrics-route.ts b/src/main/routes/metrics-route.ts index c323c06be9..6d5559a8d8 100644 --- a/src/main/routes/metrics-route.ts +++ b/src/main/routes/metrics-route.ts @@ -23,7 +23,7 @@ import type { LensApiRequest } from "../router"; import { respondJson } from "../utils/http-responses"; import type { Cluster } from "../cluster"; import { ClusterMetadataKey, ClusterPrometheusMetadata } from "../../common/cluster-types"; -import logger from "../logger"; +import logger from "../../common/logger"; import { getMetrics } from "../k8s-request"; import { PrometheusProviderRegistry } from "../prometheus"; diff --git a/src/main/routes/port-forward-route.ts b/src/main/routes/port-forward-route.ts index 030ec8ff07..10056a7c90 100644 --- a/src/main/routes/port-forward-route.ts +++ b/src/main/routes/port-forward-route.ts @@ -23,7 +23,7 @@ import type { LensApiRequest } from "../router"; import { spawn, ChildProcessWithoutNullStreams } from "child_process"; import { Kubectl } from "../kubectl"; import * as tcpPortUsed from "tcp-port-used"; -import logger from "../logger"; +import logger from "../../common/logger"; import { getPortFrom } from "../utils/get-port"; import { respondJson } from "../utils/http-responses"; @@ -138,10 +138,10 @@ export class PortForwardRoute { if (!portForward) { logger.info(`Creating a new port-forward ${namespace}/${resourceType}/${resourceName}:${port}`); - const thePort = 0 < forwardPort && forwardPort < 65536 - ? forwardPort + const thePort = 0 < forwardPort && forwardPort < 65536 + ? forwardPort : 0; - + portForward = new PortForward(await cluster.getProxyKubeconfigPath(), { clusterId: cluster.id, kind: resourceType, diff --git a/src/main/shell-session/node-shell-session.ts b/src/main/shell-session/node-shell-session.ts index 0b7d673de9..6a23b0b507 100644 --- a/src/main/shell-session/node-shell-session.ts +++ b/src/main/shell-session/node-shell-session.ts @@ -28,7 +28,7 @@ import { ShellOpenError, ShellSession } from "./shell-session"; import { get } from "lodash"; import { Node, NodesApi } from "../../common/k8s-api/endpoints"; import { KubeJsonApi } from "../../common/k8s-api/kube-json-api"; -import logger from "../logger"; +import logger from "../../common/logger"; import { TerminalChannels } from "../../renderer/api/terminal-api"; export class NodeShellSession extends ShellSession { diff --git a/src/main/shell-session/shell-session.ts b/src/main/shell-session/shell-session.ts index b17ef22689..62ec960f87 100644 --- a/src/main/shell-session/shell-session.ts +++ b/src/main/shell-session/shell-session.ts @@ -31,7 +31,7 @@ import { isMac, isWindows } from "../../common/vars"; import { UserStore } from "../../common/user-store"; import * as pty from "node-pty"; import { appEventBus } from "../../common/event-bus"; -import logger from "../logger"; +import logger from "../../common/logger"; import { TerminalChannels, TerminalMessage } from "../../renderer/api/terminal-api"; import { deserialize, serialize } from "v8"; import { stat } from "fs/promises"; diff --git a/src/main/shell-sync.ts b/src/main/shell-sync.ts index bb2352e51d..ce0732084c 100644 --- a/src/main/shell-sync.ts +++ b/src/main/shell-sync.ts @@ -22,7 +22,7 @@ import { shellEnv } from "./utils/shell-env"; import os from "os"; import { app } from "electron"; -import logger from "./logger"; +import logger from "../common/logger"; import { isSnap } from "../common/vars"; /** diff --git a/src/main/tray/tray.ts b/src/main/tray/tray.ts index ac3e140e3b..fd12e4c3ba 100644 --- a/src/main/tray/tray.ts +++ b/src/main/tray/tray.ts @@ -26,7 +26,7 @@ import { autorun, IComputedValue } from "mobx"; import { showAbout } from "../menu/menu"; import { checkForUpdates, isAutoUpdateEnabled } from "../app-updater"; import type { WindowManager } from "../window-manager"; -import logger from "../logger"; +import logger from "../../common/logger"; import { isDevelopment, isWindows, productName } from "../../common/vars"; import { exitApp } from "../exit-app"; import { preferencesURL } from "../../common/routes"; diff --git a/src/main/utils/get-port.ts b/src/main/utils/get-port.ts index a9ad5655bc..b3f81b9cda 100644 --- a/src/main/utils/get-port.ts +++ b/src/main/utils/get-port.ts @@ -21,7 +21,7 @@ import type { Readable } from "stream"; import URLParse from "url-parse"; -import logger from "../logger"; +import logger from "../../common/logger"; interface GetPortArgs { /** diff --git a/src/main/utils/shell-env.ts b/src/main/utils/shell-env.ts index 644121c3ac..d46c949d0b 100644 --- a/src/main/utils/shell-env.ts +++ b/src/main/utils/shell-env.ts @@ -20,7 +20,7 @@ */ import shellEnvironment from "shell-env"; -import logger from "../logger"; +import logger from "../../common/logger"; export type EnvironmentVariables = Record; diff --git a/src/main/window-manager.ts b/src/main/window-manager.ts index 3987e29824..152f045925 100644 --- a/src/main/window-manager.ts +++ b/src/main/window-manager.ts @@ -28,7 +28,7 @@ import { BundledExtensionsLoaded, ipcMainOn } from "../common/ipc"; import { delay, iter, Singleton } from "../common/utils"; import { ClusterFrameInfo, clusterFrameMap } from "../common/cluster-frames"; import { IpcRendererNavigationEvents } from "../renderer/navigation/events"; -import logger from "./logger"; +import logger from "../common/logger"; import { isMac, productName } from "../common/vars"; import { LensProxy } from "./lens-proxy"; diff --git a/src/migrations/helpers.ts b/src/migrations/helpers.ts index b7344e22e6..87b3f4619d 100644 --- a/src/migrations/helpers.ts +++ b/src/migrations/helpers.ts @@ -21,13 +21,11 @@ import type Conf from "conf"; import type { Migrations } from "conf/dist/source/types"; +import logger from "../common/logger"; import { ExtendedMap, iter } from "../common/utils"; -import { isTestEnv } from "../common/vars"; export function migrationLog(...args: any[]) { - if (!isTestEnv) { - console.log(...args); - } + logger.info(...args); } export interface MigrationDeclaration { diff --git a/src/renderer/api/websocket-api.ts b/src/renderer/api/websocket-api.ts index 7b9144d325..1f76a333a7 100644 --- a/src/renderer/api/websocket-api.ts +++ b/src/renderer/api/websocket-api.ts @@ -24,6 +24,7 @@ import EventEmitter from "events"; import type TypedEventEmitter from "typed-emitter"; import type { Arguments } from "typed-emitter"; import { isDevelopment } from "../../common/vars"; +import logger from "../../common/logger"; interface WebsocketApiParams { /** @@ -136,7 +137,7 @@ export class WebSocketApi extends (EventEmitter reconnect(): void { if (!this.socket) { - return void console.error("[WEBSOCKET-API]: cannot reconnect to a socket that is not connected"); + return void logger.error("[WEBSOCKET-API]: cannot reconnect to a socket that is not connected"); } this.connect(this.socket.url); @@ -214,7 +215,7 @@ export class WebSocketApi extends (EventEmitter protected writeLog(...data: any[]) { if (this.params.logging) { - console.debug(...data); + logger.debug(...data); } } } diff --git a/src/renderer/cluster-frame.tsx b/src/renderer/cluster-frame.tsx index bcade8cf5d..d8fb6d39dd 100755 --- a/src/renderer/cluster-frame.tsx +++ b/src/renderer/cluster-frame.tsx @@ -31,7 +31,7 @@ import { DeploymentScaleDialog } from "./components/+workloads-deployments/deplo import { CronJobTriggerDialog } from "./components/+workloads-cronjobs/cronjob-trigger-dialog"; import { CustomResources } from "./components/+custom-resources/custom-resources"; import { isAllowedResource } from "../common/utils/allowed-resource"; -import logger from "../main/logger"; +import logger from "../common/logger"; import { webFrame } from "electron"; import { ClusterPageRegistry, getExtensionPageUrl } from "../extensions/registries/page-registry"; import type { ExtensionLoader } from "../extensions/extension-loader"; @@ -108,7 +108,7 @@ export class ClusterFrame extends React.Component { { timeout: 15_000, onError: (error) => { - console.warn("[CLUSTER-FRAME]: error from activeEntity when()", error); + logger.warn("[CLUSTER-FRAME]: error from activeEntity when()", error); Notifications.error("Failed to get KubernetesCluster for this view. Extensions will not be loaded."); }, }, diff --git a/src/renderer/components/+apps-releases/release.store.ts b/src/renderer/components/+apps-releases/release.store.ts index 081b637447..9a0cb20818 100644 --- a/src/renderer/components/+apps-releases/release.store.ts +++ b/src/renderer/components/+apps-releases/release.store.ts @@ -28,6 +28,7 @@ import type { Secret } from "../../../common/k8s-api/endpoints"; import { secretsStore } from "../+config-secrets/secrets.store"; import { namespaceStore } from "../+namespaces/namespace.store"; import { Notifications } from "../notifications"; +import logger from "../../../common/logger"; export class ReleaseStore extends ItemStore { releaseSecrets = observable.map(); @@ -95,7 +96,7 @@ export class ReleaseStore extends ItemStore { this.failedLoading = false; } catch (error) { this.failedLoading = true; - console.warn("Loading Helm Chart releases has failed", error); + logger.warn("Loading Helm Chart releases has failed", error); if (error.error) { Notifications.error(error.error); diff --git a/src/renderer/components/+catalog/catalog.tsx b/src/renderer/components/+catalog/catalog.tsx index 595ba6a81c..685a812862 100644 --- a/src/renderer/components/+catalog/catalog.tsx +++ b/src/renderer/components/+catalog/catalog.tsx @@ -46,6 +46,7 @@ import { HotbarToggleMenuItem } from "./hotbar-toggle-menu-item"; import { Avatar } from "../avatar"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import { getLabelBadges } from "./helpers"; +import logger from "../../../common/logger"; export const previousActiveTab = createStorage("catalog-previous-active-tab", browseCatalogTab); @@ -105,7 +106,7 @@ export class Catalog extends React.Component { this.catalogEntityStore.activeCategory = item; }); } catch (error) { - console.error(error); + logger.error(`[CATALOG]: Unknown category for ${routeTab}:`, error); Notifications.error(

Unknown category: {routeTab}

); } }, { fireImmediately: true }), diff --git a/src/renderer/components/+extensions/attempt-install-by-info/attempt-install-by-info.tsx b/src/renderer/components/+extensions/attempt-install-by-info/attempt-install-by-info.tsx index 076737c0fe..1e3a1b4de8 100644 --- a/src/renderer/components/+extensions/attempt-install-by-info/attempt-install-by-info.tsx +++ b/src/renderer/components/+extensions/attempt-install-by-info/attempt-install-by-info.tsx @@ -28,6 +28,7 @@ import { SemVer } from "semver"; import URLParse from "url-parse"; import type { InstallRequest } from "../attempt-install/install-request"; import lodash from "lodash"; +import logger from "../../../../common/logger"; export interface ExtensionInfo { name: string; @@ -63,10 +64,10 @@ export const attemptInstallByInfo = ({ attemptInstall, getBaseRegistryUrl }: Dep } catch (error) { if (error instanceof SyntaxError) { // assume invalid JSON - console.warn("Set registry has invalid json", { url: baseUrl }, error); + logger.warn("Set registry has invalid json", { url: baseUrl }, error); Notifications.error("Failed to get valid registry information for that extension. Registry did not return valid JSON"); } else { - console.error("Failed to download registry information", error); + logger.error("Failed to download registry information", error); Notifications.error(`Failed to get valid registry information for that extension. ${error}`); } diff --git a/src/renderer/components/+extensions/attempt-install/create-temp-files-and-validate/create-temp-files-and-validate.tsx b/src/renderer/components/+extensions/attempt-install/create-temp-files-and-validate/create-temp-files-and-validate.tsx index e692ace784..f6f501ba34 100644 --- a/src/renderer/components/+extensions/attempt-install/create-temp-files-and-validate/create-temp-files-and-validate.tsx +++ b/src/renderer/components/+extensions/attempt-install/create-temp-files-and-validate/create-temp-files-and-validate.tsx @@ -21,7 +21,7 @@ import { validatePackage } from "../validate-package/validate-package"; import { ExtensionDiscovery } from "../../../../../extensions/extension-discovery"; import { getMessageFromError } from "../../get-message-from-error/get-message-from-error"; -import logger from "../../../../../main/logger"; +import logger from "../../../../../common/logger"; import { Notifications } from "../../../notifications"; import path from "path"; import fse from "fs-extra"; diff --git a/src/renderer/components/+extensions/attempt-install/unpack-extension/unpack-extension.tsx b/src/renderer/components/+extensions/attempt-install/unpack-extension/unpack-extension.tsx index 73e9f15328..43520a4f85 100644 --- a/src/renderer/components/+extensions/attempt-install/unpack-extension/unpack-extension.tsx +++ b/src/renderer/components/+extensions/attempt-install/unpack-extension/unpack-extension.tsx @@ -22,7 +22,7 @@ import type { InstallRequestValidated } from "../create-temp-files-and-validate/ import { Disposer, extractTar, noop } from "../../../../../common/utils"; import { ExtensionInstallationStateStore } from "../../extension-install.store"; import { extensionDisplayName } from "../../../../../extensions/lens-extension"; -import logger from "../../../../../main/logger"; +import logger from "../../../../../common/logger"; import type { ExtensionLoader } from "../../../../../extensions/extension-loader"; import { Notifications } from "../../../notifications"; import { getMessageFromError } from "../../get-message-from-error/get-message-from-error"; diff --git a/src/renderer/components/+extensions/extension-install.store.ts b/src/renderer/components/+extensions/extension-install.store.ts index 4ca79ec337..fd95211f20 100644 --- a/src/renderer/components/+extensions/extension-install.store.ts +++ b/src/renderer/components/+extensions/extension-install.store.ts @@ -20,7 +20,7 @@ */ import { action, computed, observable } from "mobx"; -import logger from "../../../main/logger"; +import logger from "../../../common/logger"; import { disposer } from "../../utils"; import type { ExtendableDisposer } from "../../utils"; import * as uuid from "uuid"; diff --git a/src/renderer/components/+extensions/get-base-registry-url/get-base-registry-url.tsx b/src/renderer/components/+extensions/get-base-registry-url/get-base-registry-url.tsx index 1e9c582d39..8da711bfbc 100644 --- a/src/renderer/components/+extensions/get-base-registry-url/get-base-registry-url.tsx +++ b/src/renderer/components/+extensions/get-base-registry-url/get-base-registry-url.tsx @@ -20,6 +20,7 @@ */ import React from "react"; +import logger from "../../../../common/logger"; import { defaultExtensionRegistryUrl, ExtensionRegistry, ExtensionRegistryLocation } from "../../../../common/user-store/preferences-helpers"; import { promiseExecFile } from "../../../utils"; import { Notifications } from "../../notifications"; @@ -46,7 +47,7 @@ export const getBaseRegistryUrl = ({ getRegistryUrlPreference }: Dependencies) = return stdout.trim(); } catch (error) { Notifications.error(

Failed to get configured registry from .npmrc. Falling back to default registry

); - console.warn("[EXTENSIONS]: failed to get configured registry from .npmrc", error); + logger.warn("[EXTENSIONS]: failed to get configured registry from .npmrc", error); } // fallthrough } diff --git a/src/renderer/components/+extensions/install-from-input/install-from-input.tsx b/src/renderer/components/+extensions/install-from-input/install-from-input.tsx index 05ad14b087..59eeb583fc 100644 --- a/src/renderer/components/+extensions/install-from-input/install-from-input.tsx +++ b/src/renderer/components/+extensions/install-from-input/install-from-input.tsx @@ -22,7 +22,7 @@ import { downloadFile, ExtendableDisposer } from "../../../../common/utils"; import { InputValidators } from "../../input"; import { ExtensionInstallationStateStore } from "../extension-install.store"; import { getMessageFromError } from "../get-message-from-error/get-message-from-error"; -import logger from "../../../../main/logger"; +import logger from "../../../../common/logger"; import { Notifications } from "../../notifications"; import path from "path"; import React from "react"; diff --git a/src/renderer/components/+extensions/install-on-drop/install-on-drop.tsx b/src/renderer/components/+extensions/install-on-drop/install-on-drop.tsx index 1e79d618dd..4ba76209c7 100644 --- a/src/renderer/components/+extensions/install-on-drop/install-on-drop.tsx +++ b/src/renderer/components/+extensions/install-on-drop/install-on-drop.tsx @@ -18,7 +18,7 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import logger from "../../../../main/logger"; +import logger from "../../../../common/logger"; interface Dependencies { attemptInstalls: (filePaths: string[]) => Promise; diff --git a/src/renderer/components/+extensions/read-file-notify/read-file-notify.ts b/src/renderer/components/+extensions/read-file-notify/read-file-notify.ts index 9580ae7b9e..558f533868 100644 --- a/src/renderer/components/+extensions/read-file-notify/read-file-notify.ts +++ b/src/renderer/components/+extensions/read-file-notify/read-file-notify.ts @@ -20,7 +20,7 @@ */ import fse from "fs-extra"; import { getMessageFromError } from "../get-message-from-error/get-message-from-error"; -import logger from "../../../../main/logger"; +import logger from "../../../../common/logger"; import { Notifications } from "../../notifications"; export const readFileNotify = async (filePath: string, showError = true): Promise => { diff --git a/src/renderer/components/+extensions/uninstall-extension/uninstall-extension.tsx b/src/renderer/components/+extensions/uninstall-extension/uninstall-extension.tsx index 5e796e72de..a8f4f63cde 100644 --- a/src/renderer/components/+extensions/uninstall-extension/uninstall-extension.tsx +++ b/src/renderer/components/+extensions/uninstall-extension/uninstall-extension.tsx @@ -20,7 +20,7 @@ */ import type { ExtensionLoader } from "../../../../extensions/extension-loader"; import { extensionDisplayName, LensExtensionId } from "../../../../extensions/lens-extension"; -import logger from "../../../../main/logger"; +import logger from "../../../../common/logger"; import { ExtensionInstallationStateStore } from "../extension-install.store"; import { ExtensionDiscovery } from "../../../../extensions/extension-discovery"; import { Notifications } from "../../notifications"; diff --git a/src/renderer/components/+preferences/kubeconfig-syncs.tsx b/src/renderer/components/+preferences/kubeconfig-syncs.tsx index 0b148d2178..22e7f4dc93 100644 --- a/src/renderer/components/+preferences/kubeconfig-syncs.tsx +++ b/src/renderer/components/+preferences/kubeconfig-syncs.tsx @@ -26,7 +26,7 @@ import { Notice } from "../+extensions/notice"; import { KubeconfigSyncEntry, KubeconfigSyncValue, UserStore } from "../../../common/user-store"; import { isWindows } from "../../../common/vars"; -import logger from "../../../main/logger"; +import logger from "../../../common/logger"; import { iter, multiSet } from "../../utils"; import { SubTitle } from "../layout/sub-title"; import { PathPicker } from "../path-picker/path-picker"; diff --git a/src/renderer/components/+workloads-pods/pods.store.ts b/src/renderer/components/+workloads-pods/pods.store.ts index cb107dadcf..d1359261a6 100644 --- a/src/renderer/components/+workloads-pods/pods.store.ts +++ b/src/renderer/components/+workloads-pods/pods.store.ts @@ -26,6 +26,7 @@ import { autoBind, cpuUnitsToNumber, unitsToBytes } from "../../utils"; import { Pod, PodMetrics, podMetricsApi, podsApi } from "../../../common/k8s-api/endpoints"; import { apiManager } from "../../../common/k8s-api/api-manager"; import type { WorkloadKubeObject } from "../../../common/k8s-api/workload-kube-object"; +import logger from "../../../common/logger"; export class PodsStore extends KubeObjectStore { api = podsApi; @@ -43,7 +44,7 @@ export class PodsStore extends KubeObjectStore { try { this.kubeMetrics.replace(await podMetricsApi.list({ namespace })); } catch (error) { - console.warn("loadKubeMetrics failed", error); + logger.warn("loadKubeMetrics failed", error); } } diff --git a/src/renderer/components/cluster-manager/lens-views.ts b/src/renderer/components/cluster-manager/lens-views.ts index 784e645e59..cd2cfe9efc 100644 --- a/src/renderer/components/cluster-manager/lens-views.ts +++ b/src/renderer/components/cluster-manager/lens-views.ts @@ -20,7 +20,7 @@ */ import { action, IReactionDisposer, makeObservable, observable, when } from "mobx"; -import logger from "../../../main/logger"; +import logger from "../../../common/logger"; import { clusterVisibilityHandler } from "../../../common/cluster-ipc"; import { ClusterStore } from "../../../common/cluster-store"; import type { ClusterId } from "../../../common/cluster-types"; diff --git a/src/renderer/components/command-palette/command-dialog.tsx b/src/renderer/components/command-palette/command-dialog.tsx index 01f095ec16..631ec47623 100644 --- a/src/renderer/components/command-palette/command-dialog.tsx +++ b/src/renderer/components/command-palette/command-dialog.tsx @@ -35,6 +35,7 @@ import { orderBy } from "lodash"; import { withInjectables } from "@ogre-tools/injectable-react"; import registeredCommandsInjectable from "./registered-commands/registered-commands.injectable"; import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; +import logger from "../../../common/logger"; interface Dependencies { commands: IComputedValue>; @@ -67,7 +68,7 @@ const NonInjectedCommandDialog = observer(({ commands, activeEntity, closeComman }, }); } catch (error) { - console.error("[COMMAND-DIALOG] failed to execute command", command.id, error); + logger.error("[COMMAND-DIALOG] failed to execute command", command.id, error); } }; @@ -78,7 +79,7 @@ const NonInjectedCommandDialog = observer(({ commands, activeEntity, closeComman try { return command.isActive(context); } catch (error) { - console.error(`[COMMAND-DIALOG]: isActive for ${command.id} threw an error, defaulting to false`, error); + logger.error(`[COMMAND-DIALOG]: isActive for ${command.id} threw an error, defaulting to false`, error); } return false; diff --git a/src/renderer/components/dock/terminal.store.ts b/src/renderer/components/dock/terminal.store.ts index bc6bda61e8..9ec591a85b 100644 --- a/src/renderer/components/dock/terminal.store.ts +++ b/src/renderer/components/dock/terminal.store.ts @@ -26,6 +26,7 @@ import { TerminalApi, TerminalChannels } from "../../api/terminal-api"; import { dockStore, DockTab, DockTabCreateSpecific, TabId, TabKind } from "./dock.store"; import { WebSocketApiState } from "../../api/websocket-api"; import { Notifications } from "../notifications"; +import logger from "../../../common/logger"; export interface ITerminalTab extends DockTab { node?: string; // activate node shell mode @@ -146,7 +147,7 @@ export class TerminalStore extends Singleton { data: command, }); } else { - console.warn("The selected tab is does not have a connection. Cannot send command.", { tabId: dockStore.selectedTabId, command }); + logger.warn("The selected tab is does not have a connection. Cannot send command.", { tabId: dockStore.selectedTabId, command }); } } diff --git a/src/renderer/components/input/drop-file-input.tsx b/src/renderer/components/input/drop-file-input.tsx index 7bc3da13a5..451ef85d77 100644 --- a/src/renderer/components/input/drop-file-input.tsx +++ b/src/renderer/components/input/drop-file-input.tsx @@ -24,7 +24,7 @@ import React from "react"; import { boundMethod, cssNames, IClassName } from "../../utils"; import { observable, makeObservable } from "mobx"; import { observer } from "mobx-react"; -import logger from "../../../main/logger"; +import logger from "../../../common/logger"; export interface DropFileInputProps extends React.DOMAttributes { className?: IClassName; diff --git a/src/renderer/components/kube-detail-params/params.ts b/src/renderer/components/kube-detail-params/params.ts index e0d27a0a0d..f4ea184355 100644 --- a/src/renderer/components/kube-detail-params/params.ts +++ b/src/renderer/components/kube-detail-params/params.ts @@ -18,6 +18,7 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +import logger from "../../../common/logger"; import { createPageParam, navigation } from "../../navigation"; /** @@ -62,7 +63,7 @@ export function hideDetails() { } export function getDetailsUrl(selfLink: string, resetSelected = false, mergeGlobals = true) { - console.debug("getDetailsUrl", { selfLink, resetSelected, mergeGlobals }); + logger.debug("getDetailsUrl", { selfLink, resetSelected, mergeGlobals }); const params = new URLSearchParams(mergeGlobals ? navigation.searchParams : ""); params.set(kubeDetailsUrlParam.name, selfLink); diff --git a/src/renderer/components/kube-object-details/kube-object-details.tsx b/src/renderer/components/kube-object-details/kube-object-details.tsx index e01c109fc5..fcc0e66766 100644 --- a/src/renderer/components/kube-object-details/kube-object-details.tsx +++ b/src/renderer/components/kube-object-details/kube-object-details.tsx @@ -31,6 +31,7 @@ import { apiManager } from "../../../common/k8s-api/api-manager"; import { crdStore } from "../+custom-resources/crd.store"; import { KubeObjectMenu } from "../kube-object-menu"; import { KubeObjectDetailRegistry } from "../../api/kube-object-detail-registry"; +import logger from "../../../common/logger"; import { CrdResourceDetails } from "../+custom-resources"; import { KubeObjectMeta } from "../kube-object-meta"; import { hideDetails, kubeDetailsUrlParam } from "../kube-detail-params"; @@ -61,7 +62,7 @@ export class KubeObjectDetails extends React.Component { .getStore(this.path) ?.getByPath(this.path); } catch (error) { - console.error(`[KUBE-OBJECT-DETAILS]: failed to get store or object: ${error}`, { path: this.path }); + logger.error(`[KUBE-OBJECT-DETAILS]: failed to get store or object: ${error}`, { path: this.path }); return undefined; } diff --git a/src/renderer/components/layout/sidebar.tsx b/src/renderer/components/layout/sidebar.tsx index 58d388242c..94bb8cb165 100644 --- a/src/renderer/components/layout/sidebar.tsx +++ b/src/renderer/components/layout/sidebar.tsx @@ -43,6 +43,7 @@ import { Config } from "../+config"; import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; import { SidebarCluster } from "./sidebar-cluster"; import { kubeWatchApi } from "../../../common/k8s-api/kube-watch-api"; +import logger from "../../../common/logger"; interface Props { className?: string; @@ -127,7 +128,7 @@ export class Sidebar extends React.Component { const { extensionId, id: pageId, url, components } = page; if (subMenu.components.Icon) { - console.warn( + logger.warn( "ClusterPageMenuRegistration has components.Icon defined and a valid parentId. Icon will not be displayed", { id: subMenu.id, diff --git a/src/renderer/components/monaco-editor/monaco-editor.tsx b/src/renderer/components/monaco-editor/monaco-editor.tsx index 4a6a4320ba..2c6d0db285 100644 --- a/src/renderer/components/monaco-editor/monaco-editor.tsx +++ b/src/renderer/components/monaco-editor/monaco-editor.tsx @@ -30,6 +30,7 @@ import { debounce, merge } from "lodash"; import { cssNames, disposer } from "../../utils"; import { UserStore } from "../../../common/user-store"; import { ThemeStore } from "../../theme.store"; +import logger from "../../../common/logger"; export type MonacoEditorId = string; @@ -70,11 +71,6 @@ export class MonacoEditor extends React.Component { public staticId = `editor-id#${Math.round(1e7 * Math.random())}`; public dispose = disposer(); - // TODO: investigate how to replace with "common/logger" - // currently leads for stucking UI forever & infinite loop. - // e.g. happens on tab change/create, maybe some other cases too. - logger = console; - @observable.ref containerElem: HTMLElement; @observable.ref editor: editor.IStandaloneCodeEditor; @observable dimensions: { width?: number, height?: number } = {}; @@ -137,7 +133,7 @@ export class MonacoEditor extends React.Component { } onModelChange = (model: editor.ITextModel, oldModel?: editor.ITextModel) => { - this.logger?.info("[MONACO]: model change", { model, oldModel }, this.logMetadata); + logger.info("[MONACO]: model change", { model, oldModel }, this.logMetadata); if (oldModel) { this.saveViewState(oldModel); @@ -171,9 +167,9 @@ export class MonacoEditor extends React.Component { componentDidMount() { try { this.createEditor(); - this.logger?.info(`[MONACO]: editor did mount`, this.logMetadata); + logger.info(`[MONACO]: editor did mount`, this.logMetadata); } catch (error) { - this.logger?.error(`[MONACO]: mounting failed: ${error}`, this.logMetadata); + logger.error(`[MONACO]: mounting failed: ${error}`, this.logMetadata); } } @@ -199,7 +195,7 @@ export class MonacoEditor extends React.Component { ...this.options, }); - this.logger?.info(`[MONACO]: editor created for language=${language}, theme=${theme}`, this.logMetadata); + logger.info(`[MONACO]: editor created for language=${language}, theme=${theme}`, this.logMetadata); this.validateLazy(); // validate initial value this.restoreViewState(this.model); // restore previous state if any diff --git a/src/renderer/components/scroll-spy/__tests__/scroll-spy.test.tsx b/src/renderer/components/scroll-spy/__tests__/scroll-spy.test.tsx index f5316a1a4d..0f816acbf3 100644 --- a/src/renderer/components/scroll-spy/__tests__/scroll-spy.test.tsx +++ b/src/renderer/components/scroll-spy/__tests__/scroll-spy.test.tsx @@ -78,19 +78,11 @@ describe("", () => { }); it("throws if no sections founded", () => { - // Prevent writing to stderr during this render. - const err = console.error; - - console.error = jest.fn(); - expect(() => render( (
Content
)}/>)).toThrow(); - - // Restore writing to stderr. - console.error = err; }); }); @@ -176,8 +168,6 @@ describe(" dataTree inside ", () => { expect(queryByTitle("Application")).toHaveAttribute("aria-expanded"); expect(queryByTitle("Kubernetes")).toHaveAttribute("aria-expanded"); }); - - // console.log(prettyDOM()); }); it("skips sections without headings", async () => { diff --git a/src/renderer/components/table/table.tsx b/src/renderer/components/table/table.tsx index 6ad688a516..412fc9d8c8 100644 --- a/src/renderer/components/table/table.tsx +++ b/src/renderer/components/table/table.tsx @@ -32,6 +32,7 @@ import { createPageParam } from "../../navigation"; import { getSortParams, setSortParams } from "./table.storage"; import { computed, makeObservable } from "mobx"; import { getSorted } from "./sorting"; +import logger from "../../../common/logger"; export type TableSortBy = string; export type TableOrderBy = "asc" | "desc" | string; @@ -110,7 +111,7 @@ export class Table extends React.Component> { const { sortable, tableId } = this.props; if (sortable && !tableId) { - console.error("Table must have props.tableId if props.sortable is specified"); + logger.error("Table must have props.tableId if props.sortable is specified"); } } diff --git a/src/renderer/initializers/catalog.tsx b/src/renderer/initializers/catalog.tsx index 546c717aa5..9852b7c453 100644 --- a/src/renderer/initializers/catalog.tsx +++ b/src/renderer/initializers/catalog.tsx @@ -27,12 +27,13 @@ import { catalogCategoryRegistry } from "../api/catalog-category-registry"; import { WeblinkAddCommand } from "../components/catalog-entities/weblink-add-command"; import { loadConfigFromString } from "../../common/kube-helpers"; import { DeleteClusterDialog } from "../components/delete-cluster-dialog"; +import logger from "../../common/logger"; -async function onClusterDelete(clusterId: string) { +async function onClusterDelete(clusterId: string): Promise { const cluster = ClusterStore.getInstance().getById(clusterId); if (!cluster) { - return console.warn("[KUBERNETES-CLUSTER]: cannot delete cluster, does not exist in store", { clusterId }); + return void logger.warn("[KUBERNETES-CLUSTER]: cannot delete cluster, does not exist in store", { clusterId }); } const { config, error } = loadConfigFromString(await fs.promises.readFile(cluster.kubeConfigPath, "utf-8")); diff --git a/src/renderer/navigation/events.ts b/src/renderer/navigation/events.ts index 96937c7529..8bb0504194 100644 --- a/src/renderer/navigation/events.ts +++ b/src/renderer/navigation/events.ts @@ -23,7 +23,7 @@ import { ipcRenderer } from "electron"; import { reaction } from "mobx"; import { getMatchedClusterId, navigate } from "./helpers"; import { broadcastMessage, ipcRendererOn } from "../../common/ipc"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; export const enum IpcRendererNavigationEvents { RELOAD_PAGE = "renderer:page-reload", diff --git a/src/renderer/navigation/history.ts b/src/renderer/navigation/history.ts index 9bb4d4813c..b017cbe3a7 100644 --- a/src/renderer/navigation/history.ts +++ b/src/renderer/navigation/history.ts @@ -22,7 +22,7 @@ import { ipcRenderer } from "electron"; import { createBrowserHistory, createMemoryHistory } from "history"; import { createObservableHistory, ObservableSearchParamsOptions } from "mobx-observable-history"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; export const searchParamsOptions: ObservableSearchParamsOptions = { skipEmpty: true, // skip empty params, e.g. "?x=&y2=" will be "?y=2" diff --git a/src/renderer/theme.store.ts b/src/renderer/theme.store.ts index f39a500c71..e78f5df20d 100644 --- a/src/renderer/theme.store.ts +++ b/src/renderer/theme.store.ts @@ -22,7 +22,7 @@ import { comparer, computed, makeObservable, observable, reaction } from "mobx"; import { autoBind, Singleton } from "./utils"; import { UserStore } from "../common/user-store"; -import logger from "../main/logger"; +import logger from "../common/logger"; import lensDarkThemeJson from "./themes/lens-dark.json"; import lensLightThemeJson from "./themes/lens-light.json"; import type { SelectOption } from "./components/select"; diff --git a/src/renderer/utils/createStorage.ts b/src/renderer/utils/createStorage.ts index c282994e61..3578a00503 100755 --- a/src/renderer/utils/createStorage.ts +++ b/src/renderer/utils/createStorage.ts @@ -25,7 +25,7 @@ import path from "path"; import { comparer, observable, reaction, toJS, when } from "mobx"; import fse from "fs-extra"; import { StorageHelper } from "./storageHelper"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { isTestEnv } from "../../common/vars"; const storage = observable({ diff --git a/src/renderer/utils/isMiddleClick.ts b/src/renderer/utils/isMiddleClick.ts index 1fcb3ccff8..436293e0c0 100644 --- a/src/renderer/utils/isMiddleClick.ts +++ b/src/renderer/utils/isMiddleClick.ts @@ -21,7 +21,7 @@ import type React from "react"; -// Helper for inlining middleClick checks +// Helper for inlining middleClick checks //
console.log('do some action'))}> // // @@ -29,7 +29,7 @@ import type React from "react"; export function isMiddleClick(callback: (evt: E) => any) { return function (evt: E) { - if(evt.button === 1) { + if (evt.button === 1) { return callback(evt); } }; diff --git a/src/renderer/utils/storageHelper.ts b/src/renderer/utils/storageHelper.ts index b5d5e6abde..070b0c946a 100755 --- a/src/renderer/utils/storageHelper.ts +++ b/src/renderer/utils/storageHelper.ts @@ -23,7 +23,7 @@ import { action, comparer, makeObservable, observable, toJS, when } from "mobx"; import { produce, Draft, isDraft } from "immer"; import { isEqual, isPlainObject } from "lodash"; -import logger from "../../main/logger"; +import logger from "../../common/logger"; import { getHostedClusterId } from "../../common/utils"; import path from "path"; import { AppPaths } from "../../common/app-paths"; diff --git a/webpack.main.ts b/webpack.main.ts index a3967dd071..e94a8f9440 100755 --- a/webpack.main.ts +++ b/webpack.main.ts @@ -28,11 +28,12 @@ import ProgressBarPlugin from "progress-bar-webpack-plugin"; import * as vars from "./src/common/vars"; import getTSLoader from "./src/common/getTSLoader"; import CircularDependencyPlugin from "circular-dependency-plugin"; +import logger from "./src/common/logger"; const configs: { (): webpack.Configuration }[] = []; configs.push((): webpack.Configuration => { - console.info("WEBPACK:main", vars); + logger.info("WEBPACK:main", vars); return { context: __dirname, diff --git a/webpack.renderer.ts b/webpack.renderer.ts index 8be6eb35dc..99a423409e 100755 --- a/webpack.renderer.ts +++ b/webpack.renderer.ts @@ -31,6 +31,7 @@ import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin"; import MonacoWebpackPlugin from "monaco-editor-webpack-plugin"; import getTSLoader from "./src/common/getTSLoader"; import CircularDependencyPlugin from "circular-dependency-plugin"; +import logger from "./src/common/logger"; export default [ webpackLensRenderer, @@ -38,7 +39,7 @@ export default [ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configuration { if (showVars) { - console.info("WEBPACK:renderer", vars); + logger.info("WEBPACK:renderer", vars); } return {