| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Arbiter.Core
Description
Re-exports commonly used Arbiter functionality.
Synopsis
- module Arbiter.Core.Job.DLQ
- module Arbiter.Core.Job.Types
- module Arbiter.Core.MonadArbiter
- module Arbiter.Core.QueueRegistry
- module Arbiter.Core.HighLevel
- (<~~) :: JobWrite payload -> NonEmpty (JobWrite payload) -> JobTree payload
- leaf :: JobWrite payload -> JobTree payload
- rollup :: JobWrite payload -> NonEmpty (JobTree payload) -> JobTree payload
- data JobTree payload
- module Arbiter.Core.JobResult
- data ArchiveJob payload = ArchiveJob {
- archivePrimaryKey :: Int64
- completedAt :: UTCTime
- jobSnapshot :: JobSnapshot payload
- archivedResult :: Maybe Value
- module Arbiter.Core.Codec
- module Arbiter.Core.Job.Schema
- module Arbiter.Core.Job.Schema.Groups
- module Arbiter.Core.Exceptions
- data CronScheduleRow = CronScheduleRow {
- name :: Text
- queueName :: Text
- defaultExpression :: Text
- defaultOverlap :: Text
- defaultTimezone :: Maybe Text
- overrideExpression :: Maybe Text
- overrideOverlap :: Maybe Text
- overrideTimezone :: Maybe Text
- enabled :: Bool
- lastFiredAt :: Maybe UTCTime
- lastCheckedAt :: Maybe UTCTime
- runRequestedAt :: Maybe UTCTime
- lastManualRunAt :: Maybe UTCTime
- createdAt :: UTCTime
- updatedAt :: UTCTime
- data CronScheduleUpdate = CronScheduleUpdate {
- overrideExpression :: Maybe (Maybe Text)
- overrideOverlap :: Maybe (Maybe Text)
- overrideTimezone :: Maybe (Maybe Text)
- enabled :: Maybe Bool
- effectiveExpression :: CronScheduleRow -> Text
- effectiveOverlap :: CronScheduleRow -> Text
- effectiveTimezone :: CronScheduleRow -> Maybe Text
- data WorkerHealth
- workerHealthFromText :: Text -> Either Text WorkerHealth
- module Arbiter.Core.PoolConfig
- data Listener
- data RunningHub
- data HubLog = HubLog {
- hubRecovered :: Text -> IO ()
- hubWarn :: Text -> IO ()
- hubError :: Text -> IO ()
- hubRepeatInterval :: NominalDiffTime
- withChannels :: MonadUnliftIO m => Listener -> HubLog -> [(ByteString, Notification -> m ())] -> (STM Bool -> m a) -> m a
- newPoolListener :: ((Connection -> IO ()) -> IO ()) -> IO Listener
- data DedicatedListen
- newDedicatedListen :: MonadIO m => ByteString -> m DedicatedListen
- dedicatedListener :: DedicatedListen -> Listener
Core types
module Arbiter.Core.Job.DLQ
module Arbiter.Core.Job.Types
module Arbiter.Core.MonadArbiter
module Arbiter.Core.QueueRegistry
High-level operations
module Arbiter.Core.HighLevel
Job tree DSL
Source #(<~~) :: JobWrite payload -> NonEmpty (JobWrite payload) -> JobTree payload infixr 6
Infix rollup for leaf-only children.
defaultJob reducer <~~ (defaultJob mapper1 :| [defaultJob mapper2])
Source #rollup :: JobWrite payload -> NonEmpty (JobTree payload) -> JobTree payload
A finalizer running once no child of it is left in the main queue. Nested rollups do not merge on their own. An intermediate finalizer returns the merged value for results to travel upward.
rollup (defaultJob root) ( leaf (defaultJob leaf1) :| [leaf (defaultJob leaf2)] )
A tree of jobs. Leaves are single jobs. Finalizers are parents with children that run immediately while the parent waits for completion.
Job results
module Arbiter.Core.JobResult
Archived jobs
Source #data ArchiveJob payload
A completed job in the archive.
Constructors
| ArchiveJob | |
Fields
| |
Instances
Typed codecs and parameters
module Arbiter.Core.Codec
Schema
module Arbiter.Core.Job.Schema
Exceptions
module Arbiter.Core.Exceptions
Cron schedule overrides and worker health
The admin row records share field names with each other and with Job.
Unqualified use needs DuplicateRecordFields or OverloadedRecordDot.
Source #data CronScheduleRow
A row from the cron_schedules table.
Constructors
| CronScheduleRow | |
Fields
| |
Instances
| FromJSON CronScheduleRow Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #parseJSON :: Value -> Parser CronScheduleRow #parseJSONList :: Value -> Parser [CronScheduleRow] | |||||
| ToJSON CronScheduleRow Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #toJSON :: CronScheduleRow -> Value #toEncoding :: CronScheduleRow -> Encoding #toJSONList :: [CronScheduleRow] -> Value #toEncodingList :: [CronScheduleRow] -> Encoding #omitField :: CronScheduleRow -> Bool | |||||
| Eq CronScheduleRow Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #(==) :: CronScheduleRow -> CronScheduleRow -> Bool #(/=) :: CronScheduleRow -> CronScheduleRow -> Bool | |||||
| Generic CronScheduleRow Source # | |||||
Defined in Arbiter.Core.CronSchedule Associated Types
Methods #from :: CronScheduleRow -> Rep CronScheduleRow x #to :: Rep CronScheduleRow x -> CronScheduleRow | |||||
| Show CronScheduleRow Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #showsPrec :: Int -> CronScheduleRow -> ShowS #show :: CronScheduleRow -> String #showList :: [CronScheduleRow] -> ShowS | |||||
| type Rep CronScheduleRow Source # | |||||
Defined in Arbiter.Core.CronSchedule type Rep CronScheduleRow = D1 ('MetaData "CronScheduleRow" "Arbiter.Core.CronSchedule" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "CronScheduleRow" 'PrefixI 'True) (((S1 ('MetaSel ('Just "name") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: (S1 ('MetaSel ('Just "queueName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "defaultExpression") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))) :*: ((S1 ('MetaSel ('Just "defaultOverlap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "defaultTimezone") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))) :*: (S1 ('MetaSel ('Just "overrideExpression") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "overrideOverlap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))) :*: (((S1 ('MetaSel ('Just "overrideTimezone") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text)) :*: S1 ('MetaSel ('Just "enabled") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)) :*: (S1 ('MetaSel ('Just "lastFiredAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe UTCTime)) :*: S1 ('MetaSel ('Just "lastCheckedAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe UTCTime)))) :*: ((S1 ('MetaSel ('Just "runRequestedAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe UTCTime)) :*: S1 ('MetaSel ('Just "lastManualRunAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe UTCTime))) :*: (S1 ('MetaSel ('Just "createdAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UTCTime) :*: S1 ('MetaSel ('Just "updatedAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UTCTime)))))) | |||||
Source #data CronScheduleUpdate
A patch over a cron schedule's overrides. Nothing leaves a field unchanged, Just
Nothing clears the override back to the default, Just (Just v) sets it.
Constructors
| CronScheduleUpdate | |
Fields
| |
Instances
| FromJSON CronScheduleUpdate Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #parseJSON :: Value -> Parser CronScheduleUpdate #parseJSONList :: Value -> Parser [CronScheduleUpdate] | |||||
| ToJSON CronScheduleUpdate Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #toJSON :: CronScheduleUpdate -> Value #toEncoding :: CronScheduleUpdate -> Encoding #toJSONList :: [CronScheduleUpdate] -> Value #toEncodingList :: [CronScheduleUpdate] -> Encoding #omitField :: CronScheduleUpdate -> Bool | |||||
| Eq CronScheduleUpdate Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #(==) :: CronScheduleUpdate -> CronScheduleUpdate -> Bool #(/=) :: CronScheduleUpdate -> CronScheduleUpdate -> Bool | |||||
| Generic CronScheduleUpdate Source # | |||||
Defined in Arbiter.Core.CronSchedule Associated Types
Methods #from :: CronScheduleUpdate -> Rep CronScheduleUpdate x #to :: Rep CronScheduleUpdate x -> CronScheduleUpdate | |||||
| Show CronScheduleUpdate Source # | |||||
Defined in Arbiter.Core.CronSchedule Methods #showsPrec :: Int -> CronScheduleUpdate -> ShowS #show :: CronScheduleUpdate -> String #showList :: [CronScheduleUpdate] -> ShowS | |||||
| type Rep CronScheduleUpdate Source # | |||||
Defined in Arbiter.Core.CronSchedule type Rep CronScheduleUpdate = D1 ('MetaData "CronScheduleUpdate" "Arbiter.Core.CronSchedule" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "CronScheduleUpdate" 'PrefixI 'True) ((S1 ('MetaSel ('Just "overrideExpression") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Maybe Text))) :*: S1 ('MetaSel ('Just "overrideOverlap") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Maybe Text)))) :*: (S1 ('MetaSel ('Just "overrideTimezone") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Maybe Text))) :*: S1 ('MetaSel ('Just "enabled") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Bool))))) | |||||
Source #effectiveExpression :: CronScheduleRow -> Text
The override expression if set, else the default.
Source #effectiveOverlap :: CronScheduleRow -> Text
The override overlap policy if set, else the default.
Source #effectiveTimezone :: CronScheduleRow -> Maybe Text
The override timezone if set, else the default. Nothing means UTC.
Source #data WorkerHealth
Heartbeat-derived health of a worker. Independent of its paused flag.
Instances
| FromJSON WorkerHealth Source # | |||||
Defined in Arbiter.Core.Worker | |||||
| ToJSON WorkerHealth Source # | |||||
Defined in Arbiter.Core.Worker Methods #toJSON :: WorkerHealth -> Value #toEncoding :: WorkerHealth -> Encoding #toJSONList :: [WorkerHealth] -> Value #toEncodingList :: [WorkerHealth] -> Encoding #omitField :: WorkerHealth -> Bool | |||||
| Eq WorkerHealth Source # | |||||
Defined in Arbiter.Core.Worker | |||||
| Generic WorkerHealth Source # | |||||
Defined in Arbiter.Core.Worker Associated Types
| |||||
| Show WorkerHealth Source # | |||||
Defined in Arbiter.Core.Worker Methods #showsPrec :: Int -> WorkerHealth -> ShowS #show :: WorkerHealth -> String #showList :: [WorkerHealth] -> ShowS | |||||
| type Rep WorkerHealth Source # | |||||
Defined in Arbiter.Core.Worker type Rep WorkerHealth = D1 ('MetaData "WorkerHealth" "Arbiter.Core.Worker" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "Live" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Stale" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Draining" 'PrefixI 'False) (U1 :: Type -> Type))) | |||||
Source #workerHealthFromText :: Text -> Either Text WorkerHealth
Decode the health SQL token into a WorkerHealth.
Connection pool settings
module Arbiter.Core.PoolConfig
Listener types
Notification collides with Database.PostgreSQL.Simple.Notification.
Import it from Arbiter.Core.Listen.
Source #data RunningHub
Mutable hub state behind the slot. Opaque to callers.
How a registrant wants hub events reported.
Constructors
| HubLog | |
Fields
| |
Source #withChannels :: MonadUnliftIO m => Listener -> HubLog -> [(ByteString, Notification -> m ())] -> (STM Bool -> m a) -> m a
Source #newPoolListener :: ((Connection -> IO ()) -> IO ()) -> IO Listener
Build a pool-backed Listener with a fresh hub slot from a connection runner.
Source #data DedicatedListen
A listener over its own libpq connection opened from a connection string.
Source #newDedicatedListen :: MonadIO m => ByteString -> m DedicatedListen
Allocate a DedicatedListen from a connection string, once at startup.
Source #dedicatedListener :: DedicatedListen -> Listener
The Listener for a DedicatedListen.