11import { V1Pod , V1PodList } from '@kubernetes/client-node' ;
22import { IncomingMessage } from 'http' ;
3- import * as async from 'async' ;
43
54import { logger } from '../../../common/logger' ;
6- import { config } from '../../../common/config' ;
7- import { processWorkload } from '../../../scanner' ;
85import { sendWorkloadMetadata } from '../../../transmitter' ;
9- import { IWorkload , Telemetry } from '../../../transmitter/types' ;
6+ import { IWorkload } from '../../../transmitter/types' ;
107import { constructWorkloadMetadata } from '../../../transmitter/payload' ;
118import { buildMetadataForWorkload } from '../../metadata-extractor' ;
129import { PodPhase } from '../types' ;
@@ -25,70 +22,7 @@ import { deleteWorkload } from './workload';
2522import { k8sApi } from '../../cluster' ;
2623import { paginatedClusterList , paginatedNamespacedList } from './pagination' ;
2724import { trimWorkload } from '../../workload-sanitization' ;
28-
29- export interface ImagesToScanQueueData {
30- workloadMetadata : IWorkload [ ] ;
31- /** The timestamp when this workload was added to the image scan queue. */
32- enqueueTimestampMs : number ;
33- }
34-
35- async function queueWorkerWorkloadScan (
36- task : ImagesToScanQueueData ,
37- callback ,
38- ) : Promise < void > {
39- const { workloadMetadata, enqueueTimestampMs } = task ;
40- /** Represents how long this workload spent waiting in the queue to be processed. */
41- const enqueueDurationMs = Date . now ( ) - enqueueTimestampMs ;
42- const telemetry : Partial < Telemetry > = {
43- enqueueDurationMs,
44- queueSize : workloadsToScanQueue . length ( ) ,
45- } ;
46- try {
47- await processWorkload ( workloadMetadata , telemetry ) ;
48- } catch ( err ) {
49- logger . error (
50- { err, task } ,
51- 'error processing a workload in the pod handler 2' ,
52- ) ;
53- const imageIds = workloadMetadata . map ( ( workload ) => workload . imageId ) ;
54- const workload = {
55- // every workload metadata references the same workload, grab it from the first one
56- ...workloadMetadata [ 0 ] ,
57- imageIds,
58- } ;
59- await deleteWorkloadImagesAlreadyScanned ( workload ) ;
60- }
61- }
62-
63- const workloadsToScanQueue = async . queue < ImagesToScanQueueData > (
64- queueWorkerWorkloadScan ,
65- config . WORKERS_COUNT ,
66- ) ;
67-
68- workloadsToScanQueue . error ( function ( err , task ) {
69- logger . error (
70- { err, task } ,
71- 'error processing a workload in the pod handler 1' ,
72- ) ;
73- } ) ;
74-
75- function reportQueueSize ( ) : void {
76- try {
77- const queueDataToReport : { [ key : string ] : any } = { } ;
78- queueDataToReport . workloadsToScanLength = workloadsToScanQueue . length ( ) ;
79- logger . debug ( queueDataToReport , 'queue sizes report' ) ;
80- } catch ( err ) {
81- logger . debug ( { err } , 'failed logging queue sizes' ) ;
82- }
83- }
84-
85- // Report the queue size shortly after the snyk-monitor starts.
86- setTimeout ( reportQueueSize , 1 * 60 * 1000 ) . unref ( ) ;
87- // Additionally, periodically report every X minutes.
88- setInterval (
89- reportQueueSize ,
90- config . QUEUE_LENGTH_LOG_FREQUENCY_MINUTES * 60 * 1000 ,
91- ) . unref ( ) ;
25+ import { deleteWorkloadFromScanQueue , workloadsToScanQueue } from './queue' ;
9226
9327async function handleReadyPod ( workloadMetadata : IWorkload [ ] ) : Promise < void > {
9428 const workloadToScan : IWorkload [ ] = [ ] ;
@@ -111,8 +45,10 @@ async function handleReadyPod(workloadMetadata: IWorkload[]): Promise<void> {
11145 workloadToScan . push ( workload ) ;
11246 }
11347
48+ const workload = workloadToScan [ 0 ] ;
11449 if ( workloadToScan . length > 0 ) {
11550 workloadsToScanQueue . push ( {
51+ key : workload . uid ,
11652 workloadMetadata : workloadToScan ,
11753 enqueueTimestampMs : Date . now ( ) ,
11854 } ) ;
@@ -223,6 +159,7 @@ export async function podDeletedHandler(pod: V1Pod): Promise<void> {
223159 . filter ( ( container ) => container . image !== undefined )
224160 . map ( ( container ) => container . image ! ) ,
225161 } ) ,
162+ deleteWorkloadFromScanQueue ( workloadAlreadyScanned ) ,
226163 ] ) ;
227164 }
228165
0 commit comments