Merge pull request #301 from lehins/deal-with-slow-queries

Disable the really slow pages
This commit is contained in:
Michael Snoyman 2020-11-11 09:37:10 +02:00 committed by GitHub
commit 47ae6b8387
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 39 deletions

View File

@ -1,6 +1,7 @@
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Logger (runNoLoggingT, runStdoutLoggingT) import Control.Monad.Logger (runNoLoggingT, runStdoutLoggingT)
@ -10,7 +11,7 @@ import Database.Persist.Sql (ConnectionPool, SqlBackend, runSqlPool)
import Gauge import Gauge
import Pantry.Internal.Stackage (PackageNameP(..)) import Pantry.Internal.Stackage (PackageNameP(..))
import RIO import RIO
import Settings (getAppSettings, AppSettings(..), configSettingsYmlValue) import Settings (getAppSettings, AppSettings(..), DatabaseSettings(..), configSettingsYmlValue)
import Stackage.Database.Query import Stackage.Database.Query
import Stackage.Database.Schema (withStackageDatabase, runDatabase) import Stackage.Database.Schema (withStackageDatabase, runDatabase)
import Stackage.Database.Types (LatestInfo, SnapName(..), SnapshotPackageInfo(..)) import Stackage.Database.Types (LatestInfo, SnapName(..), SnapshotPackageInfo(..))
@ -19,17 +20,12 @@ import Yesod.Default.Config2
main :: IO () main :: IO ()
main = do main = do
appSettings <- getAppSettings appSettings <- getAppSettings
let pgConf =
PostgresConf
{ pgPoolSize = appPostgresPoolsize appSettings
, pgConnStr = encodeUtf8 $ appPostgresString appSettings
}
let snapName = SNLts 16 4 let snapName = SNLts 16 4
mSnapInfo <- mSnapInfo <-
runSimpleApp $ runSimpleApp $
withStackageDatabase withStackageDatabase
True True
pgConf (appDatabase appSettings)
(\db -> runDatabase db $ getSnapshotPackageInfoQuery snapName (PackageNameP "yesod")) (\db -> runDatabase db $ getSnapshotPackageInfoQuery snapName (PackageNameP "yesod"))
let snapInfo = fromMaybe (error "snapInfo not retrieved") mSnapInfo let snapInfo = fromMaybe (error "snapInfo not retrieved") mSnapInfo
defaultMain [benchs snapInfo] defaultMain [benchs snapInfo]
@ -39,13 +35,10 @@ runBenchApp pool m = runSimpleApp $ runSqlPool m pool
createBenchPool :: IO ConnectionPool createBenchPool :: IO ConnectionPool
createBenchPool = do createBenchPool = do
baSettings <- loadYamlSettingsArgs [configSettingsYmlValue] useEnv loadYamlSettingsArgs [configSettingsYmlValue] useEnv >>= \case
pool <- AppSettings{appDatabase = DSPostgres pgString pgPoolSize} ->
runNoLoggingT $ runNoLoggingT $ createPostgresqlPool (encodeUtf8 pgString) pgPoolSize
createPostgresqlPool _ -> throwString "Benchmarks are crafted for PostgreSQL"
(encodeUtf8 $ appPostgresString baSettings)
(appPostgresPoolsize baSettings)
pure pool
releasePool :: ConnectionPool -> IO () releasePool :: ConnectionPool -> IO ()
releasePool = destroyAllResources releasePool = destroyAllResources

View File

@ -1,22 +1,26 @@
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
module Handler.PackageList where module Handler.PackageList where
import Import import Import
import Stackage.Database import Text.Blaze
-- FIXME maybe just redirect to the LTS or nightly package list -- FIXME maybe just redirect to the LTS or nightly package list
getPackageListR :: Handler Html getPackageListR :: Handler Html
getPackageListR = getPackageListR = do
track "Handler.PackageList.getPackageListR" $ sendResponseStatus status404 =<<
defaultLayout $ do defaultLayout
cacheSeconds $ 60 * 60 * 2 (toWidget (preEscapedText
setTitle "Package list" ("Page has been disabled, see: " <>
packages <- getAllPackages "<a href=\"https://github.com/fpco/stackage-server/issues/299\">" <>
$(widgetFile "package-list") "github:fpco/stackage-server#299</a>")))
where -- track "Handler.PackageList.getPackageListR" $
strip x = fromMaybe x (stripSuffix "." x) -- defaultLayout $ do
makePackageLink snapName pli = -- cacheSeconds $ 60 * 60 * 2
SnapshotR snapName $ StackageSdistR $ PNVNameVersion (pliName pli) (pliVersion pli) -- setTitle "Package list"
-- packages <- getAllPackages
-- $(widgetFile "package-list")
-- where
-- strip x = fromMaybe x (stripSuffix "." x)
-- makePackageLink snapName pli =
-- SnapshotR snapName $ StackageSdistR $ PNVNameVersion (pliName pli) (pliVersion pli)

View File

@ -17,6 +17,7 @@ import RIO.Time (FormatTime)
import Import import Import
import Stackage.Database import Stackage.Database
import Stackage.Snapshot.Diff import Stackage.Snapshot.Diff
import Text.Blaze
getStackageHomeR :: SnapName -> Handler TypedContent getStackageHomeR :: SnapName -> Handler TypedContent
getStackageHomeR name = getStackageHomeR name =
@ -155,12 +156,19 @@ getSnapshotPackagesR name = track "Handler.StackageHome.getSnapshotPackagesR" $
redirect $ SnapshotR name StackageHomeR redirect $ SnapshotR name StackageHomeR
getDocsR :: SnapName -> Handler Html getDocsR :: SnapName -> Handler Html
getDocsR name = track "Handler.StackageHome.getDocsR" $ do getDocsR _name = do
cacheSeconds $ 60 * 60 * 48 sendResponseStatus status404 =<<
Entity sid _ <- lookupSnapshot name >>= maybe notFound return defaultLayout
mlis <- getSnapshotModules sid (toWidget (preEscapedText
render <- getUrlRender ("Page has been disabled, see: " <>
let mliUrl mli = render $ haddockUrl name mli "<a href=\"https://github.com/fpco/stackage-server/issues/300\">" <>
defaultLayout $ do "github:fpco/stackage-server#300</a>")))
setTitle $ toHtml $ "Module list for " ++ toPathPiece name -- track "Handler.StackageHome.getDocsR" $ do
$(widgetFile "doc-list") -- cacheSeconds $ 60 * 60 * 48
-- Entity sid _ <- lookupSnapshot name >>= maybe notFound return
-- mlis <- getSnapshotModules sid
-- render <- getUrlRender
-- let mliUrl mli = render $ haddockUrl name mli
-- defaultLayout $ do
-- setTitle $ toHtml $ "Module list for " ++ toPathPiece name
-- $(widgetFile "doc-list")