@@ -179,11 +179,13 @@ import Fossa.API.Types (
179
179
SignedURLWithKey (surlwkKey , surlwkSignedURL ),
180
180
TokenTypeResponse ,
181
181
UploadResponse ,
182
+ chunkArchiveComponents ,
182
183
useApiOpts ,
183
184
)
184
185
185
186
import Control.Effect.Reader
186
187
import Data.Foldable (traverse_ )
188
+ import Data.List.Extra (chunk )
187
189
import Fossa.API.CoreTypes qualified as CoreTypes
188
190
import Network.HTTP.Client (responseStatus )
189
191
import Network.HTTP.Client qualified as C
@@ -652,24 +654,25 @@ uploadNativeContainerScan apiOpts ProjectRevision{..} metadata scan =
652
654
(baseUrl, baseOpts) <- useApiOpts apiOpts
653
655
let locator = renderLocator $ Locator " custom" projectName (Just projectRevision)
654
656
opts =
655
- " locator" =: locator
657
+ baseOpts
658
+ <> " locator" =: locator
656
659
<> " cliVersion" =: cliVersion
657
660
<> " managedBuild" =: True
658
661
<> maybe mempty (" branch" =: ) projectBranch
659
662
<> " scanType" =: (" native" :: Text )
660
663
<> mkMetadataOpts metadata projectName
661
664
662
- uploadScan url containerScan = req POST url (ReqBodyJson containerScan) jsonResponse (baseOpts <> opts)
663
- sparkleAnalysisUrl = containerUploadUrl Sparkle baseUrl
664
-
665
- resp <-
666
- ( warnOnErr @ Text " Container scan upload to new analysis service failed, falling back to core analysis."
667
- . errCtx (" Upload to new analysis service at " <> renderUrl sparkleAnalysisUrl)
668
- $ uploadScan sparkleAnalysisUrl scan
669
- )
670
- <||> context " Upload to CORE analysis service" (uploadScan (containerUploadUrl Core baseUrl) scan)
671
-
665
+ resp <- uploadToSparkle baseUrl opts <||> uploadToCore baseUrl opts
672
666
pure $ responseBody resp
667
+ where
668
+ uploadScan url opts containerScan = req POST url (ReqBodyJson containerScan) jsonResponse opts
669
+ sparkleAnalysisUrl = containerUploadUrl Sparkle
670
+ coreAnalysisUrl = containerUploadUrl Core
671
+ uploadToSparkle baseUrl opts =
672
+ warnOnErr @ Text " Container scan upload to new analysis service failed, falling back to core analysis."
673
+ . errCtx (" Upload to new analysis service at " <> renderUrl (sparkleAnalysisUrl baseUrl))
674
+ $ uploadScan (sparkleAnalysisUrl baseUrl) opts scan
675
+ uploadToCore baseUrl opts = context " Upload to CORE analysis service" $ uploadScan (coreAnalysisUrl baseUrl) opts scan
673
676
674
677
-- | Replacement for @Data.HTTP.Req.req@ that additionally logs information about a request in a debug bundle.
675
678
req ::
@@ -1015,8 +1018,9 @@ licenseScanFinalize ::
1015
1018
ArchiveComponents ->
1016
1019
m ()
1017
1020
licenseScanFinalize apiOpts archiveProjects = do
1018
- _ <- licenseScanFinalize' apiOpts archiveProjects
1019
- pure ()
1021
+ -- The latency for scans with hundreds of license scans is way too high, leading to spurious error messages.
1022
+ -- https://fossa.atlassian.net/browse/ANE-2272
1023
+ traverse_ (licenseScanFinalize' apiOpts) $ chunkArchiveComponents 100 archiveProjects
1020
1024
1021
1025
licenseScanFinalize' ::
1022
1026
APIClientEffs sig m =>
@@ -1580,12 +1584,18 @@ finalizePathDependencyScan ::
1580
1584
m (Maybe () )
1581
1585
finalizePathDependencyScan apiOpts locators forceRebuild = runEmpty $
1582
1586
fossaReqAllow401 $ do
1587
+ -- The latency for scans with hundreds of license scans is way too high, leading to spurious error messages.
1588
+ -- Reference: https://fossa.atlassian.net/browse/ANE-2272
1589
+ --
1590
+ -- No similar issue was reported for this method,
1591
+ -- but since it uses the same methodology I decided it was better to go ahead and do it.
1583
1592
(baseUrl, baseOpts) <- useApiOpts apiOpts
1584
- let req' = PathDependencyFinalizeReq locators forceRebuild
1585
- _ <-
1593
+ traverse_ (finalize baseUrl baseOpts) $ chunk 100 locators
1594
+ where
1595
+ mkReq locs = PathDependencyFinalizeReq locs forceRebuild
1596
+ finalize baseUrl baseOpts locs =
1586
1597
context " Queuing a build for all license scan uploads" $
1587
- req POST (pathDependencyFinalizeUrl baseUrl) (ReqBodyJson req') ignoreResponse (baseOpts)
1588
- pure ()
1598
+ req POST (pathDependencyFinalizeUrl baseUrl) (ReqBodyJson (mkReq locs)) ignoreResponse (baseOpts)
1589
1599
1590
1600
alreadyAnalyzedPathRevisionURLEndpoint :: Url 'Https -> Locator -> Url 'Https
1591
1601
alreadyAnalyzedPathRevisionURLEndpoint baseUrl locator = baseUrl /: " api" /: " cli" /: " path_dependency_scan" /: renderLocator locator /: " analyzed"
0 commit comments