mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
update to not use fs read for versions, just previous db call metadata
This commit is contained in:
committed by
Keagan McClelland
parent
85f1ffa406
commit
47c971de99
4
.gitignore
vendored
4
.gitignore
vendored
@@ -32,3 +32,7 @@ version
|
|||||||
0.3.0_features.md
|
0.3.0_features.md
|
||||||
**/embassy-sdk
|
**/embassy-sdk
|
||||||
start9-registry.prof
|
start9-registry.prof
|
||||||
|
start9-registry.hp
|
||||||
|
start9-registry.pdf
|
||||||
|
start9-registry.aux
|
||||||
|
start9-registry.ps
|
||||||
@@ -13,7 +13,7 @@ ip-from-header: "_env:YESOD_IP_FROM_HEADER:false"
|
|||||||
# By default, `yesod devel` runs in development, and built executables use
|
# By default, `yesod devel` runs in development, and built executables use
|
||||||
# production settings (see below). To override this, use the following:
|
# production settings (see below). To override this, use the following:
|
||||||
#
|
#
|
||||||
# development: false
|
development: true
|
||||||
|
|
||||||
# Optional values with the following production defaults.
|
# Optional values with the following production defaults.
|
||||||
# In development, they default to the inverse.
|
# In development, they default to the inverse.
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ getPackageListR = do
|
|||||||
query
|
query
|
||||||
let filteredServices' = sAppAppId . entityVal <$> filteredServices
|
let filteredServices' = sAppAppId . entityVal <$> filteredServices
|
||||||
settings <- getsYesod appSettings
|
settings <- getsYesod appSettings
|
||||||
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata filteredServices'
|
packageMetadata <- time "metadata" $ runDB $ fetchPackageMetadata $ Just filteredServices'
|
||||||
$logInfo $ show packageMetadata
|
$logInfo $ show packageMetadata
|
||||||
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
|
serviceDetailResult <- time "service details" $ liftIO $ mapConcurrently
|
||||||
(getServiceDetails settings packageMetadata Nothing)
|
(getServiceDetails settings packageMetadata Nothing)
|
||||||
@@ -303,12 +303,10 @@ getPackageListR = do
|
|||||||
Right (packages :: [PackageVersion]) -> do
|
Right (packages :: [PackageVersion]) -> do
|
||||||
-- for each item in list get best available from version range
|
-- for each item in list get best available from version range
|
||||||
settings <- getsYesod appSettings
|
settings <- getsYesod appSettings
|
||||||
availableServicesResult <- time "availableServicesResult" $ liftIO $ mapConcurrently
|
|
||||||
(getPackageDetails settings)
|
|
||||||
packages
|
|
||||||
-- @TODO fix _ error
|
-- @TODO fix _ error
|
||||||
|
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata Nothing
|
||||||
|
availableServicesResult <- traverse (getPackageDetails packageMetadata) packages
|
||||||
let (_, availableServices) = partitionEithers availableServicesResult
|
let (_, availableServices) = partitionEithers availableServicesResult
|
||||||
packageMetadata <- time "metadata2" $ runDB $ fetchPackageMetadata (snd <$> availableServices)
|
|
||||||
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
|
serviceDetailResult <- time "service details 2" $ liftIO $ mapConcurrently
|
||||||
(uncurry $ getServiceDetails settings packageMetadata)
|
(uncurry $ getServiceDetails settings packageMetadata)
|
||||||
availableServices
|
availableServices
|
||||||
@@ -328,22 +326,18 @@ getPackageListR = do
|
|||||||
|
|
||||||
|
|
||||||
where
|
where
|
||||||
getPackageDetails :: (MonadIO m)
|
getPackageDetails :: MonadIO m => (HM.HashMap AppIdentifier ([Version], [CategoryTitle])) -> PackageVersion -> m (Either Text ((Maybe Version), AppIdentifier))
|
||||||
=> AppSettings
|
getPackageDetails metadata pv = do
|
||||||
-> PackageVersion
|
let appId = packageVersionId pv
|
||||||
-> m (Either Text ((Maybe Version), AppIdentifier))
|
let spec = packageVersionVersion pv
|
||||||
getPackageDetails settings pv = do
|
pacakgeMetadata <- case HM.lookup appId metadata of
|
||||||
let appId = packageVersionId pv
|
Nothing-> throwIO $ NotFoundE [i|dependency metadata for #{appId} not found.|]
|
||||||
let spec = packageVersionVersion pv
|
Just m -> pure m
|
||||||
let appExt = Extension (show appId) :: Extension "s9pk"
|
-- get best version from VersionRange of dependency
|
||||||
time "best version" $ getBestVersion ((</> "apps") . resourcesDir $ settings) appExt spec >>= \case
|
let satisfactory = filter (<|| spec) (fst pacakgeMetadata)
|
||||||
Nothing ->
|
let best = getMax <$> foldMap (Just . Max) satisfactory
|
||||||
pure
|
case best of
|
||||||
$ Left
|
Nothing -> pure $ Left $ "best version could not be found for " <> show appId <> " with spec " <> show spec
|
||||||
$ "best version could not be found for "
|
|
||||||
<> show appId
|
|
||||||
<> " with spec "
|
|
||||||
<> show spec
|
|
||||||
Just v -> do
|
Just v -> do
|
||||||
pure $ Right (Just v, appId)
|
pure $ Right (Just v, appId)
|
||||||
|
|
||||||
@@ -478,7 +472,7 @@ fetchLatestAppAtVersion appId version' = selectOne $ do
|
|||||||
pure (service, version)
|
pure (service, version)
|
||||||
|
|
||||||
fetchPackageMetadata :: MonadUnliftIO m
|
fetchPackageMetadata :: MonadUnliftIO m
|
||||||
=> [AppIdentifier]
|
=> Maybe [AppIdentifier]
|
||||||
-> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
|
-> ReaderT SqlBackend m (HM.HashMap AppIdentifier ([Version], [CategoryTitle]))
|
||||||
fetchPackageMetadata ids = do
|
fetchPackageMetadata ids = do
|
||||||
let categoriesQuery = select $ do
|
let categoriesQuery = select $ do
|
||||||
|
|||||||
Reference in New Issue
Block a user