arbiter-core-0.1.0.0
arbiter-core
Safe HaskellNone
LanguageGHC2024

Arbiter.Core

Description

Re-exports commonly used Arbiter functionality.

Synopsis

Core types

High-level operations

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 #leaf :: JobWrite payload -> JobTree payload

A single job with no children.

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)]
  )

Source #data JobTree payload

A tree of jobs. Leaves are single jobs. Finalizers are parents with children that run immediately while the parent waits for completion.

Job results

Archived jobs

Source #data ArchiveJob payload

A completed job in the archive.

Constructors

ArchiveJob 

Fields

Instances

Instances details
Eq payload => Eq (ArchiveJob payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Archive

Methods

#(==) :: ArchiveJob payload -> ArchiveJob payload -> Bool

#(/=) :: ArchiveJob payload -> ArchiveJob payload -> Bool

Generic (ArchiveJob payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Archive

Associated Types

type Rep (ArchiveJob payload) 
Instance details

Defined in Arbiter.Core.Job.Archive

type Rep (ArchiveJob payload) = D1 ('MetaData "ArchiveJob" "Arbiter.Core.Job.Archive" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "ArchiveJob" 'PrefixI 'True) ((S1 ('MetaSel ('Just "archivePrimaryKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64) :*: S1 ('MetaSel ('Just "completedAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UTCTime)) :*: (S1 ('MetaSel ('Just "jobSnapshot") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (JobSnapshot payload)) :*: S1 ('MetaSel ('Just "archivedResult") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Value)))))

Methods

#from :: ArchiveJob payload -> Rep (ArchiveJob payload) x

#to :: Rep (ArchiveJob payload) x -> ArchiveJob payload

Show payload => Show (ArchiveJob payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Archive

Methods

#showsPrec :: Int -> ArchiveJob payload -> ShowS

#show :: ArchiveJob payload -> String

#showList :: [ArchiveJob payload] -> ShowS

type Rep (ArchiveJob payload) Source # 
Instance details

Defined in Arbiter.Core.Job.Archive

type Rep (ArchiveJob payload) = D1 ('MetaData "ArchiveJob" "Arbiter.Core.Job.Archive" "arbiter-core-0.1.0.0-inplace" 'False) (C1 ('MetaCons "ArchiveJob" 'PrefixI 'True) ((S1 ('MetaSel ('Just "archivePrimaryKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64) :*: S1 ('MetaSel ('Just "completedAt") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UTCTime)) :*: (S1 ('MetaSel ('Just "jobSnapshot") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (JobSnapshot payload)) :*: S1 ('MetaSel ('Just "archivedResult") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Value)))))

Typed codecs and parameters

Schema

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

Instances details
FromJSON CronScheduleRow Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

ToJSON CronScheduleRow Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

Eq CronScheduleRow Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

Generic CronScheduleRow Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

Associated Types

type Rep CronScheduleRow 
Instance details

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))))))
Show CronScheduleRow Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

type Rep CronScheduleRow Source # 
Instance details

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.

Instances

Instances details
FromJSON CronScheduleUpdate Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

ToJSON CronScheduleUpdate Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

Eq CronScheduleUpdate Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

Generic CronScheduleUpdate Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

Associated Types

type Rep CronScheduleUpdate 
Instance details

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)))))
Show CronScheduleUpdate Source # 
Instance details

Defined in Arbiter.Core.CronSchedule

type Rep CronScheduleUpdate Source # 
Instance details

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.

Constructors

Live 
Stale 
Draining 

Instances

Instances details
FromJSON WorkerHealth Source # 
Instance details

Defined in Arbiter.Core.Worker

ToJSON WorkerHealth Source # 
Instance details

Defined in Arbiter.Core.Worker

Eq WorkerHealth Source # 
Instance details

Defined in Arbiter.Core.Worker

Generic WorkerHealth Source # 
Instance details

Defined in Arbiter.Core.Worker

Associated Types

type Rep WorkerHealth 
Instance details

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)))
Show WorkerHealth Source # 
Instance details

Defined in Arbiter.Core.Worker

type Rep WorkerHealth Source # 
Instance details

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

Listener types

Notification collides with Database.PostgreSQL.Simple.Notification. Import it from Arbiter.Core.Listen.

Source #data Listener

Everything the worker needs to run a shared listener for one env.

Source #data RunningHub

Mutable hub state behind the slot. Opaque to callers.

Source #data HubLog

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

Register this pool's channels on the env's shared hub for the duration of k. The STM action reports True once they are all subscribed.

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.