update to not use fs read for versions, just previous db call metadata

This commit is contained in:
Lucy Cifferello
2021-09-23 14:51:18 -06:00
committed by Keagan McClelland
parent 85f1ffa406
commit 47c971de99
3 changed files with 22 additions and 24 deletions

4
.gitignore vendored
View File

@@ -32,3 +32,7 @@ version
0.3.0_features.md
**/embassy-sdk
start9-registry.prof
start9-registry.hp
start9-registry.pdf
start9-registry.aux
start9-registry.ps

View File

@@ -13,7 +13,7 @@ ip-from-header: "_env:YESOD_IP_FROM_HEADER:false"
# By default, `yesod devel` runs in development, and built executables use
# production settings (see below). To override this, use the following:
#
# development: false
development: true
# Optional values with the following production defaults.
# In development, they default to the inverse.

View File

@@ -287,7 +287,7 @@ getPackageListR = do
query
let filteredServices' = sAppAppId . entityVal <$> filteredServices
settings <- getsYesod appSettings
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata filteredServices'
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata $ Just filteredServices'
$logInfo $ show packageMetadata
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
(getServiceDetails settings packageMetadata Nothing)
@@ -303,12 +303,10 @@ getPackageListR = do
Right (packages :: [PackageVersion]) -> do
-- for each item in list get best available from version range
settings <- getsYesod appSettings
availableServicesResult <- time "availableServicesResult" $ liftIO $ mapConcurrently
(getPackageDetails settings)
packages
-- @TODO fix _ error
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata Nothing
availableServicesResult <- traverse (getPackageDetails packageMetadata) packages
let (_, availableServices) = partitionEithers availableServicesResult
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata (snd <$> availableServices)
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
(uncurry $ getServiceDetails settings packageMetadata)
availableServices
@@ -328,22 +326,18 @@ getPackageListR = do
where
getPackageDetails :: (MonadIO m)
=> AppSettings
-> PackageVersion
-> m (Either Text ((Maybe Version), AppIdentifier))
getPackageDetails settings pv = do
getPackageDetails :: MonadIO m => (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) -> PackageVersion -> m (Either Text ((Maybe Version), AppIdentifier))
getPackageDetails metadata pv = do
let appId = packageVersionId pv
let spec = packageVersionVersion pv
let appExt = Extension (show appId) :: Extension "s9pk"
time "best version" $ getBestVersion ((</> "apps") . resourcesDir $ settings) appExt spec >>= \case
Nothing ->
pure
$ Left
$ "best version could not be found for "
<> show appId
<> " with spec "
<> show spec
pacakgeMetadata <- case HM.lookup appId metadata of
Nothing-> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|]
Just m -> pure m
-- get best version from VersionRange of dependency
let satisfactory = filter (<|| spec) (fst pacakgeMetadata)
let best = getMax <$> foldMap (Just . Max) satisfactory
case best of
Nothing -> pure $ Left $ "best version could not be found for " <> show appId <> " with spec " <> show spec
Just v -> do
pure $ Right (Just v, appId)
@@ -478,7 +472,7 @@ fetchLatestAppAtVersion appId version' = selectOne $ do
pure (service, version)
fetchPackageMetadata :: MonadUnliftIO m
=> [AppIdentifier]
=> Maybe [AppIdentifier]
-> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
fetchPackageMetadata ids = do
let categoriesQuery = select $ do