-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Concurrent PostgreSQL data consumers
--
-- Library for setting up concurrent consumers of data stored inside
-- PostgreSQL database in a simple, declarative manner.
@package consumers
@version 2.3.1.0
module Database.PostgreSQL.Consumers.Config
-- | Action to take after a job was processed.
data Action
MarkProcessed :: Action
RerunAfter :: Interval -> Action
RerunAt :: UTCTime -> Action
Remove :: Action
-- | Result of processing a job.
data Result
Ok :: Action -> Result
Failed :: Action -> Result
-- | Config of a consumer.
data ConsumerConfig m idx job
ConsumerConfig :: !RawSQL () -> !RawSQL () -> ![SQL] -> !row -> job -> !job -> idx -> !Maybe Channel -> !Int -> !Int -> !job -> m Result -> !SomeException -> job -> m Action -> ConsumerConfig m idx job
[ccJobsTable] :: ConsumerConfig m idx job -> !RawSQL ()
[ccConsumersTable] :: ConsumerConfig m idx job -> !RawSQL ()
[ccJobSelectors] :: ConsumerConfig m idx job -> ![SQL]
[ccJobFetcher] :: ConsumerConfig m idx job -> !row -> job
[ccJobIndex] :: ConsumerConfig m idx job -> !job -> idx
[ccNotificationChannel] :: ConsumerConfig m idx job -> !Maybe Channel
[ccNotificationTimeout] :: ConsumerConfig m idx job -> !Int
[ccMaxRunningJobs] :: ConsumerConfig m idx job -> !Int
[ccProcessJob] :: ConsumerConfig m idx job -> !job -> m Result
[ccOnException] :: ConsumerConfig m idx job -> !SomeException -> job -> m Action
instance GHC.Show.Show Database.PostgreSQL.Consumers.Config.Action
instance GHC.Classes.Ord Database.PostgreSQL.Consumers.Config.Action
instance GHC.Classes.Eq Database.PostgreSQL.Consumers.Config.Action
instance GHC.Show.Show Database.PostgreSQL.Consumers.Config.Result
instance GHC.Classes.Ord Database.PostgreSQL.Consumers.Config.Result
instance GHC.Classes.Eq Database.PostgreSQL.Consumers.Config.Result
module Database.PostgreSQL.Consumers.Consumer
-- | ID of a consumer.
data ConsumerID
-- | Register consumer in the consumers table, so that it can reserve jobs
-- using acquired ID.
registerConsumer :: (MonadBase IO m, MonadMask m, MonadTime m) => ConsumerConfig n idx job -> ConnectionSourceM m -> m ConsumerID
-- | Unregister consumer with a given ID.
unregisterConsumer :: (MonadBase IO m, MonadMask m) => ConsumerConfig n idx job -> ConnectionSourceM m -> ConsumerID -> m ()
instance GHC.Classes.Ord Database.PostgreSQL.Consumers.Consumer.ConsumerID
instance GHC.Classes.Eq Database.PostgreSQL.Consumers.Consumer.ConsumerID
instance Database.PostgreSQL.PQTypes.Format.PQFormat Database.PostgreSQL.Consumers.Consumer.ConsumerID
instance Database.PostgreSQL.PQTypes.FromSQL.FromSQL Database.PostgreSQL.Consumers.Consumer.ConsumerID
instance Database.PostgreSQL.PQTypes.ToSQL.ToSQL Database.PostgreSQL.Consumers.Consumer.ConsumerID
instance GHC.Show.Show Database.PostgreSQL.Consumers.Consumer.ConsumerID
module Database.PostgreSQL.Consumers.Utils
-- | Run an action m that returns a finalizer and perform the
-- returned finalizer after the action action completes.
finalize :: (MonadMask m, MonadBase IO m) => m (m ()) -> m a -> m a
-- | Exception thrown from a child thread.
data ThrownFrom
ThrownFrom :: String -> SomeException -> ThrownFrom
-- | Stop execution of a thread.
stopExecution :: MonadBase IO m => ThreadId -> m ()
-- | Modified version of fork that propagates thrown exceptions to
-- the parent thread.
forkP :: MonadBaseControl IO m => String -> m () -> m ThreadId
-- | Modified version of fork that propagates thrown exceptions to
-- the parent thread.
gforkP :: MonadBaseControl IO m => ThreadGroup -> String -> m () -> m (ThreadId, m (Result ()))
instance GHC.Show.Show Database.PostgreSQL.Consumers.Utils.StopExecution
instance GHC.Show.Show Database.PostgreSQL.Consumers.Utils.ThrownFrom
instance GHC.Exception.Type.Exception Database.PostgreSQL.Consumers.Utils.ThrownFrom
instance GHC.Exception.Type.Exception Database.PostgreSQL.Consumers.Utils.StopExecution
module Database.PostgreSQL.Consumers.Components
-- | Run the consumer. The purpose of the returned monadic action is to
-- wait for currently processed jobs and clean up. This function is best
-- used in conjunction with finalize to seamlessly handle the
-- finalization.
runConsumer :: (MonadBaseControl IO m, MonadLog m, MonadMask m, MonadTime m, Eq idx, Show idx, FromSQL idx, ToSQL idx) => ConsumerConfig m idx job -> ConnectionSourceM m -> m (m ())
runConsumerWithIdleSignal :: (MonadBaseControl IO m, MonadLog m, MonadMask m, MonadTime m, Eq idx, Show idx, FromSQL idx, ToSQL idx) => ConsumerConfig m idx job -> ConnectionSourceM m -> TMVar Bool -> m (m ())
-- | Spawn a thread that generates signals for the dispatcher to probe the
-- database for incoming jobs.
spawnListener :: (MonadBaseControl IO m, MonadMask m) => ConsumerConfig m idx job -> ConnectionSourceM m -> MVar () -> m ThreadId
-- | Spawn a thread that monitors working consumers for activity and
-- periodically updates its own.
spawnMonitor :: forall m idx job. (MonadBaseControl IO m, MonadLog m, MonadMask m, MonadTime m, Show idx, FromSQL idx, ToSQL idx) => ConsumerConfig m idx job -> ConnectionSourceM m -> ConsumerID -> m ThreadId
-- | Spawn a thread that reserves and processes jobs.
spawnDispatcher :: forall m idx job. (MonadBaseControl IO m, MonadLog m, MonadMask m, MonadTime m, Show idx, ToSQL idx) => ConsumerConfig m idx job -> ConnectionSourceM m -> ConsumerID -> MVar () -> TVar (Map ThreadId idx) -> TVar Int -> Maybe (TMVar Bool) -> m ThreadId
module Database.PostgreSQL.Consumers
-- | Run the consumer. The purpose of the returned monadic action is to
-- wait for currently processed jobs and clean up. This function is best
-- used in conjunction with finalize to seamlessly handle the
-- finalization.
runConsumer :: (MonadBaseControl IO m, MonadLog m, MonadMask m, MonadTime m, Eq idx, Show idx, FromSQL idx, ToSQL idx) => ConsumerConfig m idx job -> ConnectionSourceM m -> m (m ())
runConsumerWithIdleSignal :: (MonadBaseControl IO m, MonadLog m, MonadMask m, MonadTime m, Eq idx, Show idx, FromSQL idx, ToSQL idx) => ConsumerConfig m idx job -> ConnectionSourceM m -> TMVar Bool -> m (m ())