diff --git a/extensions/metrics-cluster-feature/renderer.tsx b/extensions/metrics-cluster-feature/renderer.tsx
index 3d22906d97..dcc6243052 100644
--- a/extensions/metrics-cluster-feature/renderer.tsx
+++ b/extensions/metrics-cluster-feature/renderer.tsx
@@ -1,12 +1,24 @@
import { Registry, LensRendererExtension } from "@k8slens/extensions"
import { MetricsFeature } from "./src/metrics-feature"
+import React from "react"
export default class ClusterMetricsFeatureExtension extends LensRendererExtension {
registerClusterFeatures(registry: Registry.ClusterFeatureRegistry) {
this.disposers.push(
registry.add({
title: "Metrics Stack",
- description: "Enable timeseries data visualization (Prometheus stack) for your cluster.",
+ 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()
})
)
diff --git a/src/extensions/cluster-feature-registry.ts b/src/extensions/cluster-feature-registry.ts
index fa6fd3db45..900498f48b 100644
--- a/src/extensions/cluster-feature-registry.ts
+++ b/src/extensions/cluster-feature-registry.ts
@@ -1,10 +1,14 @@
import { observable } from "mobx"
-import { Feature } from "../main/feature";
+import { ClusterFeature } from "./cluster-feature";
+
+export interface ClusterFeatureComponents {
+ Description: React.ComponentType;
+}
export interface ClusterFeatureRegistration {
title: string;
- description: string;
- feature: Feature
+ components: ClusterFeatureComponents
+ feature: ClusterFeature
}
export class ClusterFeatureRegistry {
diff --git a/src/main/feature.ts b/src/extensions/cluster-feature.ts
similarity index 80%
rename from src/main/feature.ts
rename to src/extensions/cluster-feature.ts
index 59400da15a..08904750e2 100644
--- a/src/main/feature.ts
+++ b/src/extensions/cluster-feature.ts
@@ -2,25 +2,25 @@ import fs from "fs";
import path from "path"
import hb from "handlebars"
import { observable } from "mobx"
-import { ResourceApplier } from "./resource-applier"
-import { Cluster } from "./cluster";
-import logger from "./logger";
+import { ResourceApplier } from "../main/resource-applier"
+import { Cluster } from "../main/cluster";
+import logger from "../main/logger";
import { app } from "electron"
import { clusterIpc } from "../common/cluster-ipc"
-export interface FeatureStatus {
+export interface ClusterFeatureStatus {
currentVersion: string;
installed: boolean;
latestVersion: string;
canUpgrade: boolean;
}
-export abstract class Feature {
+export abstract class ClusterFeature {
name: string;
latestVersion: string;
config: any;
- @observable status: FeatureStatus = {
+ @observable status: ClusterFeatureStatus = {
currentVersion: null,
installed: false,
latestVersion: null,
@@ -33,7 +33,7 @@ export abstract class Feature {
abstract async uninstall(cluster: Cluster): Promise;
- abstract async updateStatus(cluster: Cluster): Promise;
+ abstract async updateStatus(cluster: Cluster): Promise;
protected async applyResources(cluster: Cluster, resources: string[]) {
if (app) {
diff --git a/src/extensions/core-api/cluster-feature.ts b/src/extensions/core-api/cluster-feature.ts
index 319256e924..f06eba1436 100644
--- a/src/extensions/core-api/cluster-feature.ts
+++ b/src/extensions/core-api/cluster-feature.ts
@@ -1 +1 @@
-export { Feature, FeatureStatus } from "../../main/feature"
+export { ClusterFeature as Feature, ClusterFeatureStatus as FeatureStatus } from "../cluster-feature"
diff --git a/src/renderer/components/+cluster-settings/components/install-feature.tsx b/src/renderer/components/+cluster-settings/components/install-feature.tsx
index 98201ea9b3..adfc8f2b5f 100644
--- a/src/renderer/components/+cluster-settings/components/install-feature.tsx
+++ b/src/renderer/components/+cluster-settings/components/install-feature.tsx
@@ -5,17 +5,18 @@ import { Cluster } from "../../../../main/cluster";
import { Button } from "../../button";
import { Notifications } from "../../notifications";
import { Spinner } from "../../spinner";
-import { Feature } from "../../../../main/feature";
+import { ClusterFeature } from "../../../../extensions/cluster-feature";
import { interval } from "../../../utils";
interface Props {
cluster: Cluster
- feature: Feature
+ feature: ClusterFeature
}
@observer
export class InstallFeature extends React.Component {
@observable loading = false;
+ @observable message = "";
componentDidMount() {
const feature = this.props.feature
@@ -32,6 +33,7 @@ export class InstallFeature extends React.Component {
disposeOnUnmount(this,
reaction(() => feature.status.installed, () => {
this.loading = false;
+ this.message = ""
}, { equals: comparer.structural })
);
}
@@ -57,9 +59,10 @@ export class InstallFeature extends React.Component {
@@ -68,15 +71,17 @@ export class InstallFeature extends React.Component {
}
{loadingIcon}
{!cluster.isAdmin && Actions can only be performed by admins.}
+ {cluster.isAdmin && this.loading && this.message !== "" && {this.message}}
);
}
diff --git a/src/renderer/components/+cluster-settings/features.tsx b/src/renderer/components/+cluster-settings/features.tsx
index 162f8f26fc..943e190123 100644
--- a/src/renderer/components/+cluster-settings/features.tsx
+++ b/src/renderer/components/+cluster-settings/features.tsx
@@ -19,7 +19,7 @@ export class Features extends React.Component {
<>
- {f.description}
+
>
)