1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Add logging to startup

This commit is contained in:
Juho Heikka 2021-12-13 18:06:10 +02:00
parent 1d1a85f9ea
commit 72f975a258
5 changed files with 65 additions and 33 deletions

View File

@ -328,6 +328,8 @@ export class ExtensionDiscovery extends Singleton {
const extensions = await this.ensureExtensions();
console.log(`STARTUP ${new Date()} ensure extensions ready`);
this.isLoaded = true;
return extensions;
@ -387,14 +389,20 @@ export class ExtensionDiscovery extends Singleton {
async ensureExtensions(): Promise<Map<LensExtensionId, InstalledExtension>> {
const bundledExtensions = await this.loadBundledExtensions();
console.log(`STARTUP ${new Date()} const bundledExtensions = await this.loadBundledExtensions() ready`);
await this.installBundledPackages(this.packageJsonPath, bundledExtensions);
console.log(`STARTUP ${new Date()} await this.installBundledPackages(this.packageJsonPath, bundledExtensions);ready`);
const userExtensions = await this.loadFromFolder(this.localFolderPath, bundledExtensions.map((extension) => extension.manifest.name));
console.log(`STARTUP ${new Date()} await userExtensions = await this.loadFromFolder ready ${new Date()}`);
for (const extension of userExtensions) {
if ((await fse.pathExists(extension.manifestPath)) === false) {
try {
await this.installPackage(extension.absolutePath);
console.log(`STARTUP ${new Date()} install this.installPackage(${extension.absolutePath}); ready`);
} catch (error) {
const message = error.message || error || "unknown error";
const { name, version } = extension.manifest;
@ -403,6 +411,7 @@ export class ExtensionDiscovery extends Singleton {
}
}
}
console.log(`STARTUP ${new Date()} install ALL user extensions ready ${new Date()}`);
const extensions = bundledExtensions.concat(userExtensions);

View File

@ -62,7 +62,7 @@ export class ExtensionLoader extends Singleton {
protected instancesByName = observable.map<string, LensExtension>();
// IPC channel to broadcast changes to extensions from main
protected static readonly extensionsMainChannel = "extensions:main";
public static readonly extensionsMainChannel = "extensions:main";
// IPC channel to broadcast changes to extensions from renderer
protected static readonly extensionsRendererChannel = "extensions:renderer";
@ -73,7 +73,11 @@ export class ExtensionLoader extends Singleton {
@observable isLoaded = false;
get whenLoaded() {
return when(() => this.isLoaded);
return when(() => {
console.log(`STARTUP ExtensionLoader whenLoaded() when()`);
return this.isLoaded;
});
}
constructor() {
@ -146,7 +150,7 @@ export class ExtensionLoader extends Singleton {
}
await Promise.all([this.whenLoaded]);
console.log(`STARTUP await Promise.all([this.whenLoaded]);`);
// broadcasting extensions between main/renderer processes
reaction(() => this.toJSON(), () => this.broadcastExtensions(), {
fireImmediately: true,
@ -328,7 +332,7 @@ export class ExtensionLoader extends Singleton {
}
protected autoInitExtensions(register: (ext: LensExtension) => Promise<Disposer[]>) {
return reaction(() => this.toJSON(), installedExtensions => {
return reaction(() => this.toJSON(), async installedExtensions => {
for (const [extId, extension] of installedExtensions) {
const alreadyInit = this.instances.has(extId) || this.nonInstancesByName.has(extension.manifest.name);
@ -343,7 +347,8 @@ export class ExtensionLoader extends Singleton {
const instance = new LensExtensionClass(extension);
instance.enable(register);
await instance.enable(register);
console.log("STARTUP await instance.enable(register) returned");
this.instances.set(extId, instance);
} catch (err) {
logger.error(`${logModule}: activation extension error`, { ext: extension, err });

View File

@ -88,11 +88,13 @@ export class LensExtension {
}
try {
logger.info(`STARTUP LENS Extension enable ${new Date()}`);
await this.onActivate();
this.isEnabled = true;
this[Disposers].push(...await register(this));
logger.info(`[EXTENSION]: enabled ${this.name}@${this.version}`);
logger.info(`STARTUP LENS Extension enabled ${new Date()}`);
} catch (error) {
logger.error(`[EXTENSION]: failed to activate ${this.name}@${this.version}: ${error}`);
}

View File

@ -42,7 +42,7 @@ import type { LensExtensionId } from "../extensions/lens-extension";
import { installDeveloperTools } from "./developer-tools";
import { LensProtocolRouterMain } from "./protocol-handler";
import { disposer, getAppVersion, getAppVersionFromProxyServer, storedKubeConfigFolder } from "../common/utils";
import { bindBroadcastHandlers, ipcMainOn } from "../common/ipc";
import { bindBroadcastHandlers, broadcastMessage, ipcMainOn } from "../common/ipc";
import { startUpdateChecking } from "./app-updater";
import { IpcRendererNavigationEvents } from "../renderer/navigation/events";
import { pushCatalogToRenderer } from "./catalog-pusher";
@ -248,39 +248,51 @@ app.on("ready", async () => {
windowManager.ensureMainWindow();
}
const initExtensions = async () => {
logger.info("🧩 Initializing extensions");
// call after windowManager to see splash earlier
try {
const extensions = await extensionDiscovery.load();
logger.info(`STARTUP ${new Date()} await extensionDiscovery.load() `);
// Start watching after bundled extensions are loaded
await extensionDiscovery.watchExtensions();
logger.info(`STARTUP ${new Date()} extensionDiscovery.watchExtensions()`);
// Subscribe to extensions that are copied or deleted to/from the extensions folder
extensionDiscovery.events
.on("add", (extension: InstalledExtension) => {
ExtensionLoader.getInstance().addExtension(extension);
})
.on("remove", (lensExtensionId: LensExtensionId) => {
ExtensionLoader.getInstance().removeExtension(lensExtensionId);
});
ExtensionLoader.getInstance().initExtensions(extensions);
logger.info(`STARTUP ${new Date()} 🧩 Initializing extensions done ExtensionLoader.getInstance().initExtensions(extensions)`);
} catch (error) {
dialog.showErrorBox("Lens Error", `Could not load extensions${error?.message ? `: ${error.message}` : ""}`);
console.error(error);
console.trace();
}
};
ipcMainOn(IpcRendererNavigationEvents.LOADED, async () => {
onCloseCleanup.push(pushCatalogToRenderer(catalogEntityRegistry));
await ensureDir(storedKubeConfigFolder());
KubeconfigSyncManager.getInstance().startSync();
logger.info(`STARTUP LENS Init extensions start ${new Date()}`);
await initExtensions();
logger.info(`STARTUP LENS Init extensions end ${new Date()}`);
startUpdateChecking();
LensProtocolRouterMain.getInstance().rendererLoaded = true;
console.log(`STARTUP LENS EXTENSIONS:LOADED ${new Date()}`);
broadcastMessage("EXTENSIONS:LOADED");
});
logger.info("🧩 Initializing extensions");
// call after windowManager to see splash earlier
try {
const extensions = await extensionDiscovery.load();
// Start watching after bundled extensions are loaded
extensionDiscovery.watchExtensions();
// Subscribe to extensions that are copied or deleted to/from the extensions folder
extensionDiscovery.events
.on("add", (extension: InstalledExtension) => {
ExtensionLoader.getInstance().addExtension(extension);
})
.on("remove", (lensExtensionId: LensExtensionId) => {
ExtensionLoader.getInstance().removeExtension(lensExtensionId);
});
ExtensionLoader.getInstance().initExtensions(extensions);
} catch (error) {
dialog.showErrorBox("Lens Error", `Could not load extensions${error?.message ? `: ${error.message}` : ""}`);
console.error(error);
console.trace();
}
setTimeout(() => {
appEventBus.emit({ name: "service", action: "start" });
}, 1000);

View File

@ -176,7 +176,10 @@ export class WindowManager extends Singleton {
if (!this.mainWindow) {
viewHasLoaded = new Promise<void>(resolve => {
ipcMain.once(IpcRendererNavigationEvents.LOADED, () => resolve());
ipcMain.once("EXTENSIONS:LOADED", () => {
logger.info(`STARTUP LENS EXTENSIONS:LOADED: ${showSplash} ${new Date()}`);
resolve();
} );
});
await this.initMainWindow(showSplash);
}
@ -185,8 +188,9 @@ export class WindowManager extends Singleton {
await viewHasLoaded;
await delay(50); // wait just a bit longer to let the first round of rendering happen
logger.info("[WINDOW-MANAGER]: Main window has reported that it has loaded");
logger.info(`STARTUP LENS view has loaded let's show mainWindow ${new Date()}`);
this.mainWindow.show();
logger.info(`STARTUP LENS let's close the splashWindow ${new Date()}`);
this.splashWindow?.close();
this.splashWindow = undefined;
setTimeout(() => {