Skip to content

Commit

Permalink
refactor: Source code layout for workloads (#61)
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Pacak <pacak.daniel@gmail.com>
  • Loading branch information
danielpacak authored Oct 8, 2021
1 parent 1f12194 commit 847cbda
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 56 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@aquasecurity/starboard-lens-extension",
"publisher": "aquasecurity.github.io",
"version": "0.2.0",
"version": "0.3.0",
"description": "Lens extension for viewing Starboard security information",
"homepage": "https://github.com/aquasecurity/starboard-lens-extension",
"repository": {
Expand Down
24 changes: 12 additions & 12 deletions renderer.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import {Renderer} from "@k8slens/extensions";
import React from "react"
import {WorkloadVulnerabilities} from "./src/components/workload-vulnerabilities";
import {WorkloadConfigAudit} from "./src/components/workload-configaudit";
import {ClusterVulnerabilityReportPage, VulnerabilityReportPage} from "./src/vulnerabilityreports/page";
import {ClusterVulnerabilityReport, VulnerabilityReport} from "./src/vulnerabilityreports/types";
import {
Expand All @@ -26,6 +24,8 @@ import {CISKubeBenchReportsPage} from "./src/ciskubebenchreports/page";
import {CISKubeBenchReport} from "./src/ciskubebenchreports/types";
import {NodeBenchmarks} from "./src/ciskubebenchreports/node-benchmarks";
import {CISKubeBenchReportDetails, CISKubeBenchReportDetailsProps} from "./src/ciskubebenchreports/details";
import {WorkloadConfigAuditReports} from "./src/workloads/configauditreports";
import {WorkloadVulnerabilityReports} from "./src/workloads/vulnerabilityreports";

export function CertificateIcon(props: Renderer.Component.IconProps) {
return <Renderer.Component.Icon {...props} material="security"/>
Expand Down Expand Up @@ -149,8 +149,8 @@ export default class StarboardExtension extends Renderer.LensExtension {
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) =>
<React.Fragment>
<WorkloadConfigAudit {...props} />
<WorkloadVulnerabilities {...props}/>
<WorkloadConfigAuditReports {...props} />
<WorkloadVulnerabilityReports {...props}/>
</React.Fragment>
}
},
Expand All @@ -161,8 +161,8 @@ export default class StarboardExtension extends Renderer.LensExtension {
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) =>
<React.Fragment>
<WorkloadConfigAudit {...props} />
<WorkloadVulnerabilities {...props}/>
<WorkloadConfigAuditReports {...props} />
<WorkloadVulnerabilityReports {...props}/>
</React.Fragment>
}
},
Expand All @@ -173,8 +173,8 @@ export default class StarboardExtension extends Renderer.LensExtension {
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) =>
<React.Fragment>
<WorkloadConfigAudit {...props} />
<WorkloadVulnerabilities {...props}/>
<WorkloadConfigAuditReports {...props} />
<WorkloadVulnerabilityReports {...props}/>
</React.Fragment>
}
},
Expand All @@ -185,8 +185,8 @@ export default class StarboardExtension extends Renderer.LensExtension {
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) =>
<React.Fragment>
<WorkloadConfigAudit {...props} />
<WorkloadVulnerabilities {...props}/>
<WorkloadConfigAuditReports {...props} />
<WorkloadVulnerabilityReports {...props}/>
</React.Fragment>
}
},
Expand All @@ -197,8 +197,8 @@ export default class StarboardExtension extends Renderer.LensExtension {
components: {
Details: (props: Renderer.Component.KubeObjectDetailsProps) =>
<React.Fragment>
<WorkloadConfigAudit {...props} />
<WorkloadVulnerabilities {...props}/>
<WorkloadConfigAuditReports {...props} />
<WorkloadVulnerabilityReports {...props}/>
</React.Fragment>
}
},
Expand Down
6 changes: 3 additions & 3 deletions src/ciskubebenchreports/node-benchmarks.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import React from "react";
import {Renderer} from "@k8slens/extensions";
import {cisKubeBenchReportsStore} from "../ciskubebenchreports/store";
import {CISKubeBenchReportDetails} from "../ciskubebenchreports/details";
import {store} from "./store";
import {CISKubeBenchReportDetails} from "./details";

