mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
fix: loading cluster frame + error in loading terminal default font (which was causing network exception error and hidden cluster-view)
fix: proxying websockets (e.g. terminal) Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
parent
8a6ef6c9f0
commit
2ef9861d10
@ -10,7 +10,7 @@ import * as Mobx from "mobx";
|
|||||||
import * as LensExtensionsCommonApi from "../extensions/common-api";
|
import * as LensExtensionsCommonApi from "../extensions/common-api";
|
||||||
import * as LensExtensionsMainApi from "../extensions/main-api";
|
import * as LensExtensionsMainApi from "../extensions/main-api";
|
||||||
import { app, autoUpdater, dialog, powerMonitor } from "electron";
|
import { app, autoUpdater, dialog, powerMonitor } from "electron";
|
||||||
import { appName, isIntegrationTesting, isMac, isWindows, productName, isDevelopment } from "../common/vars";
|
import { appName, isIntegrationTesting, isMac, isWindows, productName } from "../common/vars";
|
||||||
import { LensProxy } from "./lens-proxy";
|
import { LensProxy } from "./lens-proxy";
|
||||||
import { WindowManager } from "./window-manager";
|
import { WindowManager } from "./window-manager";
|
||||||
import { ClusterManager } from "./cluster-manager";
|
import { ClusterManager } from "./cluster-manager";
|
||||||
@ -43,16 +43,23 @@ import { initTray } from "./tray/tray";
|
|||||||
import { ShellSession } from "./shell-session/shell-session";
|
import { ShellSession } from "./shell-session/shell-session";
|
||||||
import { getDi } from "./getDi";
|
import { getDi } from "./getDi";
|
||||||
import extensionLoaderInjectable from "../extensions/extension-loader/extension-loader.injectable";
|
import extensionLoaderInjectable from "../extensions/extension-loader/extension-loader.injectable";
|
||||||
import lensProtocolRouterMainInjectable from "./protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable";
|
import lensProtocolRouterMainInjectable
|
||||||
import extensionDiscoveryInjectable from "../extensions/extension-discovery/extension-discovery.injectable";
|
from "./protocol-handler/lens-protocol-router-main/lens-protocol-router-main.injectable";
|
||||||
import directoryForExesInjectable from "../common/app-paths/directory-for-exes/directory-for-exes.injectable";
|
import extensionDiscoveryInjectable
|
||||||
import initIpcMainHandlersInjectable from "./initializers/init-ipc-main-handlers/init-ipc-main-handlers.injectable";
|
from "../extensions/extension-discovery/extension-discovery.injectable";
|
||||||
|
import directoryForExesInjectable
|
||||||
|
from "../common/app-paths/directory-for-exes/directory-for-exes.injectable";
|
||||||
|
import initIpcMainHandlersInjectable
|
||||||
|
from "./initializers/init-ipc-main-handlers/init-ipc-main-handlers.injectable";
|
||||||
import electronMenuItemsInjectable from "./menu/electron-menu-items.injectable";
|
import electronMenuItemsInjectable from "./menu/electron-menu-items.injectable";
|
||||||
import directoryForKubeConfigsInjectable from "../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
|
import directoryForKubeConfigsInjectable
|
||||||
import kubeconfigSyncManagerInjectable from "./catalog-sources/kubeconfig-sync-manager/kubeconfig-sync-manager.injectable";
|
from "../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
|
||||||
|
import kubeconfigSyncManagerInjectable
|
||||||
|
from "./catalog-sources/kubeconfig-sync-manager/kubeconfig-sync-manager.injectable";
|
||||||
import clusterStoreInjectable from "../common/cluster-store/cluster-store.injectable";
|
import clusterStoreInjectable from "../common/cluster-store/cluster-store.injectable";
|
||||||
import routerInjectable from "./router/router.injectable";
|
import routerInjectable from "./router/router.injectable";
|
||||||
import shellApiRequestInjectable from "./proxy-functions/shell-api-request/shell-api-request.injectable";
|
import shellApiRequestInjectable
|
||||||
|
from "./proxy-functions/shell-api-request/shell-api-request.injectable";
|
||||||
import userStoreInjectable from "../common/user-store/user-store.injectable";
|
import userStoreInjectable from "../common/user-store/user-store.injectable";
|
||||||
import trayMenuItemsInjectable from "./tray/tray-menu-items.injectable";
|
import trayMenuItemsInjectable from "./tray/tray-menu-items.injectable";
|
||||||
import { createDevServer } from "../../webpack.dev-server";
|
import { createDevServer } from "../../webpack.dev-server";
|
||||||
@ -170,6 +177,7 @@ di.runSetups().then(() => {
|
|||||||
kubeApiRequest,
|
kubeApiRequest,
|
||||||
shellApiRequest,
|
shellApiRequest,
|
||||||
});
|
});
|
||||||
|
const devServer = createDevServer(lensProxy.port);
|
||||||
|
|
||||||
ClusterManager.createInstance().init();
|
ClusterManager.createInstance().init();
|
||||||
|
|
||||||
@ -177,7 +185,10 @@ di.runSetups().then(() => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
logger.info("🔌 Starting LensProxy");
|
logger.info("🔌 Starting LensProxy");
|
||||||
await lensProxy.listen();
|
await Promise.all([
|
||||||
|
lensProxy.listen(),
|
||||||
|
devServer?.start(),
|
||||||
|
]);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
dialog.showErrorBox("Lens Error", `Could not start proxy: ${error?.message || "unknown error"}`);
|
dialog.showErrorBox("Lens Error", `Could not start proxy: ${error?.message || "unknown error"}`);
|
||||||
|
|
||||||
@ -228,10 +239,8 @@ di.runSetups().then(() => {
|
|||||||
|
|
||||||
logger.info("🖥️ Starting WindowManager");
|
logger.info("🖥️ Starting WindowManager");
|
||||||
const windowManager = WindowManager.createInstance();
|
const windowManager = WindowManager.createInstance();
|
||||||
|
if (devServer) {
|
||||||
if (isDevelopment) {
|
// override main content view url to local webpack-dev-server to support HMR / live-reload
|
||||||
const devServer = createDevServer(lensProxy.port);
|
|
||||||
await devServer.start(); // waiting dev-server to start
|
|
||||||
windowManager.mainContentUrl = `http://localhost:${devServer.options.port}`;
|
windowManager.mainContentUrl = `http://localhost:${devServer.options.port}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -136,7 +136,14 @@ export async function bootstrap(di: DependencyInjectionContainer) {
|
|||||||
App = (await import("./frames/cluster-frame/cluster-frame")).ClusterFrame;
|
App = (await import("./frames/cluster-frame/cluster-frame")).ClusterFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
await initializeApp(rootElem);
|
try {
|
||||||
|
await initializeApp(rootElem);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`[BOOTSTRAP]: view initialization error: ${error}`, {
|
||||||
|
origin: location.href,
|
||||||
|
isTopFrameView: process.isMainFrame,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
render(
|
render(
|
||||||
<DiContextProvider value={{ di }}>
|
<DiContextProvider value={{ di }}>
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import { UserStore } from "../../../../common/user-store";
|
|||||||
import { clipboard } from "electron";
|
import { clipboard } from "electron";
|
||||||
import logger from "../../../../common/logger";
|
import logger from "../../../../common/logger";
|
||||||
import type { TerminalConfig } from "../../../../common/user-store/preferences-helpers";
|
import type { TerminalConfig } from "../../../../common/user-store/preferences-helpers";
|
||||||
|
import RobotoMonoFontUrl from "../../fonts/roboto-mono-nerd.ttf";
|
||||||
|
|
||||||
export class Terminal {
|
export class Terminal {
|
||||||
private terminalConfig: TerminalConfig = UserStore.getInstance().terminalConfig;
|
private terminalConfig: TerminalConfig = UserStore.getInstance().terminalConfig;
|
||||||
@ -26,11 +27,14 @@ export class Terminal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async preloadFonts() {
|
static async preloadFonts() {
|
||||||
const fontPath = require("../../fonts/roboto-mono-nerd.ttf").default; // eslint-disable-line @typescript-eslint/no-var-requires
|
try {
|
||||||
const fontFace = new FontFace(defaultTerminalFontFamily, `url(${fontPath})`);
|
const fontFace = new FontFace(defaultTerminalFontFamily, `url(${RobotoMonoFontUrl})`);
|
||||||
|
|
||||||
await fontFace.load();
|
await fontFace.load();
|
||||||
document.fonts.add(fontFace);
|
document.fonts.add(fontFace);
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(`[TERMINAL]: preloading default font failed`, error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private xterm: XTerm | null = new XTerm({
|
private xterm: XTerm | null = new XTerm({
|
||||||
|
|||||||
@ -6,9 +6,11 @@
|
|||||||
import Webpack from "webpack";
|
import Webpack from "webpack";
|
||||||
import WebpackDevServer from "webpack-dev-server";
|
import WebpackDevServer from "webpack-dev-server";
|
||||||
import { webpackLensRenderer } from "./webpack.renderer";
|
import { webpackLensRenderer } from "./webpack.renderer";
|
||||||
import { buildDir, webpackDevServerPort } from "./src/common/vars";
|
import { buildDir, isDevelopment, webpackDevServerPort } from "./src/common/vars";
|
||||||
import logger from "./src/common/logger";
|
import logger from "./src/common/logger";
|
||||||
import { getClusterIdFromHost } from "./src/common/utils";
|
|
||||||
|
export interface DevServer extends WebpackDevServer {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates `webpack-dev-server`
|
* Creates `webpack-dev-server`
|
||||||
@ -16,11 +18,18 @@ import { getClusterIdFromHost } from "./src/common/utils";
|
|||||||
* @url https://webpack.js.org/configuration/dev-server/
|
* @url https://webpack.js.org/configuration/dev-server/
|
||||||
* @url https://github.com/chimurai/http-proxy-middleware
|
* @url https://github.com/chimurai/http-proxy-middleware
|
||||||
*/
|
*/
|
||||||
export function createDevServer(lensProxyPort: number): WebpackDevServer {
|
export function createDevServer(lensProxyPort: number): DevServer | undefined {
|
||||||
|
if (!isDevelopment) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
const config = webpackLensRenderer();
|
const config = webpackLensRenderer();
|
||||||
const compiler = Webpack(config);
|
const compiler = Webpack(config);
|
||||||
|
|
||||||
const server = new WebpackDevServer({
|
const server = new WebpackDevServer({
|
||||||
|
headers: {
|
||||||
|
"Access-Control-Allow-Origin": "*",
|
||||||
|
},
|
||||||
allowedHosts: "all",
|
allowedHosts: "all",
|
||||||
host: "localhost",
|
host: "localhost",
|
||||||
port: webpackDevServerPort,
|
port: webpackDevServerPort,
|
||||||
@ -29,17 +38,13 @@ export function createDevServer(lensProxyPort: number): WebpackDevServer {
|
|||||||
proxy: {
|
proxy: {
|
||||||
'*': {
|
'*': {
|
||||||
router(req) {
|
router(req) {
|
||||||
logger.info(`[WEBPACK-DEV-SERVER]: proxy path ${req.path}`, req.headers);
|
logger.silly(`[WEBPACK-DEV-SERVER]: proxy path ${req.path}`, req.headers);
|
||||||
|
|
||||||
const clusterId = getClusterIdFromHost(req.headers.host);
|
|
||||||
if (clusterId) {
|
|
||||||
return `http://${clusterId}.localhost:${lensProxyPort}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return `http://localhost:${lensProxyPort}`;
|
return `http://localhost:${lensProxyPort}`;
|
||||||
},
|
},
|
||||||
secure: false, // allow http connections
|
secure: false, // allow http connections
|
||||||
logLevel: "debug",
|
ws: true, // proxy websockets, e.g. terminal
|
||||||
|
logLevel: "error",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
client: {
|
client: {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user