+ clusterFeatures = [
+ {
+ title: "Metrics Stack",
+ components: {
+ Description: () => {
+ return (
+
Enable timeseries data visualization (Prometheus stack) for your cluster.
Install this only if you don't have existing Prometheus stack installed.
You can see preview of manifests here.
- )
- }
- },
- feature: new MetricsFeature()
- }
- ]
- }
+ )
+ }
+ },
+ feature: new MetricsFeature()
+ }
+ ]
}
diff --git a/extensions/node-menu/renderer.tsx b/extensions/node-menu/renderer.tsx
index 1b721d946c..db8232a518 100644
--- a/extensions/node-menu/renderer.tsx
+++ b/extensions/node-menu/renderer.tsx
@@ -3,19 +3,13 @@ import React from "react"
import { NodeMenu, NodeMenuProps } from "./src/node-menu"
export default class NodeMenuRendererExtension extends LensRendererExtension {
- async onActivate() {
- console.log("node-menu extension activated")
- }
-
- registerKubeObjectMenus() {
- return [
- {
- kind: "Node",
- apiVersions: ["v1"],
- components: {
- MenuItem: (props: NodeMenuProps) =>
- }
+ kubeObjectMenuItems = [
+ {
+ kind: "Node",
+ apiVersions: ["v1"],
+ components: {
+ MenuItem: (props: NodeMenuProps) =>
}
- ]
- }
+ }
+ ]
}
diff --git a/extensions/pod-menu/renderer.tsx b/extensions/pod-menu/renderer.tsx
index aa5534056a..30898da806 100644
--- a/extensions/pod-menu/renderer.tsx
+++ b/extensions/pod-menu/renderer.tsx
@@ -4,26 +4,20 @@ import { PodLogsMenu, PodLogsMenuProps } from "./src/logs-menu"
import React from "react"
export default class PodMenuRendererExtension extends LensRendererExtension {
- async onActivate() {
- console.log("pod-menu extension activated")
- }
-
- registerKubeObjectMenus() {
- return [
- {
- kind: "Pod",
- apiVersions: ["v1"],
- components: {
- MenuItem: (props: PodShellMenuProps) =>
- }
- },
- {
- kind: "Pod",
- apiVersions: ["v1"],
- components: {
- MenuItem: (props: PodLogsMenuProps) =>
- }
+ kubeObjectMenuItems = [
+ {
+ kind: "Pod",
+ apiVersions: ["v1"],
+ components: {
+ MenuItem: (props: PodShellMenuProps) =>
}
- ]
- }
+ },
+ {
+ kind: "Pod",
+ apiVersions: ["v1"],
+ components: {
+ MenuItem: (props: PodLogsMenuProps) =>
+ }
+ }
+ ]
}
diff --git a/extensions/support-page/main.ts b/extensions/support-page/main.ts
index ae4dd24c5e..af30ebf0cd 100644
--- a/extensions/support-page/main.ts
+++ b/extensions/support-page/main.ts
@@ -2,22 +2,16 @@ import { LensMainExtension, windowManager } from "@k8slens/extensions";
import { supportPageURL } from "./src/support.route";
export default class SupportPageMainExtension extends LensMainExtension {
- async onActivate() {
- console.log("support page extension activated")
- }
-
- registerAppMenus() {
- return [
- {
- parentId: "help",
- label: "Support",
- click() {
- windowManager.navigate({
- channel: "menu:navigate", // fixme: use windowManager.ensureMainWindow from Tray's PR
- url: supportPageURL(),
- });
- }
+ appMenus = [
+ {
+ parentId: "help",
+ label: "Support",
+ click() {
+ windowManager.navigate({
+ channel: "menu:navigate", // fixme: use windowManager.ensureMainWindow from Tray's PR
+ url: supportPageURL(),
+ });
}
- ]
- }
+ }
+ ]
}
diff --git a/extensions/support-page/renderer.tsx b/extensions/support-page/renderer.tsx
index dcb9581c8e..9f52a972bf 100644
--- a/extensions/support-page/renderer.tsx
+++ b/extensions/support-page/renderer.tsx
@@ -4,36 +4,28 @@ import { supportPageRoute, supportPageURL } from "./src/support.route";
import { Support } from "./src/support";
export default class SupportPageRendererExtension extends LensRendererExtension {
- async onActivate() {
- console.log("support page extension activated")
- }
-
- registerGlobalPages() {
- return [
- {
- ...supportPageRoute,
- url: supportPageURL(),
- hideInMenu: true,
- components: {
- Page: Support,
- }
+ globalPages = [
+ {
+ ...supportPageRoute,
+ url: supportPageURL(),
+ hideInMenu: true,
+ components: {
+ Page: Support,
}
- ]
- }
+ }
+ ]
- registerStatusBarItems() {
- return [
- {
- item: (
- Navigation.navigate(supportPageURL())}
- >
-
- Support
-
- )
- }
- ]
- }
+ statusBarItems = [
+ {
+ item: (
+ Navigation.navigate(supportPageURL())}
+ >
+
+ Support
+
+ )
+ }
+ ]
}
diff --git a/extensions/telemetry/renderer.tsx b/extensions/telemetry/renderer.tsx
index 549d2e541c..04057386bf 100644
--- a/extensions/telemetry/renderer.tsx
+++ b/extensions/telemetry/renderer.tsx
@@ -5,25 +5,19 @@ import { tracker } from "./src/tracker"
import React from "react"
export default class TelemetryRendererExtension extends LensRendererExtension {
+ appPreferences = [
+ {
+ title: "Telemetry & Usage Tracking",
+ components: {
+ Hint: () => ,
+ Input: () =>
+ }
+ }
+ ];
+
async onActivate() {
console.log("telemetry extension activated")
tracker.start()
await telemetryPreferencesStore.loadExtension(this)
}
-
- registerAppPreferences() {
- return [
- {
- title: "Telemetry & Usage Tracking",
- components: {
- Hint: () => ,
- Input: () =>
- }
- }
- ]
- }
-
- onDeactivate() {
- console.log("telemetry extension deactivated")
- }
}
diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts
index 86f65a008b..c0b2d5ada6 100644
--- a/src/extensions/extension-loader.ts
+++ b/src/extensions/extension-loader.ts
@@ -37,25 +37,25 @@ export class ExtensionLoader {
loadOnMain() {
logger.info('[EXTENSIONS-LOADER]: load on main')
this.autoloadExtensions((extension: LensMainExtension) => {
- extension.register(menuRegistry, extension.registerAppMenus())
+ extension.registerTo(menuRegistry, extension.appMenus)
})
}
loadOnClusterManagerRenderer() {
logger.info('[EXTENSIONS-LOADER]: load on main renderer (cluster manager)')
this.autoloadExtensions((extension: LensRendererExtension) => {
- extension.register(globalPageRegistry, extension.registerGlobalPages())
- extension.register(appPreferenceRegistry, extension.registerAppPreferences())
- extension.register(clusterFeatureRegistry, extension.registerClusterFeatures())
- extension.register(statusBarRegistry, extension.registerStatusBarItems())
+ extension.registerTo(globalPageRegistry, extension.globalPages)
+ extension.registerTo(appPreferenceRegistry, extension.appPreferences)
+ extension.registerTo(clusterFeatureRegistry, extension.clusterFeatures)
+ extension.registerTo(statusBarRegistry, extension.statusBarItems)
})
}
loadOnClusterRenderer() {
logger.info('[EXTENSIONS-LOADER]: load on cluster renderer (dashboard)')
this.autoloadExtensions((extension: LensRendererExtension) => {
- extension.register(clusterPageRegistry, extension.registerClusterPages())
- extension.register(kubeObjectMenuRegistry, extension.registerKubeObjectMenus())
+ extension.registerTo(clusterPageRegistry, extension.clusterPages)
+ extension.registerTo(kubeObjectMenuRegistry, extension.kubeObjectMenuItems)
})
}
diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts
index b8aba8c6a3..0921dc066a 100644
--- a/src/extensions/lens-extension.ts
+++ b/src/extensions/lens-extension.ts
@@ -78,8 +78,8 @@ export class LensExtension implements ExtensionModel {
// mock
}
- register(registry: BaseRegistry, registryItems: T[]) {
- const disposers = registryItems.map(item => registry.add(item));
+ registerTo(registry: BaseRegistry, items: T[] = []) {
+ const disposers = items.map(item => registry.add(item));
this.disposers.push(...disposers);
return () => {
this.disposers = this.disposers.filter(disposer => !disposers.includes(disposer))
diff --git a/src/extensions/lens-main-extension.ts b/src/extensions/lens-main-extension.ts
index 9fda0e9c11..8e300bda77 100644
--- a/src/extensions/lens-main-extension.ts
+++ b/src/extensions/lens-main-extension.ts
@@ -1,12 +1,7 @@
-import { LensExtension } from "./lens-extension"
import type { MenuRegistration } from "./registries/menu-registry";
+import { observable } from "mobx";
+import { LensExtension } from "./lens-extension"
export class LensMainExtension extends LensExtension {
- registerAppMenus(): MenuRegistration[] {
- return []
- }
-
- registerPrometheusProviders(): any[] {
- return []
- }
+ @observable.shallow appMenus: MenuRegistration[] = []
}
diff --git a/src/extensions/lens-renderer-extension.ts b/src/extensions/lens-renderer-extension.ts
index 3ed446f392..829079d0f0 100644
--- a/src/extensions/lens-renderer-extension.ts
+++ b/src/extensions/lens-renderer-extension.ts
@@ -1,28 +1,12 @@
-import { LensExtension } from "./lens-extension"
import type { AppPreferenceRegistration, ClusterFeatureRegistration, KubeObjectMenuRegistration, PageRegistration, StatusBarRegistration } from "./registries"
+import { observable } from "mobx";
+import { LensExtension } from "./lens-extension"
export class LensRendererExtension extends LensExtension {
- registerGlobalPages(): PageRegistration[] {
- return []
- }
-
- registerClusterPages(): PageRegistration[] {
- return []
- }
-
- registerAppPreferences(): AppPreferenceRegistration[] {
- return []
- }
-
- registerClusterFeatures(): ClusterFeatureRegistration[] {
- return []
- }
-
- registerStatusBarItems(): StatusBarRegistration[] {
- return []
- }
-
- registerKubeObjectMenus(): KubeObjectMenuRegistration[] {
- return []
- }
+ @observable.shallow globalPages: PageRegistration[] = []
+ @observable.shallow clusterPages: PageRegistration[] = []
+ @observable.shallow appPreferences: AppPreferenceRegistration[] = []
+ @observable.shallow clusterFeatures: ClusterFeatureRegistration[] = []
+ @observable.shallow statusBarItems: StatusBarRegistration[] = []
+ @observable.shallow kubeObjectMenuItems: KubeObjectMenuRegistration[] = []
}