Display download stats on package page

This commit is contained in:
Michael Snoyman 2014-10-23 07:16:04 +03:00
parent f42eb69498
commit 1d46dcf5d6
2 changed files with 9 additions and 2 deletions

View File

@ -3,6 +3,7 @@ module Handler.Package where
import Import import Import
import qualified Database.Esqueleto as E import qualified Database.Esqueleto as E
import Database.Esqueleto ((^.), (&&.), Value (Value)) import Database.Esqueleto ((^.), (&&.), Value (Value))
import Data.Time (addUTCTime)
getPackageR :: PackageName -> Handler Html getPackageR :: PackageName -> Handler Html
getPackageR pn = do getPackageR pn = do
@ -11,7 +12,7 @@ getPackageR pn = do
asInt = id asInt = id
haddocksLink ident version = haddocksLink ident version =
HaddockR ident [concat [toPathPiece pn, "-", toPathPiece version]] HaddockR ident [concat [toPathPiece pn, "-", toPathPiece version]]
(latestVersion, packages) <- runDB $ do (latestVersion, packages, downloads, recentDownloads) <- runDB $ do
mupload <- selectFirst [UploadedName ==. pn] [Desc UploadedUploaded] mupload <- selectFirst [UploadedName ==. pn] [Desc UploadedUploaded]
Entity _ (Uploaded _ latestVersion _) <- maybe notFound return mupload Entity _ (Uploaded _ latestVersion _) <- maybe notFound return mupload
packages <- E.select $ E.from $ \(p, s) -> do packages <- E.select $ E.from $ \(p, s) -> do
@ -22,7 +23,11 @@ getPackageR pn = do
E.limit maxSnaps E.limit maxSnaps
--selectList [PackageName' ==. pn] [LimitTo 10, Desc PackageStackage] --selectList [PackageName' ==. pn] [LimitTo 10, Desc PackageStackage]
return (p ^. PackageVersion, s ^. StackageTitle, s ^. StackageIdent, s ^. StackageHasHaddocks) return (p ^. PackageVersion, s ^. StackageTitle, s ^. StackageIdent, s ^. StackageHasHaddocks)
return (latestVersion, packages) downloads <- count [DownloadPackage ==. pn]
now <- liftIO getCurrentTime
let nowMinus30 = addUTCTime (-30 * 24 * 60 * 60) now
recentDownloads <- count [DownloadPackage ==. pn, DownloadTimestamp >=. nowMinus30]
return (latestVersion, packages, downloads, recentDownloads)
defaultLayout $ do defaultLayout $ do
setTitle $ toHtml pn setTitle $ toHtml pn
$(widgetFile "package") $(widgetFile "package")

View File

@ -5,6 +5,8 @@
<h1>#{pn} <h1>#{pn}
<h2>Latest uploaded version: #{latestVersion} <h2>Latest uploaded version: #{latestVersion}
<p>Total downloads: #{downloads} (#{recentDownloads} in last 30 days)
$if null packages $if null packages
<p>Not included in any snapshots <p>Not included in any snapshots
$else $else