packages feed

yam-job 0.1.10 → 0.1.11

raw patch · 2 files changed

+22/−34 lines, 2 files

Files

src/Yam/Job.hs view
@@ -5,8 +5,7 @@  module Yam.Job(     YamJob(..)-  , MonadJob(..)-  , startJob+  , withJobs   ) where  import           Yam.App@@ -19,34 +18,23 @@   , func :: AppM IO ()   } -class MonadIO m => MonadJob m where-  yamJobs :: m [(ThreadId, YamJob)]-  registerJob :: YamJob -> m ()-  killJobs :: m ()--keyJob :: Text-keyJob = "Extension.Job"--instance (MonadIO m, MonadMask m) => MonadJob (AppM m) where-  yamJobs = getExtensionOrDefault [] keyJob-  killJobs = yamJobs >>= mapM_ go >> setExtension keyJob ([] :: [(ThreadId, YamJob)])-    where go (tid,job) = do infoLn $ "Stop job " <> name (job :: YamJob) <> "..."-                            liftIO $ killThread tid-  registerJob job = do-    let nm = name (job :: YamJob)-    infoLn $ "Register job " <> nm <> " with cron '" <> cron job <> "'"-    context  <- ask-    [thread] <- liftIO $ execSchedule-                      $ flip addJob (cron job)-                      $ do reqId <- randomHex 8-                           runAppM context $ withLoggerName (reqId <> " job." <> nm)-                                           $ do infoLn $ "Start job " <> nm-                                                func job-                                                infoLn ("End job " <> nm)-    jobs <- yamJobs-    setExtension keyJob ((thread,job):jobs)--startJob :: [YamJob] -> (YamContext -> IO YamContext) -> IO ()-startJob jobs initialize = do-  context <- defaultContext >>= initialize-  runAppM context $ mapM_ registerJob jobs+withJobs :: (MonadIO m, MonadMask m) => [YamJob] -> AppM m a -> AppM m a+withJobs jobs action = do+    context <- ask+    threads <- liftIO $ execSchedule+                      $ mapM_ (go context) jobs+    let tjobs = zipWith (,) threads jobs+    mapM_ (prt True) tjobs+    action `finally` kill tjobs+    where go context job = flip addJob (cron job) $ do+            reqId <- randomHex 8+            let nm = name (job :: YamJob)+            runAppM context $ withLoggerName (reqId <> " job." <> nm)+                            $ do infoLn $ "Start job " <> nm+                                 func job+                                 infoLn ("End job " <> nm)+          kill ts = mapM_ (prt False) ts >> (liftIO $ mapM_ (killThread.fst) ts)+          prt v (_,job) = do+            let nm = name (job :: YamJob)+                r  = if v then "Register" else "Unregister"+            infoLn $ r <> " job " <> nm <> " with cron '" <> cron job <> "'"
yam-job.cabal view
@@ -1,5 +1,5 @@ name:                yam-job-version:             0.1.10+version:             0.1.11 description:         Job Module for Yam homepage:            https://github.com/leptonyu/yam/tree/master/yam-job#readme license:             BSD3