1{-# LANGUAGE TypeApplications #-}
3module Control.Task.Scheduler
11import Control.Monad.IO.Unlift
13import Control.Task.Scheduler.Query
14import Data.Aeson hiding (Result (..))
15import qualified Data.Aeson as A
18import qualified Data.Text as T
22import Squeal.PostgreSQL
25 (StaticPQ m, WithLog env Message m, Task t s, MonadUnliftIO m) =>
28scheduleTask = scheduleTaskQuery
32 (StaticPQ m, WithLog env Message m, RunTasks tt m, MonadUnliftIO m) =>
36 tasks <- pickTasksQuery (taskNames @tt @m) n
37 for_ tasks $ runTask @tt @m
42 (Task t s, StaticPQ m, WithLog env Message m, MonadUnliftIO m) =>
45rescheduleTaskTime = rescheduleTaskQuery
47class RunTasks (ts :: [*]) m where
49 runTask :: WithLog env Message m => PickedTask -> m ()
55 (Task t ts, TaskMonad t m, StaticPQ m, RunTasks tt m, MonadUnliftIO m) =>
59 runTask (PickedTask s (Jsonb v) initialStartTime) | symbolVal @ts Proxy == s =
63 "Coulndn't decode payload for task " <> s
69 logInfo . T.pack $ "running task " <> task <> " with " <> show t <> " created at " <> show initialStartTime
70 r <- performTask @t @ts @m t
71 when (r == Failure) $ logWarning . T.pack $ "Task " <> task <> " failed"
73 Success -> completeTaskQuery t
74 Failure -> rescheduleTaskTime t
76 task = symbolVal @ts Proxy
77 runTask t = runTask @tt @m t
79 taskNames = symbolVal @ts Proxy : taskNames @tt @m
81instance RunTasks '[] m where
83 runTask (PickedTask s (Jsonb v) _) =
84 logError . T.pack $ "Unknown task " <> s <> " with payload " <> show v
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list