mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-31 12:13:40 +00:00
44 lines
1.7 KiB
Haskell
44 lines
1.7 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
{-# LANGUAGE TypeApplications #-}
|
|
module Handler.ErrorLogs where
|
|
|
|
import Control.Monad ( MonadFail(fail) )
|
|
import Data.Aeson ( (.:)
|
|
, FromJSON(parseJSON)
|
|
, withObject
|
|
, withText
|
|
)
|
|
import Foundation
|
|
import Settings ( AppSettings(errorLogRoot) )
|
|
import Startlude hiding ( Handler )
|
|
import System.FilePath ( (<.>)
|
|
, (</>)
|
|
)
|
|
import Yesod.Core ( getsYesod
|
|
, requireCheckJsonBody
|
|
)
|
|
|
|
data ErrorLog = ErrorLog
|
|
{ errorLogEpoch :: Word64
|
|
, errorLogMessage :: Text
|
|
}
|
|
deriving (Eq, Show)
|
|
|
|
instance FromJSON ErrorLog where
|
|
parseJSON = withObject "Error Log" $ \o -> do
|
|
errorLogEpoch <- o .: "log-epoch" >>= withText
|
|
"Word64"
|
|
(\t -> case readMaybe t of
|
|
Nothing -> fail "Invalid Log Epoch"
|
|
Just x -> pure x
|
|
)
|
|
errorLogMessage <- o .: "log-message"
|
|
pure ErrorLog { .. }
|
|
|
|
|
|
postErrorLogsR :: Handler ()
|
|
postErrorLogsR = do
|
|
ErrorLog {..} <- requireCheckJsonBody @_ @ErrorLog
|
|
root <- getsYesod $ errorLogRoot . appSettings
|
|
void $ liftIO $ forkIO $ appendFile (root </> show errorLogEpoch <.> "log") errorLogMessage
|