export class NodeBenchmarks extends React.Component<Renderer.Component.KubeObjectDetailsProps> {

render() {
const {object: node} = this.props;

const report = cisKubeBenchReportsStore.getByName(node.getName())
const report = store.getByName(node.getName())

return (
<div>
Expand Down
4 changes: 2 additions & 2 deletions src/ciskubebenchreports/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {Renderer} from "@k8slens/extensions";
import React from "react";
import {cisKubeBenchReportsStore} from "./store";
import {store} from "./store";
import {CISKubeBenchReport} from "./types";

enum sortBy {
Expand All @@ -17,7 +17,7 @@ export class CISKubeBenchReportsPage extends React.Component<{ extension: Render
return (
<Renderer.Component.KubeObjectListLayout
tableId="kubeBenchReportsTable"
className="CISKubeBenchReportsList" store={cisKubeBenchReportsStore}
className="CISKubeBenchReportsList" store={store}
sortingCallbacks={{
[sortBy.name]: (report: CISKubeBenchReport) => report.getName(),
[sortBy.fail]: (report: CISKubeBenchReport) => report.report.summary.failCount,
Expand Down
16 changes: 7 additions & 9 deletions src/ciskubebenchreports/store.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import {Renderer} from "@k8slens/extensions";
import {CISKubeBenchReport} from "./types";

export class CISKubeBenchReportsApi extends Renderer.K8sApi.KubeApi<CISKubeBenchReport> {
export class Api extends Renderer.K8sApi.KubeApi<CISKubeBenchReport> {
}

export const cisKubeBenchReportsApi = new CISKubeBenchReportsApi({
objectConstructor: CISKubeBenchReport
});

export class CISKubeBenchReportsStore extends Renderer.K8sApi.KubeObjectStore<CISKubeBenchReport> {
api = cisKubeBenchReportsApi
export class Store extends Renderer.K8sApi.KubeObjectStore<CISKubeBenchReport> {
api = new Api({
objectConstructor: CISKubeBenchReport
})
}

export const cisKubeBenchReportsStore = new CISKubeBenchReportsStore();
export const store = new Store();

Renderer.K8sApi.apiManager.registerStore(cisKubeBenchReportsStore);
Renderer.K8sApi.apiManager.registerStore(store);
9 changes: 3 additions & 6 deletions src/vulnerabilityreports/page.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {Renderer} from "@k8slens/extensions";
import React from "react";
import {ClusterVulnerabilityReport, VulnerabilityReport} from "./types";
import {clusterVulnerabilityReportsStore, vulnerabilityReportsStore} from "./store";
import {clusterStore, store} from "./store";

enum sortBy {
name = "name",
Expand All @@ -19,10 +19,9 @@ export class ClusterVulnerabilityReportPage extends React.Component<{ extension:
return (
<Renderer.Component.KubeObjectListLayout
tableId="clusterVulnerabilityReportsTable"
className="ClusterVulnerabilityReports" store={clusterVulnerabilityReportsStore}
className="ClusterVulnerabilityReports" store={clusterStore}
sortingCallbacks={{
[sortBy.name]: (report: ClusterVulnerabilityReport) => report.getName(),
[sortBy.namespace]: (report: ClusterVulnerabilityReport) => report.metadata.namespace,
[sortBy.critical]: (report: ClusterVulnerabilityReport) => report.report.summary.criticalCount,
[sortBy.high]: (report: ClusterVulnerabilityReport) => report.report.summary.highCount,
[sortBy.medium]: (report: ClusterVulnerabilityReport) => report.report.summary.mediumCount,
Expand All @@ -35,7 +34,6 @@ export class ClusterVulnerabilityReportPage extends React.Component<{ extension:
renderHeaderTitle="ClusterVulnerabilityReports"
renderTableHeader={[
{title: "Name", className: "name", sortBy: sortBy.name},
{title: "Namespace", className: "namespace", sortBy: sortBy.namespace},
{title: "Scanner", className: "scanner"},
{title: "Image", className: "repository"},
{title: "Critical", className: "critical", sortBy: sortBy.critical},
Expand All @@ -46,7 +44,6 @@ export class ClusterVulnerabilityReportPage extends React.Component<{ extension:
]}
renderTableContents={(report: ClusterVulnerabilityReport) => [
report.getName(),
report.metadata.namespace,
report.report.scanner.name + " " + report.report.scanner.version,
report.report.artifact.repository + ":" + report.report.artifact.tag,
report.report.summary.criticalCount,
Expand All @@ -66,7 +63,7 @@ export class VulnerabilityReportPage extends React.Component<{ extension: Render
return (
<Renderer.Component.KubeObjectListLayout
tableId="vulnerabilityReportsTable"
className="VulnerabilityReports" store={vulnerabilityReportsStore}
className="VulnerabilityReports" store={store}
sortingCallbacks={{
[sortBy.name]: (report: VulnerabilityReport) => report.getName(),
[sortBy.namespace]: (report: VulnerabilityReport) => report.metadata.namespace,
Expand Down
30 changes: 13 additions & 17 deletions src/vulnerabilityreports/store.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,26 @@
import {Renderer} from "@k8slens/extensions";
import {ClusterVulnerabilityReport, VulnerabilityReport} from "./types";

export class ClusterVulnerabilityReportsApi extends Renderer.K8sApi.KubeApi<ClusterVulnerabilityReport> {
export class ClusterApi extends Renderer.K8sApi.KubeApi<ClusterVulnerabilityReport> {
}

export const clusterVulnerabilityReportsApi = new ClusterVulnerabilityReportsApi({
objectConstructor: ClusterVulnerabilityReport
})

export class ClusterVulnerabilityReportsStore extends Renderer.K8sApi.KubeObjectStore<ClusterVulnerabilityReport> {
api = clusterVulnerabilityReportsApi
export class ClusterStore extends Renderer.K8sApi.KubeObjectStore<ClusterVulnerabilityReport> {
api = new ClusterApi({
objectConstructor: ClusterVulnerabilityReport
})
}

export class VulnerabilityReportsApi extends Renderer.K8sApi.KubeApi<VulnerabilityReport> {
export class Api extends Renderer.K8sApi.KubeApi<VulnerabilityReport> {
}

export const vulnerabilityReportsApi = new VulnerabilityReportsApi({
objectConstructor: VulnerabilityReport
});

export class Store extends Renderer.K8sApi.KubeObjectStore<VulnerabilityReport> {
api = vulnerabilityReportsApi
api = new Api({
objectConstructor: VulnerabilityReport
})
}

export const vulnerabilityReportsStore = new Store();
export const clusterVulnerabilityReportsStore = new ClusterVulnerabilityReportsStore();
export const store = new Store();
export const clusterStore = new ClusterStore();

Renderer.K8sApi.apiManager.registerStore(vulnerabilityReportsStore);
Renderer.K8sApi.apiManager.registerStore(clusterVulnerabilityReportsStore);
Renderer.K8sApi.apiManager.registerStore(store);
Renderer.K8sApi.apiManager.registerStore(clusterStore);
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {ConfigAuditReportDetails} from "../configauditreports/details";
* This component is trying to lookup the ConfigAuditReport associated with the
* specified Kubernetes workload and then render it.
*/
export class WorkloadConfigAudit extends React.Component<Renderer.Component.KubeObjectDetailsProps> {
export class WorkloadConfigAuditReports extends React.Component<Renderer.Component.KubeObjectDetailsProps> {

render() {
const {object: workload} = this.props;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import {Renderer} from "@k8slens/extensions";
import React from "react";
import {vulnerabilityReportsStore} from "../vulnerabilityreports/store";
import {store} from "../vulnerabilityreports/store";
import {VulnerabilityReportDetails} from "../vulnerabilityreports/details";

// This component is trying to lookup the VulnerabilityReports associated with the
// specified Kubernetes workload and then render those reports.
export class WorkloadVulnerabilities extends React.Component<Renderer.Component.KubeObjectDetailsProps> {
export class WorkloadVulnerabilityReports extends React.Component<Renderer.Component.KubeObjectDetailsProps> {

render() {
const {object: workload} = this.props;
Expand All @@ -16,7 +16,7 @@ export class WorkloadVulnerabilities extends React.Component<Renderer.Component.
"starboard.resource.namespace=" + workload.getNs()
];

const vulnerabilityReports = vulnerabilityReportsStore.getByLabel(selector)
const vulnerabilityReports = store.getByLabel(selector)

return (
<div>
Expand Down

0 comments on commit 847cbda

Please sign in to comment.