diff --git a/Application.hs b/Application.hs index 7a5c913..05207c8 100644 --- a/Application.hs +++ b/Application.hs @@ -56,6 +56,10 @@ import Handler.OldLinks import Handler.Feed import Handler.DownloadStack +import Network.Wai.Middleware.Prometheus (prometheus) +import Prometheus (register) +import Prometheus.Metric.GHC (ghcMetrics) + -- This line actually creates our YesodDispatch instance. It is the second half -- of the call to mkYesodData which occurs in Foundation.hs. Please see the -- comments there for more details. @@ -72,9 +76,12 @@ makeApplication foundation = do appPlain <- toWaiAppPlain foundation let middleware = forceSSL' (appSettings foundation) + . prometheus def . logWare . defaultMiddlewaresNoLogging + void (register ghcMetrics) + return (middleware appPlain) forceSSL' :: AppSettings -> Middleware diff --git a/Handler/BuildPlan.hs b/Handler/BuildPlan.hs index 16f68bc..45aa039 100644 --- a/Handler/BuildPlan.hs +++ b/Handler/BuildPlan.hs @@ -7,7 +7,7 @@ import Stackage.BuildPlan import Stackage.Database getBuildPlanR :: SnapName -> Handler TypedContent -getBuildPlanR slug = do +getBuildPlanR slug = track "Handler.BuildPlan.getBuildPlanR" $ do fullDeps <- (== Just "true") <$> lookupGetParam "full-deps" spec <- parseSnapshotSpec $ toPathPiece slug let set = setShellCommands simpleCommands diff --git a/Handler/Download.hs b/Handler/Download.hs index 7b18f15..5f953bb 100644 --- a/Handler/Download.hs +++ b/Handler/Download.hs @@ -13,13 +13,16 @@ import Stackage.Database import qualified Data.Text as T getDownloadR :: Handler Html -getDownloadR = redirectWith status301 InstallR +getDownloadR = track "Hoogle.Download.getDownloadR" $ + redirectWith status301 InstallR getDownloadSnapshotsJsonR :: Handler Value -getDownloadSnapshotsJsonR = getDownloadLtsSnapshotsJsonR +getDownloadSnapshotsJsonR = track "Hoogle.Download.getDownloadSnapshotsJsonR" + getDownloadLtsSnapshotsJsonR getDownloadLtsSnapshotsJsonR :: Handler Value -getDownloadLtsSnapshotsJsonR = snapshotsJSON +getDownloadLtsSnapshotsJsonR = track "Hoogle.Download.getDownloadLtsSnapshotsJsonR" + snapshotsJSON -- Print the ghc major version for the given snapshot. ghcMajorVersionText :: Snapshot -> Text @@ -30,12 +33,12 @@ ghcMajorVersionText = getMajorVersion = intercalate "." . take 2 . T.splitOn "." getGhcMajorVersionR :: SnapName -> Handler Text -getGhcMajorVersionR name = do +getGhcMajorVersionR name = track "Hoogle.Download.getGhcMajorVersionR" $ do snapshot <- lookupSnapshot name >>= maybe notFound return return $ ghcMajorVersionText $ entityVal snapshot getDownloadGhcLinksR :: SupportedArch -> Text -> Handler TypedContent -getDownloadGhcLinksR arch fileName = do +getDownloadGhcLinksR arch fileName = track "Hoogle.Download.getDownloadGhcLinksR" $ do ver <- maybe notFound return $ stripPrefix "ghc-" >=> stripSuffix "-links.yaml" diff --git a/Handler/DownloadStack.hs b/Handler/DownloadStack.hs index 35bafa4..52011e0 100644 --- a/Handler/DownloadStack.hs +++ b/Handler/DownloadStack.hs @@ -12,14 +12,14 @@ import Data.Conduit.Attoparsec (sinkParser) import Data.Monoid (First (..)) getDownloadStackListR :: Handler Html -getDownloadStackListR = do +getDownloadStackListR = track "Handler.DownloadStack.getDownloadStackListR" $ do releases <- getYesod >>= fmap wcStackReleases . liftIO . grContent . appWebsiteContent defaultLayout $ do setTitle "Download Stack" $(widgetFile "download-stack-list") getDownloadStackR :: Text -> Handler () -getDownloadStackR pattern = do +getDownloadStackR pattern = track "Handler.DownloadStack.getDownloadStackR" $ do matcher <- getYesod >>= liftIO . appLatestStackMatcher maybe notFound redirect $ matcher pattern diff --git a/Handler/Feed.hs b/Handler/Feed.hs index 717ae62..1e301c2 100644 --- a/Handler/Feed.hs +++ b/Handler/Feed.hs @@ -10,10 +10,10 @@ import Stackage.Snapshot.Diff import Text.Blaze (text) getFeedR :: Handler TypedContent -getFeedR = getBranchFeed Nothing +getFeedR = track "Handler.Feed.getBranchFeedR" $ getBranchFeed Nothing getBranchFeedR :: SnapshotBranch -> Handler TypedContent -getBranchFeedR = getBranchFeed . Just +getBranchFeedR = track "Handler.Feed.getBranchFeedR" . getBranchFeed . Just getBranchFeed :: Maybe SnapshotBranch -> Handler TypedContent getBranchFeed mBranch = mkFeed mBranch =<< getSnapshots mBranch 20 0 diff --git a/Handler/Haddock.hs b/Handler/Haddock.hs index 99a4f0d..b0d81d0 100644 --- a/Handler/Haddock.hs +++ b/Handler/Haddock.hs @@ -21,7 +21,7 @@ shouldRedirect = False getHaddockR :: SnapName -> [Text] -> Handler TypedContent getHaddockR slug rest | shouldRedirect = redirect $ makeURL slug rest - | final:_ <- reverse rest, ".html" `isSuffixOf` final = do + | final:_ <- reverse rest, ".html" `isSuffixOf` final = track "Handler.Haddock.getHaddockR" $ do render <- getUrlRender let stylesheet = render' $ StaticR haddock_style_css @@ -100,6 +100,6 @@ nav = close = [EventEndElement name] getHaddockBackupR :: [Text] -> Handler () -getHaddockBackupR rest = redirect $ concat +getHaddockBackupR rest = track "Handler.Haddock.getHaddockBackupR" $ redirect $ concat $ "https://s3.amazonaws.com/haddock.stackage.org" : map (cons '/') rest diff --git a/Handler/Hoogle.hs b/Handler/Hoogle.hs index ad7dd7a..c5d7c37 100644 --- a/Handler/Hoogle.hs +++ b/Handler/Hoogle.hs @@ -13,12 +13,12 @@ import qualified Stackage.Database.Cron as Cron import qualified Data.Text as T getHoogleDB :: SnapName -> Handler (Maybe FilePath) -getHoogleDB name = do +getHoogleDB name = track "Handler.Hoogle.getHoogleDB" $ do app <- getYesod liftIO $ Cron.getHoogleDB True (appHttpManager app) name getHoogleR :: SnapName -> Handler Html -getHoogleR name = do +getHoogleR name = track "Handler.Hoogle.getHoogleR" $ do Entity _ snapshot <- lookupSnapshot name >>= maybe notFound return mquery <- lookupGetParam "q" mpage <- lookupGetParam "page" @@ -67,21 +67,22 @@ getHoogleR name = do $(widgetFile "hoogle") getHoogleDatabaseR :: SnapName -> Handler Html -getHoogleDatabaseR name = do +getHoogleDatabaseR name = track "Handler.Hoogle.getHoogleDatabaseR" $ do mdatabasePath <- getHoogleDB name case mdatabasePath of Nothing -> hoogleDatabaseNotAvailableFor name Just path -> sendFile "application/octet-stream" path hoogleDatabaseNotAvailableFor :: SnapName -> Handler a -hoogleDatabaseNotAvailableFor name = (>>= sendResponse) $ defaultLayout $ do - setTitle "Hoogle database not available" - [whamlet| -
The given Hoogle database is not available. -