From fff7336e06ab4c98adda3fea8a86c7d4d4b9b9bb Mon Sep 17 00:00:00 2001 From: Joris Date: Thu, 1 Oct 2015 14:10:45 +0200 Subject: Factor job listener --- src/server/Job.hs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/server/Job.hs (limited to 'src/server/Job.hs') diff --git a/src/server/Job.hs b/src/server/Job.hs new file mode 100644 index 0000000..bf8f15b --- /dev/null +++ b/src/server/Job.hs @@ -0,0 +1,25 @@ +module Job + ( jobListener + ) where + +import Data.Time.Clock + +import Control.Concurrent (threadDelay) + +import Model.Database +import Model.JobKind +import Model.Job + +jobListener :: JobKind -> (UTCTime -> IO Bool) -> (() -> Persist ()) -> Int -> IO () +jobListener kind lastExecutionTooOld runJob msDelay = do + mbLastExecution <- runDb $ do + actualizeLastCheck kind + getLastExecution kind + hasToRun <- case mbLastExecution of + Just lastExecution -> lastExecutionTooOld lastExecution + Nothing -> return True + if hasToRun + then runDb (runJob () >> actualizeLastExecution kind) + else return () + threadDelay msDelay + jobListener kind lastExecutionTooOld runJob msDelay -- cgit v1.2.3