capataz 0.2.0.0 → 0.2.1.0
raw patch · 5 files changed
+142/−17 lines, 5 filesdep ~pretty-showdep ~tastydep ~tasty-hunitPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: pretty-show, tasty, tasty-hunit
API changes (from Hackage documentation)
- Control.Concurrent.Capataz.Internal.Types: instance GHC.Exception.Exception Control.Concurrent.Capataz.Internal.Types.CapatazError
- Control.Concurrent.Capataz.Internal.Types: instance GHC.Exception.Exception Control.Concurrent.Capataz.Internal.Types.CapatazSignal
- Control.Concurrent.Capataz.Internal.Types: instance GHC.Exception.Exception Control.Concurrent.Capataz.Internal.Types.ProcessError
+ Capataz: buildLogWorkerOptions :: (MonadUnliftIO m, MonadIO m0) => LogOptions -> WorkerName -> Int -> (WorkerOptions m -> WorkerOptions m) -> m0 (WorkerOptions m, LogFunc)
+ Capataz: buildLogWorkerOptions1 :: (MonadUnliftIO m, MonadIO m0) => LogOptions -> WorkerName -> Natural -> (WorkerOptions m -> WorkerOptions m) -> m0 (WorkerOptions m, LogFunc)
+ Capataz: buildLogWorkerSpec :: (MonadUnliftIO m, MonadIO m0) => LogOptions -> WorkerName -> Int -> (WorkerOptions m -> WorkerOptions m) -> m0 (ProcessSpec m, LogFunc)
+ Capataz: buildLogWorkerSpec1 :: (MonadUnliftIO m, MonadIO m0) => LogOptions -> WorkerName -> Natural -> (WorkerOptions m -> WorkerOptions m) -> m0 (ProcessSpec m, LogFunc)
+ Control.Concurrent.Capataz: buildWorkerOptions1 :: Monad m => WorkerName -> (WorkerId -> m ()) -> (WorkerOptions m -> WorkerOptions m) -> WorkerOptions m
+ Control.Concurrent.Capataz: workerSpec1 :: Monad m => WorkerName -> (WorkerId -> m ()) -> (WorkerOptions m -> WorkerOptions m) -> ProcessSpec m
+ Control.Concurrent.Capataz.Internal.Types: instance GHC.Exception.Type.Exception Control.Concurrent.Capataz.Internal.Types.CapatazError
+ Control.Concurrent.Capataz.Internal.Types: instance GHC.Exception.Type.Exception Control.Concurrent.Capataz.Internal.Types.CapatazSignal
+ Control.Concurrent.Capataz.Internal.Types: instance GHC.Exception.Type.Exception Control.Concurrent.Capataz.Internal.Types.ProcessError
+ Control.Concurrent.Capataz.Lens: (&) :: () => a -> (a -> b) -> b
+ Control.Concurrent.Capataz.Lens: (^.) :: () => s -> Getting a s a -> a
+ Control.Concurrent.Capataz.Lens: infixl 1 &
+ Control.Concurrent.Capataz.Lens: infixl 8 ^.
+ Control.Concurrent.Capataz.Lens: onSystemEventL :: Functor f => ((CapatazEvent -> m ()) -> f (CapatazEvent -> m ())) -> CapatazOptions m -> f (CapatazOptions m)
+ Control.Concurrent.Capataz.Lens: set :: () => ASetter s t a b -> b -> s -> t
+ Control.Concurrent.Capataz.Lens: supervisorIntensityL :: (HasSupervisorIntensity s, Functor f) => (Int -> f Int) -> s -> f s
+ Control.Concurrent.Capataz.Lens: supervisorOnFailureL :: (HasSupervisorFailureCallback s, Functor f) => ((SomeException -> m ()) -> f (SomeException -> m ())) -> s m -> f (s m)
+ Control.Concurrent.Capataz.Lens: supervisorOnIntensityReachedL :: (HasSupervisorIntensityReachedCallback s, Functor f) => (m () -> f (m ())) -> s m -> f (s m)
+ Control.Concurrent.Capataz.Lens: supervisorPeriodSecondsL :: (HasSupervisorPeriodSeconds s, Functor f) => (NominalDiffTime -> f NominalDiffTime) -> s -> f s
+ Control.Concurrent.Capataz.Lens: supervisorProcessSpecListL :: (HasSupervisorProcessSpecList s, Functor f) => ([ProcessSpec m] -> f [ProcessSpec m]) -> s m -> f (s m)
+ Control.Concurrent.Capataz.Lens: supervisorProcessTerminationOrderL :: (HasSupervisorProcessTerminationOrder s, Functor f) => (ProcessTerminationOrder -> f ProcessTerminationOrder) -> s -> f s
+ Control.Concurrent.Capataz.Lens: supervisorRestartStrategyL :: (HasSupervisorRestartStrategy s, Functor f) => (SupervisorRestartStrategy -> f SupervisorRestartStrategy) -> s -> f s
+ Control.Concurrent.Capataz.Lens: view :: MonadReader s m => Getting a s a -> m a
+ Control.Concurrent.Capataz.Lens: workerOnCompletionL :: Functor f => (m () -> f (m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz.Lens: workerOnFailureL :: Functor f => ((SomeException -> m ()) -> f (SomeException -> m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz.Lens: workerOnTerminationL :: Functor f => (m () -> f (m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz.Lens: workerRestartStrategyL :: Functor f => (WorkerRestartStrategy -> f WorkerRestartStrategy) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz.Lens: workerTerminationPolicyL :: Functor f => (WorkerTerminationPolicy -> f WorkerTerminationPolicy) -> WorkerOptions m -> f (WorkerOptions m)
- Control.Concurrent.Capataz: ProcessCallbackFailed :: !WorkerId -> !(Maybe SomeException) -> !SomeException -> !CallbackType -> ProcessError
+ Control.Concurrent.Capataz: ProcessCallbackFailed :: !WorkerId -> !Maybe SomeException -> !SomeException -> !CallbackType -> ProcessError
- Control.Concurrent.Capataz: SupervisorSpec :: (SupervisorOptions m) -> ProcessSpec m
+ Control.Concurrent.Capataz: SupervisorSpec :: SupervisorOptions m -> ProcessSpec m
- Control.Concurrent.Capataz: WorkerSpec :: (WorkerOptions m) -> ProcessSpec m
+ Control.Concurrent.Capataz: WorkerSpec :: WorkerOptions m -> ProcessSpec m
- Control.Concurrent.Capataz: [$sel:processError:ProcessCallbackFailed] :: ProcessError -> !(Maybe SomeException)
+ Control.Concurrent.Capataz: [$sel:processError:ProcessCallbackFailed] :: ProcessError -> !Maybe SomeException
- Control.Concurrent.Capataz: data TeardownResult :: *
+ Control.Concurrent.Capataz: data TeardownResult
- Control.Concurrent.Capataz: workerOnCompletionL :: (Functor f) => (m () -> f (m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz: workerOnCompletionL :: Functor f => (m () -> f (m ())) -> WorkerOptions m -> f (WorkerOptions m)
- Control.Concurrent.Capataz: workerOnFailureL :: (Functor f) => ((SomeException -> m ()) -> f (SomeException -> m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz: workerOnFailureL :: Functor f => ((SomeException -> m ()) -> f (SomeException -> m ())) -> WorkerOptions m -> f (WorkerOptions m)
- Control.Concurrent.Capataz.Event: ProcessCallbackExecuted :: !SupervisorId -> !SupervisorName -> !ProcessThreadId -> !ProcessId -> !ProcessName -> !ProcessType -> !(Maybe SomeException) -> !CallbackType -> !UTCTime -> CapatazEvent
+ Control.Concurrent.Capataz.Event: ProcessCallbackExecuted :: !SupervisorId -> !SupervisorName -> !ProcessThreadId -> !ProcessId -> !ProcessName -> !ProcessType -> !Maybe SomeException -> !CallbackType -> !UTCTime -> CapatazEvent
- Control.Concurrent.Capataz.Event: [$sel:processCallbackError:InvalidSupervisorStatusReached] :: CapatazEvent -> !(Maybe SomeException)
+ Control.Concurrent.Capataz.Event: [$sel:processCallbackError:InvalidSupervisorStatusReached] :: CapatazEvent -> !Maybe SomeException
- Control.Concurrent.Capataz.Internal.Supervisor: execCapatazRestartStrategy :: (MonadUnliftIO m) => SupervisorEnv m -> ProcessId -> ProcessSpec m -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: execCapatazRestartStrategy :: MonadUnliftIO m => SupervisorEnv m -> ProcessId -> ProcessSpec m -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: execRestartAction :: (MonadUnliftIO m) => SupervisorEnv m -> ProcessId -> ProcessSpec m -> Text -> UTCTime -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: execRestartAction :: MonadUnliftIO m => SupervisorEnv m -> ProcessId -> ProcessSpec m -> Text -> UTCTime -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: forkSupervisor :: (MonadUnliftIO m) => ParentSupervisorEnv m -> SupervisorOptions m -> Maybe (ProcessId, RestartCount) -> m (Supervisor m)
+ Control.Concurrent.Capataz.Internal.Supervisor: forkSupervisor :: MonadUnliftIO m => ParentSupervisorEnv m -> SupervisorOptions m -> Maybe (ProcessId, RestartCount) -> m (Supervisor m)
- Control.Concurrent.Capataz.Internal.Supervisor: haltSupervisor :: (MonadUnliftIO m) => Text -> SupervisorEnv m -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: haltSupervisor :: MonadUnliftIO m => Text -> SupervisorEnv m -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleControlAction :: (MonadUnliftIO m) => SupervisorEnv m -> ControlAction m -> m Bool
+ Control.Concurrent.Capataz.Internal.Supervisor: handleControlAction :: MonadUnliftIO m => SupervisorEnv m -> ControlAction m -> m Bool
- Control.Concurrent.Capataz.Internal.Supervisor: handleMonitorEvent :: (MonadUnliftIO m) => SupervisorEnv m -> MonitorEvent -> m Bool
+ Control.Concurrent.Capataz.Internal.Supervisor: handleMonitorEvent :: MonadUnliftIO m => SupervisorEnv m -> MonitorEvent -> m Bool
- Control.Concurrent.Capataz.Internal.Supervisor: handleProcessCompleted :: (MonadUnliftIO m) => SupervisorEnv m -> ProcessId -> UTCTime -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleProcessCompleted :: MonadUnliftIO m => SupervisorEnv m -> ProcessId -> UTCTime -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleProcessFailed :: (MonadUnliftIO m) => SupervisorEnv m -> WorkerId -> SomeException -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleProcessFailed :: MonadUnliftIO m => SupervisorEnv m -> WorkerId -> SomeException -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleProcessTerminated :: (MonadUnliftIO m) => SupervisorEnv m -> ProcessId -> Text -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleProcessTerminated :: MonadUnliftIO m => SupervisorEnv m -> ProcessId -> Text -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleSupervisorFailed :: (MonadUnliftIO m) => SupervisorEnv m -> Supervisor m -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleSupervisorFailed :: MonadUnliftIO m => SupervisorEnv m -> Supervisor m -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleSupervisorMessage :: (MonadUnliftIO m) => SupervisorEnv m -> SupervisorMessage m -> m Bool
+ Control.Concurrent.Capataz.Internal.Supervisor: handleSupervisorMessage :: MonadUnliftIO m => SupervisorEnv m -> SupervisorMessage m -> m Bool
- Control.Concurrent.Capataz.Internal.Supervisor: handleSupervisorTerminated :: (MonadUnliftIO m) => SupervisorEnv m -> Supervisor m -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleSupervisorTerminated :: MonadUnliftIO m => SupervisorEnv m -> Supervisor m -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleWorkerCompleted :: (MonadUnliftIO m) => SupervisorEnv m -> Worker m -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleWorkerCompleted :: MonadUnliftIO m => SupervisorEnv m -> Worker m -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleWorkerFailed :: (MonadUnliftIO m) => SupervisorEnv m -> Worker m -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleWorkerFailed :: MonadUnliftIO m => SupervisorEnv m -> Worker m -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: handleWorkerTerminated :: (MonadUnliftIO m) => SupervisorEnv m -> Worker m -> Int -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: handleWorkerTerminated :: MonadUnliftIO m => SupervisorEnv m -> Worker m -> Int -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: restartProcessList :: (MonadUnliftIO m) => SupervisorEnv m -> WorkerId -> RestartCount -> m [Process m]
+ Control.Concurrent.Capataz.Internal.Supervisor: restartProcessList :: MonadUnliftIO m => SupervisorEnv m -> WorkerId -> RestartCount -> m [Process m]
- Control.Concurrent.Capataz.Internal.Supervisor: restartSupervisor :: (MonadUnliftIO m) => ParentSupervisorEnv m -> SupervisorOptions m -> ProcessId -> RestartCount -> m (Process m)
+ Control.Concurrent.Capataz.Internal.Supervisor: restartSupervisor :: MonadUnliftIO m => ParentSupervisorEnv m -> SupervisorOptions m -> ProcessId -> RestartCount -> m (Process m)
- Control.Concurrent.Capataz.Internal.Supervisor: restartWorker :: (MonadUnliftIO m) => SupervisorEnv m -> WorkerOptions m -> WorkerId -> RestartCount -> m (Process m)
+ Control.Concurrent.Capataz.Internal.Supervisor: restartWorker :: MonadUnliftIO m => SupervisorEnv m -> WorkerOptions m -> WorkerId -> RestartCount -> m (Process m)
- Control.Concurrent.Capataz.Internal.Supervisor: supervisorLoop :: (MonadUnliftIO m) => (forall b. m b -> m b) -> ParentSupervisorEnv m -> SupervisorEnv m -> RestartCount -> m ()
+ Control.Concurrent.Capataz.Internal.Supervisor: supervisorLoop :: MonadUnliftIO m => (forall b. m b -> m b) -> ParentSupervisorEnv m -> SupervisorEnv m -> RestartCount -> m ()
- Control.Concurrent.Capataz.Internal.Supervisor: supervisorMain :: (MonadUnliftIO m) => ParentSupervisorEnv m -> SupervisorOptions m -> SupervisorId -> RestartCount -> m (Supervisor m)
+ Control.Concurrent.Capataz.Internal.Supervisor: supervisorMain :: MonadUnliftIO m => ParentSupervisorEnv m -> SupervisorOptions m -> SupervisorId -> RestartCount -> m (Supervisor m)
- Control.Concurrent.Capataz.Internal.Types: Capataz :: !(Supervisor m) -> !Teardown -> Capataz m
+ Control.Concurrent.Capataz.Internal.Types: Capataz :: !Supervisor m -> !Teardown -> Capataz m
- Control.Concurrent.Capataz.Internal.Types: CapatazOptions :: !SupervisorName -> !Int -> !NominalDiffTime -> !SupervisorRestartStrategy -> ![ProcessSpec m] -> !ProcessTerminationOrder -> !(m ()) -> !(SomeException -> m ()) -> !(CapatazEvent -> m ()) -> CapatazOptions m
+ Control.Concurrent.Capataz.Internal.Types: CapatazOptions :: !SupervisorName -> !Int -> !NominalDiffTime -> !SupervisorRestartStrategy -> ![ProcessSpec m] -> !ProcessTerminationOrder -> !m () -> !SomeException -> m () -> !CapatazEvent -> m () -> CapatazOptions m
- Control.Concurrent.Capataz.Internal.Types: ControlAction :: !(ControlAction m) -> SupervisorMessage m
+ Control.Concurrent.Capataz.Internal.Types: ControlAction :: !ControlAction m -> SupervisorMessage m
- Control.Concurrent.Capataz.Internal.Types: ForkSupervisor :: !(SupervisorOptions m) -> !(Supervisor m -> m ()) -> ControlAction m
+ Control.Concurrent.Capataz.Internal.Types: ForkSupervisor :: !SupervisorOptions m -> !Supervisor m -> m () -> ControlAction m
- Control.Concurrent.Capataz.Internal.Types: ForkWorker :: !(WorkerOptions m) -> !(WorkerId -> m ()) -> ControlAction m
+ Control.Concurrent.Capataz.Internal.Types: ForkWorker :: !WorkerOptions m -> !WorkerId -> m () -> ControlAction m
- Control.Concurrent.Capataz.Internal.Types: ParentSupervisorEnv :: !SupervisorId -> !SupervisorName -> !(SupervisorMessage m -> m ()) -> !(CapatazEvent -> m ()) -> ParentSupervisorEnv m
+ Control.Concurrent.Capataz.Internal.Types: ParentSupervisorEnv :: !SupervisorId -> !SupervisorName -> !SupervisorMessage m -> m () -> !CapatazEvent -> m () -> ParentSupervisorEnv m
- Control.Concurrent.Capataz.Internal.Types: ProcessCallbackExecuted :: !SupervisorId -> !SupervisorName -> !ProcessThreadId -> !ProcessId -> !ProcessName -> !ProcessType -> !(Maybe SomeException) -> !CallbackType -> !UTCTime -> CapatazEvent
+ Control.Concurrent.Capataz.Internal.Types: ProcessCallbackExecuted :: !SupervisorId -> !SupervisorName -> !ProcessThreadId -> !ProcessId -> !ProcessName -> !ProcessType -> !Maybe SomeException -> !CallbackType -> !UTCTime -> CapatazEvent
- Control.Concurrent.Capataz.Internal.Types: ProcessCallbackFailed :: !WorkerId -> !(Maybe SomeException) -> !SomeException -> !CallbackType -> ProcessError
+ Control.Concurrent.Capataz.Internal.Types: ProcessCallbackFailed :: !WorkerId -> !Maybe SomeException -> !SomeException -> !CallbackType -> ProcessError
- Control.Concurrent.Capataz.Internal.Types: ProcessEnv :: !ProcessId -> !ProcessName -> !(Async ()) -> !UTCTime -> !WorkerRestartStrategy -> ProcessEnv
+ Control.Concurrent.Capataz.Internal.Types: ProcessEnv :: !ProcessId -> !ProcessName -> !Async () -> !UTCTime -> !WorkerRestartStrategy -> ProcessEnv
- Control.Concurrent.Capataz.Internal.Types: Supervisor :: !SupervisorId -> !SupervisorName -> !(SupervisorOptions m) -> !UTCTime -> !(Async ()) -> (SupervisorMessage m -> m ()) -> !(SupervisorEnv m) -> Supervisor m
+ Control.Concurrent.Capataz.Internal.Types: Supervisor :: !SupervisorId -> !SupervisorName -> !SupervisorOptions m -> !UTCTime -> !Async () -> (SupervisorMessage m -> m ()) -> !SupervisorEnv m -> Supervisor m
- Control.Concurrent.Capataz.Internal.Types: SupervisorEnv :: !SupervisorId -> !SupervisorName -> !(SupervisorMessage m -> m ()) -> !(STM (SupervisorMessage m)) -> !(IORef (ProcessMap m)) -> !(TVar SupervisorStatus) -> !(SupervisorOptions m) -> !Int -> !NominalDiffTime -> !SupervisorRestartStrategy -> !ProcessTerminationOrder -> !(m ()) -> !(SomeException -> m ()) -> !(CapatazEvent -> m ()) -> SupervisorEnv m
+ Control.Concurrent.Capataz.Internal.Types: SupervisorEnv :: !SupervisorId -> !SupervisorName -> !SupervisorMessage m -> m () -> !STM (SupervisorMessage m) -> !IORef (ProcessMap m) -> !TVar SupervisorStatus -> !SupervisorOptions m -> !Int -> !NominalDiffTime -> !SupervisorRestartStrategy -> !ProcessTerminationOrder -> !m () -> !SomeException -> m () -> !CapatazEvent -> m () -> SupervisorEnv m
- Control.Concurrent.Capataz.Internal.Types: SupervisorOptions :: Text -> !Int -> !NominalDiffTime -> !SupervisorRestartStrategy -> ![ProcessSpec m] -> !ProcessTerminationOrder -> !(m ()) -> !(SomeException -> m ()) -> SupervisorOptions m
+ Control.Concurrent.Capataz.Internal.Types: SupervisorOptions :: Text -> !Int -> !NominalDiffTime -> !SupervisorRestartStrategy -> ![ProcessSpec m] -> !ProcessTerminationOrder -> !m () -> !SomeException -> m () -> SupervisorOptions m
- Control.Concurrent.Capataz.Internal.Types: SupervisorProcess :: !(Supervisor m) -> Process m
+ Control.Concurrent.Capataz.Internal.Types: SupervisorProcess :: !Supervisor m -> Process m
- Control.Concurrent.Capataz.Internal.Types: SupervisorSpec :: (SupervisorOptions m) -> ProcessSpec m
+ Control.Concurrent.Capataz.Internal.Types: SupervisorSpec :: SupervisorOptions m -> ProcessSpec m
- Control.Concurrent.Capataz.Internal.Types: TerminateProcess :: !ProcessId -> !Text -> !(Bool -> m ()) -> ControlAction m
+ Control.Concurrent.Capataz.Internal.Types: TerminateProcess :: !ProcessId -> !Text -> !Bool -> m () -> ControlAction m
- Control.Concurrent.Capataz.Internal.Types: Worker :: !WorkerId -> !(Async ()) -> !UTCTime -> !WorkerName -> !(WorkerOptions m) -> Worker m
+ Control.Concurrent.Capataz.Internal.Types: Worker :: !WorkerId -> !Async () -> !UTCTime -> !WorkerName -> !WorkerOptions m -> Worker m
- Control.Concurrent.Capataz.Internal.Types: WorkerOptions :: WorkerAction m -> !WorkerName -> !(SomeException -> m ()) -> !(m ()) -> !(m ()) -> !WorkerTerminationPolicy -> !WorkerRestartStrategy -> WorkerOptions m
+ Control.Concurrent.Capataz.Internal.Types: WorkerOptions :: WorkerAction m -> !WorkerName -> !SomeException -> m () -> !m () -> !m () -> !WorkerTerminationPolicy -> !WorkerRestartStrategy -> WorkerOptions m
- Control.Concurrent.Capataz.Internal.Types: WorkerProcess :: !(Worker m) -> Process m
+ Control.Concurrent.Capataz.Internal.Types: WorkerProcess :: !Worker m -> Process m
- Control.Concurrent.Capataz.Internal.Types: WorkerSpec :: (WorkerOptions m) -> ProcessSpec m
+ Control.Concurrent.Capataz.Internal.Types: WorkerSpec :: WorkerOptions m -> ProcessSpec m
- Control.Concurrent.Capataz.Internal.Types: [$sel:capatazSupervisor:Capataz] :: Capataz m -> !(Supervisor m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:capatazSupervisor:Capataz] :: Capataz m -> !Supervisor m
- Control.Concurrent.Capataz.Internal.Types: [$sel:notifyEvent:CapatazOptions] :: CapatazOptions m -> !(CapatazEvent -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:notifyEvent:CapatazOptions] :: CapatazOptions m -> !CapatazEvent -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:notifyEvent:ParentSupervisorEnv] :: ParentSupervisorEnv m -> !(CapatazEvent -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:notifyEvent:ParentSupervisorEnv] :: ParentSupervisorEnv m -> !CapatazEvent -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:notifyEvent:SupervisorEnv] :: SupervisorEnv m -> !(CapatazEvent -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:notifyEvent:SupervisorEnv] :: SupervisorEnv m -> !CapatazEvent -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:notifyProcessTermination:ForkWorker] :: ControlAction m -> !(Bool -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:notifyProcessTermination:ForkWorker] :: ControlAction m -> !Bool -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:processAsync:ProcessEnv] :: ProcessEnv -> !(Async ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:processAsync:ProcessEnv] :: ProcessEnv -> !Async ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:processCallbackError:InvalidSupervisorStatusReached] :: CapatazEvent -> !(Maybe SomeException)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:processCallbackError:InvalidSupervisorStatusReached] :: CapatazEvent -> !Maybe SomeException
- Control.Concurrent.Capataz.Internal.Types: [$sel:processError:ProcessCallbackFailed] :: ProcessError -> !(Maybe SomeException)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:processError:ProcessCallbackFailed] :: ProcessError -> !Maybe SomeException
- Control.Concurrent.Capataz.Internal.Types: [$sel:returnSupervisor:ForkWorker] :: ControlAction m -> !(Supervisor m -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:returnSupervisor:ForkWorker] :: ControlAction m -> !Supervisor m -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:returnWorkerId:ForkWorker] :: ControlAction m -> !(WorkerId -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:returnWorkerId:ForkWorker] :: ControlAction m -> !WorkerId -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorAsync:Supervisor] :: Supervisor m -> !(Async ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorAsync:Supervisor] :: Supervisor m -> !Async ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorEnv:Supervisor] :: Supervisor m -> !(SupervisorEnv m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorEnv:Supervisor] :: Supervisor m -> !SupervisorEnv m
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorGetNotification:SupervisorEnv] :: SupervisorEnv m -> !(STM (SupervisorMessage m))
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorGetNotification:SupervisorEnv] :: SupervisorEnv m -> !STM (SupervisorMessage m)
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorNotify:ParentSupervisorEnv] :: ParentSupervisorEnv m -> !(SupervisorMessage m -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorNotify:ParentSupervisorEnv] :: ParentSupervisorEnv m -> !SupervisorMessage m -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorNotify:SupervisorEnv] :: SupervisorEnv m -> !(SupervisorMessage m -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorNotify:SupervisorEnv] :: SupervisorEnv m -> !SupervisorMessage m -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnFailure:CapatazOptions] :: CapatazOptions m -> !(SomeException -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnFailure:CapatazOptions] :: CapatazOptions m -> !SomeException -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnFailure:SupervisorOptions] :: SupervisorOptions m -> !(SomeException -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnFailure:SupervisorOptions] :: SupervisorOptions m -> !SomeException -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnIntensityReached:CapatazOptions] :: CapatazOptions m -> !(m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnIntensityReached:CapatazOptions] :: CapatazOptions m -> !m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnIntensityReached:SupervisorEnv] :: SupervisorEnv m -> !(SomeException -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnIntensityReached:SupervisorEnv] :: SupervisorEnv m -> !SomeException -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnIntensityReached:SupervisorOptions] :: SupervisorOptions m -> !(m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOnIntensityReached:SupervisorOptions] :: SupervisorOptions m -> !m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOptions:ForkWorker] :: ControlAction m -> !(SupervisorOptions m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOptions:ForkWorker] :: ControlAction m -> !SupervisorOptions m
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOptions:SupervisorEnv] :: SupervisorEnv m -> !(SupervisorOptions m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOptions:SupervisorEnv] :: SupervisorEnv m -> !SupervisorOptions m
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOptions:Supervisor] :: Supervisor m -> !(SupervisorOptions m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorOptions:Supervisor] :: Supervisor m -> !SupervisorOptions m
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorProcessMap:SupervisorEnv] :: SupervisorEnv m -> !(IORef (ProcessMap m))
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorProcessMap:SupervisorEnv] :: SupervisorEnv m -> !IORef (ProcessMap m)
- Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorStatusVar:SupervisorEnv] :: SupervisorEnv m -> !(TVar SupervisorStatus)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:supervisorStatusVar:SupervisorEnv] :: SupervisorEnv m -> !TVar SupervisorStatus
- Control.Concurrent.Capataz.Internal.Types: [$sel:workerAsync:Worker] :: Worker m -> !(Async ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:workerAsync:Worker] :: Worker m -> !Async ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:workerOnCompletion:WorkerOptions] :: WorkerOptions m -> !(m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:workerOnCompletion:WorkerOptions] :: WorkerOptions m -> !m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:workerOnFailure:WorkerOptions] :: WorkerOptions m -> !(SomeException -> m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:workerOnFailure:WorkerOptions] :: WorkerOptions m -> !SomeException -> m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:workerOnTermination:WorkerOptions] :: WorkerOptions m -> !(m ())
+ Control.Concurrent.Capataz.Internal.Types: [$sel:workerOnTermination:WorkerOptions] :: WorkerOptions m -> !m ()
- Control.Concurrent.Capataz.Internal.Types: [$sel:workerOptions:ForkWorker] :: ControlAction m -> !(WorkerOptions m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:workerOptions:ForkWorker] :: ControlAction m -> !WorkerOptions m
- Control.Concurrent.Capataz.Internal.Types: [$sel:workerOptions:Worker] :: Worker m -> !(WorkerOptions m)
+ Control.Concurrent.Capataz.Internal.Types: [$sel:workerOptions:Worker] :: Worker m -> !WorkerOptions m
- Control.Concurrent.Capataz.Internal.Types.Lens: workerOnCompletionL :: (Functor f) => (m () -> f (m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz.Internal.Types.Lens: workerOnCompletionL :: Functor f => (m () -> f (m ())) -> WorkerOptions m -> f (WorkerOptions m)
- Control.Concurrent.Capataz.Internal.Types.Lens: workerOnFailureL :: (Functor f) => ((SomeException -> m ()) -> f (SomeException -> m ())) -> WorkerOptions m -> f (WorkerOptions m)
+ Control.Concurrent.Capataz.Internal.Types.Lens: workerOnFailureL :: Functor f => ((SomeException -> m ()) -> f (SomeException -> m ())) -> WorkerOptions m -> f (WorkerOptions m)
- Control.Concurrent.Capataz.Internal.Worker: forkWorker :: (MonadUnliftIO m) => ParentSupervisorEnv m -> WorkerOptions m -> Maybe (WorkerId, RestartCount) -> m (Worker m)
+ Control.Concurrent.Capataz.Internal.Worker: forkWorker :: MonadUnliftIO m => ParentSupervisorEnv m -> WorkerOptions m -> Maybe (WorkerId, RestartCount) -> m (Worker m)
- Control.Concurrent.Capataz.Internal.Worker: workerMain :: (MonadUnliftIO m) => ParentSupervisorEnv m -> WorkerOptions m -> WorkerId -> RestartCount -> m (Worker m)
+ Control.Concurrent.Capataz.Internal.Worker: workerMain :: MonadUnliftIO m => ParentSupervisorEnv m -> WorkerOptions m -> WorkerId -> RestartCount -> m (Worker m)
Files
- CHANGELOG.md +8/−0
- capataz.cabal +9/−8
- src/Capataz/HowTo/DynamicWorker.hs +78/−0
- src/Control/Concurrent/Capataz.hs +2/−0
- src/Control/Concurrent/Capataz/Util.hs +45/−9
CHANGELOG.md view
@@ -6,6 +6,14 @@ [1]: http://semver.org/spec/v2.0.0.html [2]: https://github.com/roman/capataz/releases +## v0.2.1.0++* Support GHC-8.6.3.+* Deprecate `buildLogWorkerSpec` in favour of `buildLogWorkerSpec1` which takes+ `Natural` instead of `Int` for compatibility with `stm-2.5`.+* Deprecate `buildLogWorkerOptions` in favour of `buildLogWorkerOptions1` which+ takes `Natural` instead of `Int` for compatibility with `stm-2.5`.+ ## v0.2.0.0 Bumblebee release **BREAKING CHANGES**
capataz.cabal view
@@ -1,13 +1,13 @@-cabal-version: >=1.10+cabal-version: 1.12 name: capataz-version: 0.2.0.0+version: 0.2.1.0 license: MIT license-file: LICENSE-copyright: © 2018 Roman Gonzalez+copyright: © 2018, 2019 Roman Gonzalez and Collaborators maintainer: open-source@roman-gonzalez.info author: Roman Gonzalez stability: alpha (experimental)-tested-with: ghc ==8.0.1 ghc ==8.0.2 ghc ==8.2.1+tested-with: ghc ==8.0.1 ghc ==8.0.2 ghc ==8.2.1 ghc ==8.6.3 homepage: https://github.com/roman/Haskell-capataz#readme bug-reports: https://github.com/roman/Haskell-capataz/issues synopsis: OTP-like supervision trees in Haskell@@ -31,8 +31,8 @@ category: Control, Concurrency build-type: Simple extra-source-files:- CHANGELOG.md README.md+ CHANGELOG.md source-repository head type: git@@ -52,6 +52,7 @@ Control.Concurrent.Capataz.Internal.Worker hs-source-dirs: src other-modules:+ Capataz.HowTo.DynamicWorker Control.Concurrent.Capataz.Internal.Process Control.Concurrent.Capataz.Util Paths_capataz@@ -86,11 +87,11 @@ base ==4.*, bytestring >=0.10.8, capataz -any,- pretty-show >=1.7,+ pretty-show >=1.9.5, prettyprinter >=1.1, rio >=0.1.2.0,- tasty >=1.0.1.1,- tasty-hunit >=0.10.0.1,+ tasty >=1.2.2,+ tasty-hunit >=0.10.0.2, tasty-smallcheck >=0.8.1, teardown >=0.5.0.0, time >=1.6.0,
+ src/Capataz/HowTo/DynamicWorker.hs view
@@ -0,0 +1,78 @@+{-# OPTIONS_GHC -Wno-warnings-deprecations #-}+{-# LANGUAGE OverloadedStrings #-}+module Capataz.HowTo.DynamicWorker+ (+ -- * Description+ -- $description++ -- * Code+ -- $code+ main+ ) where++import RIO+import Capataz+ (+ forkCapataz+ , forkWorker+ , terminateCapataz_+ , buildWorkerOptions+ , workerRestartStrategyL+ , WorkerRestartStrategy(..)+ , onSystemEventL+ )++{- $description++The following example:++* creates a capataz system+* forks a worker process dynamically+* terminates capataz system++-}++{- $code++@+module Capataz.HowTo.DynamicWorker++myUselessWorker :: IO ()+myUselessWorker = return ()++main :: IO ()+main = do+ bracket+ ('forkCapataz' \"dynamic-worker-example\"+ (set 'onSystemEventL' traceDisplayIO))+ 'terminateCapataz_'+ (\\capataz -> do+ void $ 'forkWorker'+ ( 'buildWorkerOptions' \"useless-worker\"+ myUselessWorker+ (set 'workerRestartStrategyL' 'Transient')+ )+ capataz+ threadDelay 1001000)+@++-}++myUselessWorker :: IO ()+myUselessWorker = return ()++-- | Function that runs the example+main :: IO ()+main = do+ bracket+ (forkCapataz "dynamic-worker-example"+ (set onSystemEventL traceDisplayIO))+ terminateCapataz_+ (\capataz -> do+ void $ forkWorker+ ( buildWorkerOptions "useless-worker"+ myUselessWorker+ (set workerRestartStrategyL Transient)+ )+ capataz+ threadDelay 1001000)
src/Control/Concurrent/Capataz.hs view
@@ -38,10 +38,12 @@ , Control.Concurrent.Capataz.Internal.Types.buildSupervisorOptions , Control.Concurrent.Capataz.Internal.Types.buildSupervisorOptionsWithDefaults , Control.Concurrent.Capataz.Internal.Types.buildWorkerOptions+, Control.Concurrent.Capataz.Internal.Types.buildWorkerOptions1 , Control.Concurrent.Capataz.Internal.Types.buildWorkerOptionsWithDefaults , Control.Concurrent.Capataz.Internal.Types.supervisorSpec , Control.Concurrent.Capataz.Internal.Types.supervisorSpecWithDefaults , Control.Concurrent.Capataz.Internal.Types.workerSpec+, Control.Concurrent.Capataz.Internal.Types.workerSpec1 , Control.Concurrent.Capataz.Internal.Types.workerSpecWithDefaults -- * Lenses to modify Option Records
src/Control/Concurrent/Capataz/Util.hs view
@@ -2,7 +2,9 @@ {-# LANGUAGE NoImplicitPrelude #-} module Control.Concurrent.Capataz.Util (- buildLogWorkerSpec+ buildLogWorkerSpec1+ , buildLogWorkerSpec+ , buildLogWorkerOptions1 , buildLogWorkerOptions ) where @@ -63,15 +65,15 @@ -- threadDelay 1000100 -- @ ----- @since 0.2.0.0-buildLogWorkerSpec+-- @since 0.2.1.0+buildLogWorkerSpec1 :: (MonadUnliftIO m, MonadIO m0) => LogOptions -- ^ options for the 'LogFunc' instance -> WorkerName -- ^ name of the logger worker process- -> Int -- ^ how many log messages can be in-flight when writer is slow?+ -> Natural -- ^ how many log messages can be in-flight when writer is slow? -> (WorkerOptions m -> WorkerOptions m) -- ^ worker process modifier -> m0 (ProcessSpec m, LogFunc)-buildLogWorkerSpec logOptions procName bufferSize modOptions = do+buildLogWorkerSpec1 logOptions procName bufferSize modOptions = do inputQueue <- newTBQueueIO bufferSize let myLogFunc = mkLogFunc $ \lmCallStack lmLogSource lmLogLevel lmPayload -> atomically@@ -87,6 +89,23 @@ return (loggerSpec, myLogFunc) +-- | Deprecated in favour of 'buildLogWorkerSpec1'.+--+-- __IMPORTANT__ Since 0.2.1.0 this function throws a runtime error if+-- the argumet of the type 'Int' is negative.+--+-- @since 0.2.0.0+buildLogWorkerSpec+ :: (MonadUnliftIO m, MonadIO m0)+ => LogOptions -- ^ options for the 'LogFunc' instance+ -> WorkerName -- ^ name of the logger worker process+ -> Int -- ^ how many log messages can be in-flight when writer is slow?+ -> (WorkerOptions m -> WorkerOptions m) -- ^ worker process modifier+ -> m0 (ProcessSpec m, LogFunc)+buildLogWorkerSpec logOptions procName bufferSize =+ buildLogWorkerSpec1 logOptions procName (fromIntegral bufferSize)+{-# DEPRECATED buildLogWorkerSpec "Use buildLogWorkerSpec1 instead" #-}+ -- | Builds a 'WorkerOptions' record that spawns a thread that logs messages -- written with the returned 'LogFunc'. Use this function if you want to build a -- logger thread dynamically via 'forkWorker'.@@ -116,15 +135,15 @@ -- threadDelay 1000100 -- @ ----- @since 0.2.0.0-buildLogWorkerOptions+-- @since 0.2.1.0+buildLogWorkerOptions1 :: (MonadUnliftIO m, MonadIO m0) => LogOptions -> WorkerName- -> Int+ -> Natural -> (WorkerOptions m -> WorkerOptions m) -> m0 (WorkerOptions m, LogFunc)-buildLogWorkerOptions logOptions procName bufferSize modOptions = do+buildLogWorkerOptions1 logOptions procName bufferSize modOptions = do inputQueue <- newTBQueueIO bufferSize let myLogFunc = mkLogFunc $ \lmCallStack lmLogSource lmLogLevel lmPayload -> atomically@@ -139,3 +158,20 @@ (modOptions . set workerRestartStrategyL Permanent) return (loggerSpec, myLogFunc)++-- | Deprecated in favour of 'buildLogWorkerOptions1'.+--+-- __IMPORTANT__ Since 0.2.1.0 this function throws a runtime error if+-- the argumet of the type 'Int' is negative.+--+-- @since 0.2.0.0+buildLogWorkerOptions+ :: (MonadUnliftIO m, MonadIO m0)+ => LogOptions+ -> WorkerName+ -> Int+ -> (WorkerOptions m -> WorkerOptions m)+ -> m0 (WorkerOptions m, LogFunc)+buildLogWorkerOptions logOptions procName bufferSize =+ buildLogWorkerOptions1 logOptions procName (fromIntegral bufferSize)+{-# DEPRECATED buildLogWorkerOptions "Use buildLogWorkerOptions1 instead" #-}