@@ -5,64 +5,58 @@ import { constructDeleteWorkload, constructDepGraph } from '../transmitter/paylo
55import { IWorkload , ILocalWorkloadLocator } from '../transmitter/types' ;
66import { IPullableImage } from './images/types' ;
77
8- export = class WorkloadWorker {
9- private readonly name : string ;
10-
11- constructor ( name : string ) {
12- this . name = name ;
8+ export async function processWorkload ( workloadMetadata : IWorkload [ ] ) : Promise < void > {
9+ // every workload metadata references the same workload name, grab it from the first one
10+ const workloadName = workloadMetadata [ 0 ] . name ;
11+ const allImages = workloadMetadata . map ( ( meta ) => meta . imageName ) ;
12+ logger . info ( { workloadName, imageCount : allImages . length } , 'queried workloads' ) ;
13+ const uniqueImages = [ ...new Set < string > ( allImages ) ] ;
14+
15+ logger . info ( { workloadName, imageCount : uniqueImages . length } , 'pulling unique images' ) ;
16+ const imagesWithFileSystemPath = getImagesWithFileSystemPath ( uniqueImages ) ;
17+ const pulledImages = await pullImages ( imagesWithFileSystemPath ) ;
18+ if ( pulledImages . length === 0 ) {
19+ logger . info ( { workloadName} , 'no images were pulled, halting scanner process.' ) ;
20+ return ;
1321 }
1422
15- public async process ( workloadMetadata : IWorkload [ ] ) : Promise < void > {
16- const workloadName = this . name ;
17- const allImages = workloadMetadata . map ( ( meta ) => meta . imageName ) ;
18- logger . info ( { workloadName, imageCount : allImages . length } , 'queried workloads' ) ;
19- const uniqueImages = [ ...new Set < string > ( allImages ) ] ;
20-
21- logger . info ( { workloadName, imageCount : uniqueImages . length } , 'pulling unique images' ) ;
22- const imagesWithFileSystemPath = getImagesWithFileSystemPath ( uniqueImages ) ;
23- const pulledImages = await pullImages ( imagesWithFileSystemPath ) ;
24- if ( pulledImages . length === 0 ) {
25- logger . info ( { workloadName} , 'no images were pulled, halting scanner process.' ) ;
26- return ;
27- }
28-
29- try {
30- await this . scanImagesAndSendResults ( workloadName , pulledImages , workloadMetadata ) ;
31- } finally {
32- await removePulledImages ( pulledImages ) ;
33- }
23+ try {
24+ await scanImagesAndSendResults ( workloadName , pulledImages , workloadMetadata ) ;
25+ } finally {
26+ await removePulledImages ( pulledImages ) ;
3427 }
35-
36- // TODO: should be extracted from here and moved to the supervisor
37- public async delete ( localWorkloadLocator : ILocalWorkloadLocator ) : Promise < void > {
38- const deletePayload = constructDeleteWorkload ( localWorkloadLocator ) ;
39- logger . info ( { workloadName : this . name , workload : localWorkloadLocator } ,
40- 'removing workloads from upstream' ) ;
41- await deleteWorkload ( deletePayload ) ;
28+ }
29+
30+ // TODO: should be extracted from here and moved to the supervisor
31+ export async function sendDeleteWorkloadRequest ( workloadName : string , localWorkloadLocator : ILocalWorkloadLocator ) : Promise < void > {
32+ const deletePayload = constructDeleteWorkload ( localWorkloadLocator ) ;
33+ logger . info ( { workloadName, workload : localWorkloadLocator } ,
34+ 'removing workloads from upstream' ) ;
35+ await deleteWorkload ( deletePayload ) ;
36+ }
37+
38+ async function scanImagesAndSendResults (
39+ workloadName : string ,
40+ pulledImages : IPullableImage [ ] ,
41+ workloadMetadata : IWorkload [ ] ,
42+ ) : Promise < void > {
43+ const scannedImages = await scanImages ( pulledImages ) ;
44+
45+ if ( scannedImages . length === 0 ) {
46+ logger . info ( { workloadName} , 'no images were scanned, halting scanner process.' ) ;
47+ return ;
4248 }
4349
44- private async scanImagesAndSendResults (
45- workloadName : string ,
46- pulledImages : IPullableImage [ ] ,
47- workloadMetadata : IWorkload [ ] ,
48- ) : Promise < void > {
49- const scannedImages = await scanImages ( pulledImages ) ;
50-
51- if ( scannedImages . length === 0 ) {
52- logger . info ( { workloadName} , 'no images were scanned, halting scanner process.' ) ;
53- return ;
54- }
50+ logger . info ( { workloadName, imageCount : scannedImages . length } , 'successfully scanned images' ) ;
5551
56- logger . info ( { workloadName, imageCount : scannedImages . length } , 'successfully scanned images' ) ;
52+ const depGraphPayloads = constructDepGraph ( scannedImages , workloadMetadata ) ;
53+ await sendDepGraph ( ...depGraphPayloads ) ;
5754
58- const depGraphPayloads = constructDepGraph ( scannedImages , workloadMetadata ) ;
59- await sendDepGraph ( ...depGraphPayloads ) ;
55+ const pulledImagesNames = pulledImages . map ( ( image ) => image . imageName ) ;
56+ const pulledImageMetadata = workloadMetadata . filter ( ( meta ) =>
57+ pulledImagesNames . includes ( meta . imageName ) ,
58+ ) ;
6059
61- const pulledImagesNames = pulledImages . map ( ( image ) => image . imageName ) ;
62- const pulledImageMetadata = workloadMetadata . filter ( ( meta ) =>
63- pulledImagesNames . includes ( meta . imageName ) ,
64- ) ;
60+ logger . info ( { workloadName, imageCount : pulledImageMetadata . length } , 'processed images' ) ;
61+ }
6562
66- logger . info ( { workloadName, imageCount : pulledImageMetadata . length } , 'processed images' ) ;
67- }
68- } ;
0 commit comments