import React from "react"
import { reaction } from "mobx";
import { Renderer, Common } from "@k8slens/extensions";
import { IpcRenderer } from "./src/ipc/renderer";
import { Logger } from "./src/utils/logger";
import {
ClusterPageIcon,
ClusterPage,
KubescapeWorkloadDetails
} from "./src/components";
import {
KubescapePreferenceStore,
KubescapeReportStore
} from "./src/stores";
import { scanClusterTask } from "./src/kubescape/clusterScan";
export default class KubescapeExtension extends Renderer.LensExtension {
clusterPages = [
{
id: "kubescape-main",
components: {
Page: () => ,
}
}
]
/* Sidebar menu */
clusterPageMenus = [
{
target: { pageId: "kubescape-main" },
title: "Kubescape",
components: {
Icon: ClusterPageIcon,
}
}
]
/* workload object details */
kubeObjectDetailItems = [
{
kind: "Node",
apiVersions: ["v1"],
priority: 9,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "Pod",
apiVersions: ["v1"],
priority: 10,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "Deployment",
apiVersions: ["apps/v1"],
priority: 10,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "DaemonSet",
apiVersions: ["apps/v1"],
priority: 10,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "StatefulSet",
apiVersions: ["apps/v1"],
priority: 10,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "ReplicaSet",
apiVersions: ["apps/v1"],
priority: 10,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "ServiceAccount",
apiVersions: ["v1"],
priority: 10,
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
}
},
{
kind: "CronJob",
apiVersions: ["batch/v1beta1"],
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) => {...props} />
},
},
]
// appPreferences = [
// {
// title: "Kubescape Preferences",
// components: {
// Hint: () => ,
// Input: () =>
// }
// }
// ]
disposers = []
async onActivate() {
Logger.debug("Kubescape activated");
const ipc = IpcRenderer.createInstance(this);
const preferenceStore = KubescapePreferenceStore.createInstance();
preferenceStore.loadExtension(this);
const reportStore = KubescapeReportStore.createInstance();
reportStore.loadExtension(this);
this.disposers.push(reaction(() => Renderer.Catalog.catalogEntities.activeEntity, async () => await scanClusterTask(preferenceStore, reportStore, ipc)));
this.disposers.push(reaction(() => preferenceStore.isInstalled, async () => await scanClusterTask(preferenceStore, reportStore, ipc)));
}
async onDeactivate() {
Logger.debug("Kubescape deactivated");
this.disposers.forEach((disposer) => disposer());
}
}