Optimize DAST reporting to reduce memory usage
## Problem
DAST scans on target applications that make lots of HTTP requests are experiencing a spike in memory. This is causing the Runner to run out of memory on at least one customer scan.
## The most likely cause
While it is not guaranteed to be the problem, it is known that `store.NavigationResult.LoadAll()` is extremely inefficient, and is the only known contender for such large memory spikes.
`LoadAll` loads results of all user actions attempted by DAST during the scan, which could number in the thousands for a long scan. Each `NavigationResult` object contains the HTTP requests and responses recorded during the action. It is common for request and response bodies to be many MBs in size. For example, if Chromium loads a 10 MB JavaScript file on every page, the 10 MB response body will be recorded in every navigation result, all of which will be loaded in memory when `LoadAll` is called.
## Customer
See `Memory Usage %` for an example of such a memory usage spike https://gitlab.com/gitlab-com/sec-sub-department/section-sec-request-for-help/-/issues/125#note_1794526803.
## Proposal
Convert the offending method to stream results, or to return a specific set of results according to how it is used.
## Implementation plan
- Change `printer.UniqueAuditedURLS` to use `store.NavigationResult.IterateHTTPMessages`
- Change `services.SecurityReportFormatter` to use `store.NavigationResult.IterateHTTPMessages`
- Remove `CrawlGraph.GetNavigationResults` and `store.NavigationResult.LoadAll()`
- Add a changelog entry
issue