Skip to content

Commit 98a69d9

Browse files
xingzhang-suselsongsuse
authored andcommitted
Refactored fetch method, Changed the algorithom for previous status, Added common scan button component, Added refresh button on Registry ilst page
1 parent bcab396 commit 98a69d9

File tree

5 files changed

+207
-102
lines changed

5 files changed

+207
-102
lines changed

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

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,15 @@
2727
</div>
2828
<RancherMeta :properties="registryMetadata" />
2929
</div>
30-
<RegistryDetailScanTable :registry="registry" />
30+
Recent scans
31+
<ResourceTable
32+
:headers="headers"
33+
:rows="scanHistory"
34+
:namespaced="false"
35+
:rowActions="false"
36+
:search="false"
37+
class="table"
38+
/>
3139
</div>
3240
</template>
3341

@@ -38,7 +46,6 @@
3846
import RancherMeta from './common/RancherMeta.vue';
3947
import RegisterStatusBadge from './common/RegisterStatusBadge.vue';
4048
import { REGISTRY_SCAN_HISTORY_TABLE } from '@sbombastic-image-vulnerability-scanner/config/table-headers';
41-
import RegistryDetailScanTable from './RegistryDetailScanTable.vue';
4249
4350
export default {
4451
name: 'registryDetails',
@@ -47,15 +54,15 @@
4754
ResourceTable,
4855
RancherMeta,
4956
RegisterStatusBadge,
50-
RegistryDetailScanTable
5157
},
5258
data() {
5359
return {
5460
PRODUCT_NAME,
5561
RESOURCE,
56-
registry: null,
5762
registryStatus: null,
5863
registryMetadata: [],
64+
scanHistory: [],
65+
headers: REGISTRY_SCAN_HISTORY_TABLE
5966
}
6067
},
6168
async fetch() {
@@ -82,7 +89,7 @@
8289
{
8390
type: 'text',
8491
label: this.t('imageScanner.registries.configuration.meta.repositories'),
85-
value: registry.spec.repositories?.length || 0
92+
value: registry.spec.repositories.length
8693
},
8794
{
8895
type: 'text',
@@ -103,7 +110,19 @@
103110
}
104111
];
105112
106-
this.registry = registry;
113+
this.scanHistory = scanJobs.map((rec) => {
114+
rec.status.statusResult = rec.status.conditions.filter(condition => {
115+
return condition.status === "True";
116+
})[0] || {
117+
type: "Pending",
118+
lastTransitionTime: null,
119+
};
120+
rec.status['scannedImagesCount'] = this.$route.params.id === 'kw-controller' ? 1000 : 500;
121+
rec.status['imagesCount'] = 2000;
122+
return rec;
123+
});
124+
125+
console.log("Scan history:", this.scanHistory);
107126
},
108127
methods: {
109128
getRegistryStatus(registry) {
@@ -131,6 +150,10 @@
131150
gap: 24px;
132151
flex: 1 0 0;
133152
align-self: stretch;
153+
154+
.table {
155+
width: 100%;
156+
}
134157
}
135158
136159
.about {
@@ -179,7 +202,7 @@
179202
.resource-header-description {
180203
/* layout */
181204
display: flex;
182-
max-width: 900px;
205+
width: 900px;
183206
height: 21px;
184207
flex-direction: column;
185208
justify-content: center;

pkg/sbombastic-image-vulnerability-scanner/components/common/RegistryStatusUpdate.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
<div v-if="registryStatus.registryName" class="registry-status-record">
33
<RouterLink class="registry-name" :to="`/c/${this.$route.params.cluster}/${ this.PRODUCT_NAME }/${ this.PAGE.REGISTRIES }/${ registryStatus.namespace }/${ registryStatus.registryName }`">{{ registryStatus.registryName }}</RouterLink>
44
<div class="uri">{{ registryStatus.uri }}</div>
5-
<div class="prev-status"><RegisterStatusBadge :status="registryStatus.prevStatus"/></div>
5+
<div class="prev-status"><RegisterStatusBadge :status="registryStatus.prevScanStatus"/></div>
66
<div class="arrow"></div>
77
<div class="curr-status"><RegisterStatusBadge :status="registryStatus.currStatus"/></div>
8-
<div class="update-time">{{ `${updateTime(registryStatus.lastUpdateTime)}` }}</div>
8+
<div class="update-time">{{ `${statusUpdateTime(registryStatus.lastTransitionTime)}` }}</div>
99
</div>
1010
<div v-else class="registry-status-record">
1111
<div class="no-data"></div>
@@ -37,8 +37,8 @@
3737
};
3838
},
3939
methods: {
40-
updateTime(lastUpdateTime) {
41-
return elapsedTime(Math.ceil(Date.now() / 1000) - Math.ceil((new Date(lastUpdateTime).getTime() / 1000))).label + ' ' + this.t("imageScanner.general.ago");
40+
statusUpdateTime(lastTransitionTime) {
41+
return elapsedTime(Math.ceil(Date.now() / 1000) - Math.ceil((new Date(lastTransitionTime).getTime() / 1000))).label + ' ' + this.t("imageScanner.general.ago");
4242
}
4343
}
4444
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<template>
2+
<button
3+
class="btn role-primary"
4+
:disabled="!(selectedRegistries && selectedRegistries.length)"
5+
@click="startScan()"
6+
>
7+
<i class="icon icon-play"></i>
8+
{{ t('imageScanner.registries.button.startScan') || 'Enable' }}
9+
</button>
10+
</template>
11+
12+
<script>
13+
import { RESOURCE } from "@sbombastic-image-vulnerability-scanner/types";
14+
15+
export default {
16+
name: 'scanButton',
17+
props: {
18+
// Element object -> { name: string, namespace: string }
19+
selectedRegistries: {
20+
type: Array,
21+
default: () => []
22+
},
23+
reloadFn: {
24+
type: Function,
25+
default: () => {}
26+
}
27+
},
28+
methods: {
29+
async startScan() {
30+
if (!this.selectedRegistries || !this.selectedRegistries.length) {
31+
return;
32+
}
33+
this.selectedRegistries.forEach(async (registry) => {
34+
const scanjobObj = await this.$store.dispatch('cluster/create', {
35+
type: RESOURCE.SCAN_JOB,
36+
metadata: {
37+
generateName: registry.name,
38+
namespace: registry.namespace,
39+
},
40+
spec: {
41+
registry: registry.name,
42+
}
43+
});
44+
try {
45+
await scanjobObj.save();
46+
this.$store.dispatch('growl/success', {
47+
title: this.t('imageScanner.registries.messages.registryScanComplete'),
48+
message: this.t('imageScanner.registries.messages.registryScanComplete', { name: registry.name }),
49+
});
50+
} catch (e) {
51+
this.$store.dispatch('growl/error', {
52+
title: this.t('imageScanner.registries.messages.registryScanFailed'),
53+
message: e.message,
54+
});
55+
} finally {
56+
setTimeout(() => {
57+
this.reloadFn(true);
58+
}, 1000);
59+
}
60+
});
61+
},
62+
},
63+
}
64+
</script>

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ export default {
1313
},
1414
methods: {
1515
getStatusText(row) {
16-
return this.t(`imageScanner.enum.status.${row.prevStatus.toLowerCase()}`);
16+
return this.t(`imageScanner.enum.status.${row.prevScanStatus.toLowerCase()}`);
1717
},
1818
getStatusLabelClass(row) {
19-
return row.prevStatus.toLowerCase();
19+
return row.prevScanStatus.toLowerCase();
2020
},
2121
getStatusDotClass(row) {
22-
return `dot ${row.prevStatus.toLowerCase()}`;
22+
return `dot ${row.prevScanStatus.toLowerCase()}`;
2323
}
2424
}
2525
};

0 commit comments

Comments
 (0)