1- import { V1Namespace } from '@kubernetes/client-node' ;
1+ import { KubernetesObject , V1Namespace } from '@kubernetes/client-node' ;
22import * as LruCache from 'lru-cache' ;
33
44import { config } from './common/config' ;
@@ -21,13 +21,103 @@ const workloadsLruCacheOptions = {
2121 updateAgeOnGet : false ,
2222} ;
2323
24- const state = {
24+ interface WorkloadAlreadyScanned {
25+ namespace : string ;
26+ type : string ;
27+ uid : string ;
28+ }
29+
30+ interface WorkloadImagesAlreadyScanned {
31+ namespace : string ;
32+ type : string ;
33+ uid : string ;
34+ imageIds : string [ ] ;
35+ }
36+
37+ function getWorkloadAlreadyScannedKey (
38+ workload : WorkloadAlreadyScanned ,
39+ ) : string {
40+ return `${ workload . namespace } /${ workload . type } /${ workload . uid } ` ;
41+ }
42+
43+ function getWorkloadImageAlreadyScannedKey (
44+ workload : WorkloadAlreadyScanned ,
45+ imageId : string ,
46+ ) : string {
47+ return `${ workload . namespace } /${ workload . type } /${ workload . uid } /${ imageId } ` ;
48+ }
49+
50+ export async function getWorkloadAlreadyScanned (
51+ workload : WorkloadAlreadyScanned ,
52+ ) : Promise < string | undefined > {
53+ const key = getWorkloadAlreadyScannedKey ( workload ) ;
54+ return state . workloadsAlreadyScanned . get ( key ) ;
55+ }
56+
57+ export async function setWorkloadAlreadyScanned (
58+ workload : WorkloadAlreadyScanned ,
59+ value : string ,
60+ ) : Promise < boolean > {
61+ const key = getWorkloadAlreadyScannedKey ( workload ) ;
62+ return state . workloadsAlreadyScanned . set ( key , value ) ;
63+ }
64+
65+ export async function deleteWorkloadAlreadyScanned (
66+ workload : WorkloadAlreadyScanned ,
67+ ) : Promise < void > {
68+ const key = getWorkloadAlreadyScannedKey ( workload ) ;
69+ state . workloadsAlreadyScanned . del ( key ) ;
70+ }
71+
72+ export async function getWorkloadImageAlreadyScanned (
73+ workload : WorkloadAlreadyScanned ,
74+ imageId : string ,
75+ ) : Promise < string | undefined > {
76+ const key = getWorkloadImageAlreadyScannedKey ( workload , imageId ) ;
77+ return state . imagesAlreadyScanned . get ( key ) ;
78+ }
79+
80+ export async function setWorkloadImageAlreadyScanned (
81+ workload : WorkloadAlreadyScanned ,
82+ imageId : string ,
83+ value : string ,
84+ ) : Promise < boolean > {
85+ const key = getWorkloadImageAlreadyScannedKey ( workload , imageId ) ;
86+ return state . imagesAlreadyScanned . set ( key , value ) ;
87+ }
88+
89+ export async function deleteWorkloadImagesAlreadyScanned (
90+ workload : WorkloadImagesAlreadyScanned ,
91+ ) : Promise < void > {
92+ for ( const imageId of workload . imageIds ) {
93+ const key = getWorkloadImageAlreadyScannedKey ( workload , imageId ) ;
94+ state . imagesAlreadyScanned . del ( key ) ;
95+ }
96+ }
97+
98+ export function kubernetesObjectToWorkloadAlreadyScanned (
99+ workload : KubernetesObject ,
100+ ) : WorkloadAlreadyScanned | undefined {
101+ if (
102+ workload . metadata &&
103+ workload . metadata . namespace &&
104+ workload . metadata . uid &&
105+ workload . kind
106+ ) {
107+ return {
108+ namespace : workload . metadata . namespace ,
109+ type : workload . kind ,
110+ uid : workload . metadata . uid ,
111+ } ;
112+ }
113+ return undefined ;
114+ }
115+
116+ export const state = {
25117 shutdownInProgress : false ,
26118 imagesAlreadyScanned : new LruCache < string , string > ( imagesLruCacheOptions ) ,
27119 workloadsAlreadyScanned : new LruCache < string , string > (
28120 workloadsLruCacheOptions ,
29121 ) ,
30122 watchedNamespaces : { } as Record < string , V1Namespace > ,
31123} ;
32-
33- export { state } ;
0 commit comments