arbiter-servant-0.1.0.0: Servant REST API for arbiter job queue
Safe HaskellNone
LanguageGHC2024

Arbiter.Servant.Server

Description

Servant server implementation for the Arbiter job queue REST API.

Hard-coded to use the SimpleDb backend from arbiter-simple.

Security: This module provides no built-in authentication or authorization. All endpoints (including job deletion, DLQ management, and cron schedule updates) are publicly accessible. Add your own auth middleware before exposing this to untrusted networks.

Synopsis

Server handlers

arbiterServer :: forall (registry :: [(Symbol, Type)]). BuildServer registry registry => ArbiterServerConfig registry -> ServerT (ArbiterAPI registry) Handler Source #

Complete Arbiter server at /api/v1/...

arbiterApp :: forall (registry :: [(Symbol, Type)]). (BuildServer registry registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => ArbiterServerConfig registry -> Application Source #

Convert to WAI Application

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

Run the API server on a specific port.

Uses setTimeout 0 (no idle timeout) so that SSE streaming connections are not killed by Warp.

data ArbiterServerConfig (registry :: k) Source #

Configuration for the API server

Constructors

ArbiterServerConfig 

Fields

  • serverEnv :: SimpleEnv registry

    The SimpleEnv containing schema and connection pool

  • enableSSE :: Bool

    Enable Server-Sent Events streaming endpoint. When False, the /events/stream endpoint returns a single "disabled" event and closes immediately, avoiding long-lived connections. The admin UI falls back to polling-only mode. Default: True.

initArbiterServer :: forall (registry :: JobPayloadRegistry). AllQueuesUnique registry => Proxy registry -> ByteString -> Text -> IO (ArbiterServerConfig registry) Source #

Create an ArbiterServerConfig with its own internal connection pool.

Note: Use runMigrationsForRegistry with enableEventStreaming = True to set up the database triggers for SSE.

class BuildServer (registry :: k) (reg :: [(Symbol, Type)]) where Source #

Type class to build server implementations for registry entries

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI reg) Handler Source #

Instances

Instances details
RegistryTables registry => BuildServer (registry :: JobPayloadRegistry) ('[] :: [(Symbol, Type)]) Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI ('[] :: [(Symbol, Type)])) Handler Source #

(JobPayload payload, KnownSymbol tableName, RegistryTables registry) => BuildServer (registry :: JobPayloadRegistry) '['(tableName, payload)] Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI '['(tableName, payload)]) Handler Source #

(BuildServer registry (nextTable ': moreRest), JobPayload payload, KnownSymbol tableName) => BuildServer (registry :: k) ('(tableName, payload) ': (nextTable ': moreRest)) Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI ('(tableName, payload) ': (nextTable ': moreRest))) Handler Source #