Skip to content

Commit cc6a87f

Browse files
xingzhang-suseNickChungSUSE
authored andcommitted
Modifies routing path for images and vulnerabilities. Added 3rd implementation of installation page
1 parent dc66a99 commit cc6a87f

File tree

10 files changed

+117
-29
lines changed

10 files changed

+117
-29
lines changed

pkg/sbombastic-image-vulnerability-scanner/components/ImageDetails.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@
240240
<script>
241241
import SortableTable from "@shell/components/SortableTable";
242242
import { BadgeState } from '@components/BadgeState';
243-
import Checkbox from '@components/Form/Checkbox';
243+
import { Checkbox } from '@components/Form/Checkbox';
244244
import ScoreBadge from '@pkg/components/common/ScoreBadge';
245245
import BarChart from '@pkg/components/common/BarChart';
246246
import { VULNERABILITY_DETAILS_TABLE } from "@pkg/config/table-headers";
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ export default {
134134
<div v-if="!install" class="title p-10">
135135
<div class="logo mt-20 mb-10">
136136
<img
137-
src="../../../../assets/img/neuvector-logo.svg"
137+
src="../assets/img/neuvector-logo.svg"
138138
height="64"
139139
/>
140140
</div>
141-
<h1 class="mb-20" data-testid="nv-install-title">
141+
<h1 class="mb-20" data-testid="sb-install-title">
142142
{{ t("imageScanner.dashboard.appInstall.title") }}
143143
</h1>
144144
<div class="description">
@@ -157,7 +157,7 @@ export default {
157157
</Banner>
158158
</template>
159159
<template v-else>
160-
<button class="btn role-primary mt-20" data-testid="nv-app-install-button" :disabled="!controllerChart" @click.prevent="chartRoute">
160+
<button class="btn role-primary mt-20" data-testid="sb-app-install-button" :disabled="!controllerChart" @click.prevent="chartRoute">
161161
{{ t("imageScanner.dashboard.appInstall.button") }}
162162
</button>
163163
</template>
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<script>
2+
import InstallHelmCharts from '@shell/components/InstallHelmCharts';
3+
4+
export default {
5+
components: {
6+
InstallHelmCharts
7+
},
8+
};
9+
</script>
10+
11+
<template>
12+
<Loading v-if="$fetchState.pending" />
13+
<div v-else class="container">
14+
<div v-if="!install" class="title p-10">
15+
<div class="logo mt-20 mb-10">
16+
<img
17+
src="../assets/img/neuvector-logo.svg"
18+
height="64"
19+
/>
20+
</div>
21+
<h1 class="mb-20" data-testid="sb-install-title">
22+
{{ t("imageScanner.dashboard.appInstall.title") }}
23+
</h1>
24+
<div class="description">
25+
{{ t("imageScanner.dashboard.appInstall.description") }}
26+
</div>
27+
<InstallHelmCharts
28+
style="margin-top: 16px;"
29+
chart-name="sbombastic"
30+
repo-url="https://github.com/rancher-sandbox/sbombastic.git"
31+
repo-name="sbombastic"
32+
target-namespace="sbombastic"
33+
chart-display-name="sbombastic"
34+
repo-display-name="sbombastic"
35+
/>
36+
</div>
37+
</div>
38+
</template>
39+
40+
<style lang="scss" scoped>
41+
.container {
42+
& .title {
43+
display: flex;
44+
flex-wrap: wrap;
45+
flex-direction: column;
46+
justify-content: center;
47+
align-items: center;
48+
text-align: center;
49+
margin: 100px 0;
50+
}
51+
52+
& .description {
53+
line-height: 20px;
54+
}
55+
56+
& .chart-route {
57+
position: relative;
58+
}
59+
60+
& .airgap-align {
61+
justify-content: start;
62+
}
63+
}
64+
</style>

pkg/sbombastic-image-vulnerability-scanner/components/TopRiskyImagesChart.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Most affected images at risk
55
</div>
66
<div class="image-record" v-for="image in topRiskyImages">
7-
<RouterLink class="image-name" :to="`/c/${this.$route.params.cluster}/${ this.PRODUCT_NAME }/${ this.PAGE.IMAGE_DETAIL }/${ image.imageName }`">
7+
<RouterLink class="image-name" :to="`/c/${this.$route.params.cluster}/${ this.PRODUCT_NAME }/${ this.PAGE.IMAGES }/${ image.imageName }`">
88
{{ image.imageName }}
99
</RouterLink>
1010
<AmountBarBySeverity class="image-cve" :cveAmount="image.cveCnt"/>

pkg/sbombastic-image-vulnerability-scanner/config/sbombastic-image-vulnerability-scanner.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ export function init($plugin: any, store: any) {
4444

4545
virtualType({
4646
labelKey: 'imageScanner.images.title',
47-
name: PAGE.IMAGE_OVERVIEW,
47+
name: PAGE.IMAGES,
4848
namespaced: false,
4949
route: {
50-
name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGE_OVERVIEW}`,
50+
name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGES}`,
5151
params: {
5252
product: PRODUCT_NAME
5353
},
@@ -57,10 +57,10 @@ export function init($plugin: any, store: any) {
5757

5858
virtualType({
5959
labelKey: "imageScanner.vulnerabilities.title",
60-
name: PAGE.VULNERABILITY_OVERVIEW,
60+
name: PAGE.VULNERABILITIES,
6161
namespaced: false,
6262
route: {
63-
name: `c-cluster-${PRODUCT_NAME}-${PAGE.VULNERABILITY_OVERVIEW}`,
63+
name: `c-cluster-${PRODUCT_NAME}-${PAGE.VULNERABILITIES}`,
6464
params: {
6565
product: PRODUCT_NAME,
6666
},
@@ -95,14 +95,14 @@ export function init($plugin: any, store: any) {
9595
});
9696

9797
weightType(PAGE.DASHBOARD, 98, true);
98-
weightType(PAGE.IMAGE_OVERVIEW, 97, true);
99-
weightType(PAGE.VULNERABILITY_OVERVIEW, 96, true);
98+
weightType(PAGE.IMAGES, 97, true);
99+
weightType(PAGE.VULNERABILITIES, 96, true);
100100
weightType(PAGE.VEX_MANAGEMENT, 95, true);
101101

102102
basicType([
103-
PAGE.DASHBOARD,
104-
PAGE.IMAGE_OVERVIEW,
105-
PAGE.VULNERABILITY_OVERVIEW,
103+
PAGE.DASHBOARD,
104+
PAGE.IMAGES,
105+
PAGE.VULNERABILITIES,
106106
]);
107107
// Prepend spaces on group name, as Rancher 2.12 render group name algin with sidemenu
108108
basicType([PAGE.REGISTRIES, PAGE.VEX_MANAGEMENT], '&nbsp;&nbsp;&nbsp;&nbsp;Advanced');

pkg/sbombastic-image-vulnerability-scanner/formatters/ImageNameCell.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<RouterLink :to="`/c/${this.$route.params.cluster}/${ this.PRODUCT_NAME }/${ this.PAGE.IMAGE_DETAIL }/${ row.metadata.name }`">
2+
<RouterLink :to="`/c/${this.$route.params.cluster}/${ this.PRODUCT_NAME }/${ this.PAGE.IMAGES }/${ row.metadata.name }`">
33
{{ row.metadata.name }}
44
</RouterLink>
55
</template>

pkg/sbombastic-image-vulnerability-scanner/pages/c/_cluster/sbombastic-image-vulnerability-scanner/index.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
<script>
22
import Dashboard from '@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Dashboard';
3-
import Installation from '@pkg/pages/c/_cluster/sbombastic-image-vulnerability-scanner/Installation';
4-
import InstallView from '@pkg/components/InstallView';
53
import { SERVICE, SCHEMA } from '@shell/config/types';
64
import { RESOURCE } from '@pkg/types';
5+
import InstallView3 from '@pkg/components/InstallView3';
76
87
export default {
98
name: 'Entry',
109
11-
components: { Dashboard, Installation, InstallView },
10+
components: { Dashboard, InstallView3 },
1211
1312
async fetch() {
1413
console.log("Entry fetch")
@@ -25,6 +24,7 @@ export default {
2524
allServices: null,
2625
allSchemas: null,
2726
index: -1,
27+
store: this.$store,
2828
}
2929
},
3030
@@ -38,8 +38,8 @@ export default {
3838

3939
<template>
4040
<div v-if="allSchemas">
41-
<!-- <InstallView /> -->
42-
<InstallView v-if="!hasSchema" />
41+
<!-- <InstallView3 /> -->
42+
<InstallView3 v-if="!hasSchema" />
4343
<Dashboard v-else/>
4444
</div>
4545
</template>

pkg/sbombastic-image-vulnerability-scanner/routes/sbombastic-image-vulnerability-scanner-routes.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ const routes = [
2020
component: Entry,
2121
},
2222
{
23-
name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGE_OVERVIEW}`,
24-
path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.IMAGE_OVERVIEW}`,
23+
name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGES}`,
24+
path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.IMAGES}`,
2525
component: ImageOverview,
2626
},
2727
{
28-
name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGE_DETAIL}-id`,
29-
path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.IMAGE_DETAIL}/:id`,
28+
name: `c-cluster-${PRODUCT_NAME}-${PAGE.IMAGES}-id`,
29+
path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.IMAGES}/:id`,
3030
component: ImageDetails,
3131
},
3232
{
33-
name: `c-cluster-${PRODUCT_NAME}-${PAGE.VULNERABILITY_OVERVIEW}`,
34-
path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.VULNERABILITY_OVERVIEW}`,
33+
name: `c-cluster-${PRODUCT_NAME}-${PAGE.VULNERABILITIES}`,
34+
path: `/c/:cluster/${PRODUCT_NAME}/${PAGE.VULNERABILITIES}`,
3535
component: Vulnerabilities,
3636
},
3737
{

pkg/sbombastic-image-vulnerability-scanner/types/sbombastic-image-vulnerability-scanner.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ export const RESOURCE = {
1818
export const PAGE = {
1919
DASHBOARD: "dashboard",
2020
REGISTRIES: "registries",
21-
IMAGE_OVERVIEW: "image_overview",
22-
IMAGE_DETAIL: "image_detail",
23-
VULNERABILITY_OVERVIEW: "vulnerability_overview",
21+
IMAGES: "images",
22+
VULNERABILITIES: "vulnerabilities",
2423
CVE_DETAIL: "cve_detail",
2524
VEX_MANAGEMENT: "vex_management",
2625
};

pkg/sbombastic-image-vulnerability-scanner/utils/chart.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,28 @@ export function getLatestVersion(store: any, versions: any[]) {
8484

8585
return semver.rsort(versionMap)[0];
8686
}
87+
88+
export function getLatestStableVersion(versions: any[]): string | undefined {
89+
const allVersions = versions.map(v => v.version);
90+
const stableVersions = versions.filter(v => !v.version.includes('b'));
91+
92+
if ( isEmpty(stableVersions) && !isEmpty(allVersions) ) {
93+
return semver.rsort(allVersions)[0];
94+
}
95+
96+
return stableVersions?.sort((a, b) => {
97+
const versionA = a.version.split('.').map(Number);
98+
const versionB = b.version.split('.').map(Number);
99+
100+
for ( let i = 0; i < Math.max(versionA.length, versionB.length); i++ ) {
101+
if ( versionA[i] === undefined || versionA[i] < versionB[i] ) {
102+
return 1;
103+
}
104+
if ( versionB[i] === undefined || versionA[i] > versionB[i] ) {
105+
return -1;
106+
}
107+
}
108+
109+
return 0;
110+
})[0];
111+
}

0 commit comments

Comments
 (0)