summaryrefslogtreecommitdiff
path: root/server/Server.hs
diff options
context:
space:
mode:
authorstuebinm2022-02-07 18:03:08 +0100
committerstuebinm2022-03-19 19:26:19 +0100
commitf10f80a2ae99aa9c57c4ceefa67e7e5aa3fa53c8 (patch)
tree9fec0024911b385c3a057d272f1a57c1a39bb5f8 /server/Server.hs
parent24e5ccd98aa33250327d36e3859c461699026859 (diff)
server: proper job handling
Note: the server will not check submissions for duplicates! (nor does it do any kind of rate-limiting)
Diffstat (limited to 'server/Server.hs')
-rw-r--r--server/Server.hs27
1 files changed, 22 insertions, 5 deletions
diff --git a/server/Server.hs b/server/Server.hs
index 41e5bde..93bfb30 100644
--- a/server/Server.hs
+++ b/server/Server.hs
@@ -3,12 +3,13 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
-module Server (loadConfig, Config(..), RemoteRef(..), State, JobStatus(..),
- setJobStatus) where
+module Server (loadConfig, Config(..), RemoteRef(..), State, registry, jobs, JobStatus(..),
+ setJobStatus,defaultState,setRegistry) where
import CheckDir (DirResult)
import Control.Concurrent (MVar, modifyMVar_)
@@ -17,9 +18,13 @@ import qualified Data.ByteString.Lazy as LB
import Data.Map (Map)
import qualified Data.Map as M
import Data.Text (Text)
+import Data.UUID (UUID)
import GHC.Generics (Generic)
+import Lens.Micro (over)
+import Lens.Micro.TH
import LintConfig (LintConfig')
+
-- | a reference in a remote git repository
data RemoteRef = RemoteRef
{ repourl :: Text
@@ -44,7 +49,15 @@ data JobStatus =
Pending | Linted DirResult | Failed Text
deriving (Generic, ToJSON)
-type State = Map RemoteRef JobStatus
+data State = State
+ { _jobs :: Map RemoteRef JobStatus
+ , _registry :: Map UUID RemoteRef
+ }
+
+makeLenses ''State
+
+defaultState :: State
+defaultState = State mempty mempty
loadConfig :: Config False -> IO (Config True)
@@ -57,5 +70,9 @@ loadConfig config = do
setJobStatus :: MVar State -> RemoteRef -> JobStatus -> IO ()
-setJobStatus mvar ref status = modifyMVar_ mvar $ \state ->
- pure $ M.insert ref status state
+setJobStatus mvar ref status = modifyMVar_ mvar
+ $ pure . over jobs (M.insert ref status)
+
+setRegistry :: MVar State -> UUID -> RemoteRef -> IO ()
+setRegistry mvar uuid ref = modifyMVar_ mvar
+ $ pure . over registry (M.insert uuid ref)