diff --git a/pkg/sbombastic-image-vulnerability-scanner/components/TopSevereVulnerabilitiesChart.vue b/pkg/sbombastic-image-vulnerability-scanner/components/TopSevereVulnerabilitiesChart.vue index 7a8aa49..7813da2 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/components/TopSevereVulnerabilitiesChart.vue +++ b/pkg/sbombastic-image-vulnerability-scanner/components/TopSevereVulnerabilitiesChart.vue @@ -7,6 +7,7 @@ @@ -25,6 +26,10 @@ type: Array, required: true }, + eventHandler: { + type: Function, + default: null + } }, data() {} } diff --git a/pkg/sbombastic-image-vulnerability-scanner/components/common/SevereVulnerabilitiesItem.vue b/pkg/sbombastic-image-vulnerability-scanner/components/common/SevereVulnerabilitiesItem.vue index c2c5725..cb94e94 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/components/common/SevereVulnerabilitiesItem.vue +++ b/pkg/sbombastic-image-vulnerability-scanner/components/common/SevereVulnerabilitiesItem.vue @@ -10,6 +10,7 @@ @@ -31,6 +32,10 @@ type: Object, required: true }, + eventHandler: { + type: Function, + default: null + } }, data() { return { }; diff --git a/pkg/sbombastic-image-vulnerability-scanner/config/sbombastic-image-vulnerability-scanner.ts b/pkg/sbombastic-image-vulnerability-scanner/config/sbombastic-image-vulnerability-scanner.ts index 1b2a218..cefe2a9 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/config/sbombastic-image-vulnerability-scanner.ts +++ b/pkg/sbombastic-image-vulnerability-scanner/config/sbombastic-image-vulnerability-scanner.ts @@ -39,6 +39,19 @@ export function init($plugin: IPlugin, store: any) { } }); + virtualType({ + labelKey: "imageScanner.dashboard.title", + name: PAGE.DASHBOARD, + namespaced: false, + route: { + name: `c-cluster-${PRODUCT_NAME}-${PAGE.DASHBOARD}`, + params: { + product: PRODUCT_NAME, + }, + meta: { pkg: PRODUCT_NAME, product: PRODUCT_NAME }, + }, + }); + virtualType({ labelKey: "imageScanner.vulnerabilities.title", name: PAGE.VULNERABILITY_OVERVIEW, @@ -52,6 +65,19 @@ export function init($plugin: IPlugin, store: any) { }, }); + virtualType({ + labelKey: "imageScanner.vexManagement.title", + name: PAGE.VEX_MANAGEMENT, + namespaced: false, + route: { + name: `c-cluster-${PRODUCT_NAME}-${PAGE.VEX_MANAGEMENT}`, + params: { + product: PRODUCT_NAME, + }, + meta: { pkg: PRODUCT_NAME, product: PRODUCT_NAME }, + }, + }); + virtualType({ label: "Components Demo", name: "demo", @@ -66,11 +92,12 @@ export function init($plugin: IPlugin, store: any) { }); basicType([ + PAGE.DASHBOARD, PAGE.IMAGE_OVERVIEW, PAGE.VULNERABILITY_OVERVIEW, //"demo" ]); // Prepend spaces on group name, as Rancher 2.12 render group name algin with sidemenu - basicType([PAGE.REGISTRIES, RESOURCE.VEX_HUB], '    Advanced'); + basicType([PAGE.REGISTRIES, PAGE.VEX_MANAGEMENT, RESOURCE.VEX_HUB], '    Advanced'); } \ No newline at end of file diff --git a/pkg/sbombastic-image-vulnerability-scanner/l10n/en-us.yaml b/pkg/sbombastic-image-vulnerability-scanner/l10n/en-us.yaml index 8008825..adb4761 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/l10n/en-us.yaml +++ b/pkg/sbombastic-image-vulnerability-scanner/l10n/en-us.yaml @@ -1,6 +1,35 @@ product: imageScanner: Image Vulnerability Scanner imageScanner: + dashboard: + title: Dashboard + description: Main highlights and overview of image vulnerability scanning status + lastUpdated: Last updated + button: + refresh: Refresh + registryDropdown: + placeholder: All registries + vulnerabilityStats: + title: Affecting vulnerabilities distribution + critical: Critical + high: High + medium: Medium + low: Low + total: Total vulnerabilities + scanningStatus: + title: Scanning stats + lastScan: Last scan + totalImages: Total images + failedScans: Failed scans + errors: Errors + topVulnerabilities: + title: Most severe, affecting vulnerabilities + viewAll: View all + affectedImages: affected images + mostAffectedImages: + title: Most affected images at risk + viewAll: View all + totalVulns: total vulnerabilities registries: title: Registries configuration button: diff --git a/pkg/sbombastic-image-vulnerability-scanner/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Dashboard.vue b/pkg/sbombastic-image-vulnerability-scanner/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Dashboard.vue new file mode 100644 index 0000000..eaa0b1e --- /dev/null +++ b/pkg/sbombastic-image-vulnerability-scanner/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Dashboard.vue @@ -0,0 +1,979 @@ + + + + + \ No newline at end of file diff --git a/pkg/sbombastic-image-vulnerability-scanner/routes/sbombastic-image-vulnerability-scanner-routes.ts b/pkg/sbombastic-image-vulnerability-scanner/routes/sbombastic-image-vulnerability-scanner-routes.ts index 8c4781d..9e379eb 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/routes/sbombastic-image-vulnerability-scanner-routes.ts +++ b/pkg/sbombastic-image-vulnerability-scanner/routes/sbombastic-image-vulnerability-scanner-routes.ts @@ -1,5 +1,6 @@ import RegistryDetails from "@pkg/components/RegistryDetails.vue"; import ComponentDemo from "@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/ComponentDemo.vue"; +import Dashboard from "@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Dashboard.vue"; import ImageOverview from "@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/ImageOverview.vue"; import RegistriesConfiguration from "@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/RegistriesConfiguration.vue"; import Vulnerabilities from "@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Vulnerabilities.vue"; @@ -12,6 +13,11 @@ import { } from "@pkg/types"; const routes = [ + { + name: `c-cluster-${PRODUCT_NAME}-${PAGE.DASHBOARD}`, + path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.DASHBOARD}`, + component: Dashboard, + }, { name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGE_OVERVIEW}`, path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.IMAGE_OVERVIEW}`, @@ -32,6 +38,11 @@ const routes = [ path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.REGISTRIES}`, component: RegistriesConfiguration, }, + { + name: `c-cluster-${PRODUCT_NAME}-${PAGE.VEX_MANAGEMENT}`, + path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.VEX_MANAGEMENT}`, + component: VexManagement, + }, { name: `c-cluster-${PRODUCT_NAME}-${PAGE.REGISTRIES}-id`, path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.REGISTRIES}/:ns/:id`,