diff --git a/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue b/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue
index 6d2ccf6..ac10cad 100644
--- a/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue
+++ b/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue
@@ -24,6 +24,13 @@
{{ t('imageScanner.general.refresh') }}
+
@@ -36,6 +43,7 @@
import { BadgeState } from '@rancher/components';
import { PRODUCT_NAME, RESOURCE, PAGE } from '@sbombastic-image-vulnerability-scanner/types';
import ResourceTable from "@shell/components/ResourceTable";
+ import ActionMenu from '@shell/components/ActionMenuShell.vue';
import RancherMeta from './common/RancherMeta.vue';
import RegisterStatusBadge from './common/RegisterStatusBadge.vue';
import RegistryDetailScanTable from './RegistryDetailScanTable.vue';
@@ -49,13 +57,15 @@
RancherMeta,
RegisterStatusBadge,
RegistryDetailScanTable,
- ScanButton
+ ScanButton,
+ ActionMenu
},
data() {
return {
PRODUCT_NAME,
RESOURCE,
PAGE,
+ registry: null,
registryStatus: null,
registryMetadata: [],
scanHistory: [],
@@ -103,7 +113,7 @@
},
{
type: 'text',
- value: registry.metadata.schedule || '',
+ value: registry.spec.scanInterval || '',
}
];
@@ -122,6 +132,7 @@
}
})
});
+ this.registry = registry;
},
getRegistryStatus(registry) {
if (!registry || !registry.status || !registry.status.conditions || !registry.status.conditions.length) {
@@ -217,6 +228,17 @@
display: flex;
align-items: center;
gap: 16px;
+
+ &:deep() button[data-testid="masthead-action-menu"] {
+ border-radius: 4px;
+ width: 35px;
+ height: 40px;
+
+ display: inline-flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ }
}
}
}
diff --git a/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts b/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts
index 88720e4..2e944e7 100644
--- a/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts
+++ b/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts
@@ -65,7 +65,7 @@ export const REGISTRY_SCAN_HISTORY_TABLE = [
labelKey: "imageScanner.registries.configuration.scanTable.header.status",
value: "status.statusResult.type",
formatter: "RegistryStatusCellBadge",
- sort: "status",
+ sort: "status.statusResult.type",
width: 100,
},
{
@@ -73,13 +73,13 @@ export const REGISTRY_SCAN_HISTORY_TABLE = [
labelKey: "imageScanner.registries.configuration.scanTable.header.since",
value: "status.statusResult.lastTransitionTime",
formatter: "Date",
- sort: "timestamp",
+ sort: "status.statusResult.lastTransitionTime:desc",
},
{
name: "progress",
labelKey: "imageScanner.registries.configuration.scanTable.header.progress",
getValue: (row: any) => row,
- formatter: "ProgressCell",
+ formatter: "Progress",
sort: "progress",
},
{
@@ -87,14 +87,14 @@ export const REGISTRY_SCAN_HISTORY_TABLE = [
labelKey:
"imageScanner.registries.configuration.scanTable.header.imagesScanned",
value: "status.scannedImagesCount",
- sort: "imagesScanned",
+ sort: "status.scannedImagesCount",
},
{
name: "imagesFound",
labelKey:
"imageScanner.registries.configuration.scanTable.header.imagesFound",
value: "status.imagesCount",
- sort: "imagesFound",
+ sort: "status.imagesCount",
},
{
name: "errors",
@@ -133,7 +133,7 @@ export const VEX_MANAGEMENT_TABLE = [
labelKey: "imageScanner.vexManagement.table.headers.createdBy",
value: (row: any) => {
const gen = Number(row?.metadata?.generation);
- return (gen === 1) ? 'Rancher' : 'Manual entry';
+ return gen === 1 ? "Rancher" : "Manual entry";
},
sort: "metadata.generation",
},
diff --git a/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js b/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js
index fae1199..ae0b95a 100644
--- a/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js
+++ b/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js
@@ -7,6 +7,11 @@ export default class Registry extends SteveModel {
console.log("Registry _availableActions");
const out = super._availableActions.filter(action => !['download','downloadYaml'].includes(action.action));
+ // In details page, we don't want to show the scan action
+ if (this.$rootState.targetRoute && 'id' in this.$rootState.targetRoute.params) {
+ return out;
+ }
+
const scanAction = {
action: 'scanRegistry',
label: this.t('imageScanner.registries.button.startScan'),