in packages/web-api-scan-request-sender/src/sender/scan-request-selector.ts [65:108]
private async filterRequests(filteredScanRequests: ScanRequests, scanRequests: OnDemandPageScanRequest[]): Promise<void> {
await Promise.all(
scanRequests.map(async (scanRequest) => {
const scanResult = await this.onDemandPageScanRunResultProvider.readScanRun(scanRequest.id);
if (scanResult === undefined) {
filteredScanRequests.toDelete.push({ request: scanRequest, condition: 'notFound' });
return;
}
if (scanResult.run.state === 'completed') {
filteredScanRequests.toDelete.push({ request: scanRequest, condition: 'completed' });
return;
}
if (scanResult.run.retryCount >= this.maxFailedScanRetryCount) {
filteredScanRequests.toDelete.push({ request: scanRequest, condition: 'noRetry' });
return;
}
if (
scanResult.run.state === 'accepted' &&
(scanResult.run.retryCount === undefined || scanResult.run.retryCount < this.maxFailedScanRetryCount)
) {
filteredScanRequests.toQueue.push({ request: scanRequest, result: scanResult, condition: 'accepted' });
return;
}
if (
(scanResult.run.state === 'queued' || scanResult.run.state === 'running' || scanResult.run.state === 'failed') && // terminated or failed
(scanResult.run.retryCount === undefined || scanResult.run.retryCount < this.maxFailedScanRetryCount) && // retry threshold
moment.utc(scanResult.run.timestamp).add(this.failedScanRetryIntervalInMinutes, 'minutes') <= moment.utc() // retry delay
) {
filteredScanRequests.toQueue.push({ request: scanRequest, result: scanResult, condition: 'retry' });
return;
}
}),
);
}