arbiter-servant-0.1.0.0
arbiter-servant
Safe HaskellNone
LanguageGHC2024

Arbiter.Servant.Server

Contents

Description

REST API server for the Arbiter job queue, over any MonadArbiter backend.

Security: No built-in authentication. All endpoints are publicly accessible. Add auth middleware before exposing to untrusted networks.

Synopsis

Server

arbiterServer :: forall (registry :: JobPayloadRegistry) (m :: Type -> Type). (BuildServer registry registry, HasRegistry m registry) => ArbiterServerConfig m registry -> ServerT (ArbiterAPI registry) HandlerSource #

Complete Arbiter server at /api/....

arbiterServerHoisted :: forall (registry :: JobPayloadRegistry) (m :: Type -> Type) n. (BuildServer registry registry, HasRegistry m registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => (forall x. Handler x -> n x) -> ArbiterServerConfig m registry -> ServerT (ArbiterAPI registry) nSource #

Hoisted server for integration into a route tree using a custom monad.

arbiterApp :: forall (registry :: JobPayloadRegistry) (m :: Type -> Type). (BuildServer registry registry, HasRegistry m registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => ArbiterServerConfig m registry -> ApplicationSource #

Convert to WAI Application.

runArbiterAPI :: forall (registry :: JobPayloadRegistry) (m :: Type -> Type). (BuildServer registry registry, HasRegistry m registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => Port -> ArbiterServerConfig m registry -> IO ()Source #

Run the API server on a port. Prints a start line to stdout.

data ArbiterServerConfig (m :: Type -> Type) (registry :: JobPayloadRegistry)Source #

Configuration for the API server. m is the backend monad every handler's statements run in. createArbiterServer fills the cache fields.

Constructors

ArbiterServerConfig 

Fields

createArbiterServer :: forall m (registry :: JobPayloadRegistry). HasRegistry m registry => (forall a. m a -> IO a) -> IO (ArbiterServerConfig m registry)Source #

Create an ArbiterServerConfig over a backend runner. SSE needs the enableEventStreaming migration option and a backend with a listener.

defaultStatsCacheTtl :: NominalDiffTimeSource #

Stats are read live by default.

defaultMaintenanceInterval :: NominalDiffTimeSource #

No minimum gap. Each call runs every ordinary operation. Concurrent callers exclude each other on the gate.

defaultMaintenanceBucketIdle :: NominalDiffTime#

Age after which an idle rate-limit bucket is pruned.

defaultMaintenanceSparseInterval :: NominalDiffTime#

Gap the bucket prune and the concurrency reconcile-and-prune keep.

defaultMaintenanceTimeout :: NominalDiffTime#

Statement timeout for one maintenance operation.

class BuildServer (registry :: JobPayloadRegistry) (reg :: JobPayloadRegistry) whereSource #

Builds a registry's per-queue server implementations. registry is the whole registry. reg is the part still to build. Each result type needs FromJSON and an EncodeJobResult instance. Each payload type needs JobPayload.

Methods

buildServer :: forall (m :: Type -> Type). HasRegistry m registry => ArbiterServerConfig m registry -> ServerT (RegistryToAPI reg) HandlerSource #

The server for the queues in reg, then the shared routes.

Instances

Instances details
(RegistryAdmissionPolicies registry, RegistryTables registry) => BuildServer registry ('[] :: [QueueSpec]) Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: forall (m :: Type -> Type). HasRegistry m registry => ArbiterServerConfig m registry -> ServerT (RegistryToAPI ('[] :: [QueueSpec])) HandlerSource #

(BuildServer registry rest, EncodeJobResult (SpecResult spec), JobPayload (SpecPayload spec), KnownSymbol (SpecName spec)) => BuildServer registry (spec ': rest) Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: forall (m :: Type -> Type). HasRegistry m registry => ArbiterServerConfig m registry -> ServerT (RegistryToAPI (spec ': rest)) HandlerSource #

data CacheCell aSource #

Keyed TTL cache. createArbiterServer creates each cell.