diff --git a/src/Handler/Eos/V0/Latest.hs b/src/Handler/Eos/V0/Latest.hs index d0054eb..4cf4990 100644 --- a/src/Handler/Eos/V0/Latest.hs +++ b/src/Handler/Eos/V0/Latest.hs @@ -15,7 +15,7 @@ import Database.Esqueleto.Experimental ( ) import Foundation (Handler) import Handler.Package.V0.ReleaseNotes (ReleaseNotes (..)) -import Handler.Util (queryParamAs) +import Handler.Util (queryParamAs, tickleMAU) import Lib.Types.Emver (Version, parseVersion) import Model (EntityField (..), OsVersion (..)) import Orphans.Emver () @@ -56,6 +56,7 @@ getEosVersionR = do filter (maybe (const True) (<) eosVersion . fst) $ ((osVersionNumber &&& osVersionReleaseNotes)) <$> osV + tickleMAU pure . JSONResponse $ mLatest <&> \latest -> EosRes diff --git a/src/Handler/Package/V0/Info.hs b/src/Handler/Package/V0/Info.hs index 6b7d688..3717acf 100644 --- a/src/Handler/Package/V0/Info.hs +++ b/src/Handler/Package/V0/Info.hs @@ -3,6 +3,7 @@ module Handler.Package.V0.Info where import Data.Aeson (ToJSON (..)) import Database.Esqueleto.Experimental (Entity (..), asc, from, orderBy, select, table, (^.)) import Foundation (Handler, RegistryCtx (..)) +import Handler.Util (tickleMAU) import Model (Category (..), EntityField (..)) import Settings (AppSettings (..)) import Startlude (Generic, Show, Text, pure, ($), (.), (<$>)) @@ -30,4 +31,5 @@ getInfoR = do cats <- from $ table @Category orderBy [asc (cats ^. CategoryPriority)] pure cats + tickleMAU pure $ JSONResponse $ InfoRes name $ categoryName . entityVal <$> allCategories diff --git a/src/Handler/Util.hs b/src/Handler/Util.hs index f9ca712..ae69c7b 100644 --- a/src/Handler/Util.hs +++ b/src/Handler/Util.hs @@ -11,12 +11,14 @@ import Data.String.Interpolate.IsString (i) import Data.Text qualified as T import Data.Text.Lazy qualified as TL import Data.Text.Lazy.Builder qualified as TB +import Foundation import Lib.PkgRepository (PkgRepo, getHash) import Lib.Types.Core (PkgId) import Lib.Types.Emver ( Version, VersionRange, ) +import Model (UserActivity (..)) import Network.HTTP.Types ( Status, status400, @@ -32,10 +34,13 @@ import Startlude ( decodeUtf8, fromMaybe, fst, + getCurrentTime, isSpace, + liftIO, not, pure, readMaybe, + void, ($), (.), (<$>), @@ -46,6 +51,9 @@ import Yesod ( MonadHandler, RenderRoute (..), TypedContent (..), + YesodPersist (runDB), + insertRecord, + liftHandler, lookupGetParam, sendResponseStatus, toContent, @@ -101,3 +109,12 @@ queryParamAs k p = Left e -> sendResponseText status400 [i|Invalid Request! The query parameter '#{k}' failed to parse: #{e}|] Right a -> pure (Just a) + + +tickleMAU :: Handler () +tickleMAU = do + lookupGetParam "server-id" >>= \case + Nothing -> pure () + Just sid -> do + now <- liftIO getCurrentTime + void $ liftHandler $ runDB $ insertRecord $ UserActivity now sid diff --git a/src/Model.hs b/src/Model.hs index 95ea833..f31e140 100644 --- a/src/Model.hs +++ b/src/Model.hs @@ -125,6 +125,10 @@ PkgDependency deriving Eq deriving Show +UserActivity + createdAt UTCTime + serverId Text + Admin Id Text createdAt UTCTime