fix ram for other routes

This commit is contained in:
Lucy Cifferello
2023-07-23 16:29:57 -04:00
parent 0cf26f55b3
commit ab8fbbb210
3 changed files with 17 additions and 8 deletions

View File

@@ -168,12 +168,13 @@ queryInMetadata query service =
||. (service ^. VersionRecordTitle `ilike` (%) ++. val query ++. (%))
getPkgDataSource :: (MonadResource m, MonadIO m) => [PkgId] -> [OsArch] -> ConduitT () (Entity VersionRecord) (ReaderT SqlBackend m) ()
getPkgDataSource pkgs arches = selectSource $ do
getPkgDataSource :: (MonadResource m, MonadIO m) => [PkgId] -> [OsArch] -> Maybe Int -> ConduitT () (Entity VersionRecord) (ReaderT SqlBackend m) ()
getPkgDataSource pkgs arches mRam = selectSource $ do
(pkgData :& vp) <- from $ table @VersionRecord
`innerJoin` table @VersionPlatform `on` (\(service :& vp) -> (VersionPlatformPkgId === VersionRecordPkgId) (vp :& service))
where_ (pkgData ^. VersionRecordNumber ==. vp ^. VersionPlatformVersionNumber)
where_ (vp ^. VersionPlatformArch `in_` (valList $ Just <$> arches))
where_ (vp ^. VersionPlatformRam ==. val mRam)
where_ (pkgData ^. VersionRecordPkgId `in_` valList (PkgRecordKey <$> pkgs))
pure pkgData

View File

@@ -1,6 +1,6 @@
module Handler.Package.V0.Latest where
import Conduit (concatMapC, mapC, runConduit, sinkList, (.|))
import Conduit (concatMapC, mapC, runConduit, sinkList, (.|), mapMC)
import Data.Aeson (ToJSON (..), eitherDecode)
import Data.ByteString.Lazy qualified as LBS
import Data.HashMap.Strict (HashMap)
@@ -9,8 +9,8 @@ import Data.List (lookup)
import Data.List.NonEmpty.Extra qualified as NE
import Data.Tuple.Extra (second)
import Database.Queries (collateVersions, getPkgDataSource)
import Foundation (Handler, RegistryCtx (appSettings))
import Handler.Package.V1.Index (getOsVersionCompat)
import Foundation (Handler, RegistryCtx (appSettings, appConnPool))
import Handler.Package.V1.Index (getOsVersionCompat, getRamQuery, getHardwareDevicesQuery)
import Lib.Error (S9Error (..))
import Lib.Types.Core (PkgId)
import Lib.Types.Emver (Version (..), satisfies)
@@ -18,7 +18,7 @@ import Model (VersionRecord (..))
import Network.HTTP.Types (status400)
import Startlude (Bool (True), Down (Down), Either (..), Generic, Maybe (..), NonEmpty, Show, const, encodeUtf8, filter, flip, nonEmpty, pure, ($), (.), (<$>), (<&>), (>>=))
import Yesod (ToContent (..), ToTypedContent (..), YesodPersist (runDB), YesodRequest (reqGetParams), getRequest, sendResponseStatus)
import Handler.Util (filterDeprecatedVersions, getPkgArch)
import Handler.Util (filterDeprecatedVersions, getPkgArch, filterDevices)
import Yesod.Core (getsYesod)
import Settings (AppSettings(communityVersion))
@@ -42,7 +42,10 @@ getVersionLatestR = do
pkgArch <- getPkgArch >>= \case
Nothing -> pure []
Just a -> pure a
ram <- getRamQuery
hardwareDevices <- getHardwareDevicesQuery
communityServiceDeprecationVersion <- getsYesod $ communityVersion . appSettings
pool <- getsYesod appConnPool
do
case lookup "ids" getParameters of
Nothing -> sendResponseStatus status400 (InvalidParamsE "get:ids" "<MISSING>")
@@ -50,7 +53,7 @@ getVersionLatestR = do
Left _ -> sendResponseStatus status400 (InvalidParamsE "get:ids" packages)
Right p -> do
let packageList = (,Nothing) <$> p
let source = getPkgDataSource p pkgArch
let source = getPkgDataSource p pkgArch ram
filteredPackages <-
runDB $
runConduit $
@@ -61,6 +64,11 @@ getVersionLatestR = do
.| mapC (second (filter (osPredicate' . versionRecordOsVersion)))
-- filter out deprecated service versions after community registry release
.| mapC (second (filterDeprecatedVersions communityServiceDeprecationVersion osPredicate'))
-- filter hardware device compatability
.| mapMC (\(b,c) -> do
l <- filterDevices pool hardwareDevices pkgArch c
pure (b, l)
)
-- prune empty version sets
.| concatMapC (\(pkgId, vs) -> (pkgId,) <$> nonEmpty vs)
-- grab the latest matching version if it exists

View File

@@ -138,7 +138,7 @@ getPackageIndexR = do
let (source, packageRanges) = case pkgIds of
Nothing -> (serviceQuerySource category query pkgArch ram, const Any)
Just packages ->
let s = getPkgDataSource (packageReqId <$> packages) pkgArch
let s = getPkgDataSource (packageReqId <$> packages) pkgArch ram
r = fromMaybe None . (flip lookup $ (packageReqId &&& packageReqVersion) <$> packages)
in (s, r)
filteredPackages <-