-- | Cron Job for Yesod module Yesod.JobQueue.Scheduler where import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Trans.Control (MonadBaseControl) import Data.Monoid ((<>)) import qualified Data.Text as T (pack) import System.Cron.Schedule import Yesod.JobQueue import Yesod.JobQueue.Types -- | Cron Scheduler for YesodJobQueue class (YesodJobQueue master) => YesodJobQueueScheduler master where -- | job schedules getJobSchedules :: master -> [(String, JobType master)] -- | start schedule startJobSchedule :: (MonadBaseControl IO m, MonadIO m) => master -> m () startJobSchedule master = do let add (s, jt) = addJob (enqueue master jt) s tids <- liftIO $ execSchedule $ mapM_ add $ getJobSchedules master liftIO $ print tids -- | Need by 'getClassInformation' schedulerInfo :: YesodJobQueueScheduler master => master -> JobQueueClassInfo schedulerInfo m = JobQueueClassInfo "Scheduler" $ map (T.pack . showSchedule) $ getJobSchedules m where showSchedule (s, jt) = s <> " | " <> (show jt)