QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
CircuitBreakerState Class Reference

#include <CircuitBreakerState.h>

+ Inheritance diagram for CircuitBreakerState:
+ Collaboration diagram for CircuitBreakerState:

Public Types

enum class  State { Closed , Open , HalfOpen }
 
using Action = std::function< bool()>
 
- Public Types inherited from QGCAbstractState
using EntryCallback = std::function< void()>
 
using ExitCallback = std::function< void()>
 
using EventHandler = std::function< bool(QEvent *)>
 

Signals

void tripped ()
 Emitted when the circuit trips (too many failures)
 
void circuitReset ()
 Emitted when the circuit resets (after successful half-open test)
 
void succeeded ()
 Emitted when action succeeds.
 
void failed ()
 Emitted when action fails (or circuit is open)
 
- Signals inherited from QGCAbstractState
void advance ()
 
void error ()
 

Public Member Functions

 CircuitBreakerState (const QString &stateName, QState *parent, Action action, int failureThreshold=5, int resetTimeoutMsecs=30000)
 
State circuitState () const
 Get the current circuit state.
 
int failureCount () const
 Get the current failure count.
 
int failureThreshold () const
 Get the failure threshold.
 
void reset ()
 Manually reset the circuit breaker.
 
bool isTripped () const
 Check if the circuit is currently tripped (open)
 
- Public Member Functions inherited from QGCState
 QGCState (const QString &stateName, QState *parentState)
 
template<typename PointerToMemberFunction >
QSignalTransition * addThisTransition (PointerToMemberFunction signal, QAbstractState *target)
 Simpler version of QState::addTransition which assumes the sender is this.
 
void setLocalErrorState (QAbstractState *errorState)
 
QAbstractState * localErrorState () const
 Get the per-state error state (nullptr if using global)
 
void setProperty (QObject *object, const char *name, const QVariant &value)
 
void setEnabled (QObject *object, bool enabled)
 Convenience overload for setting enabled state on widgets/controls.
 
void setVisible (QObject *object, bool visible)
 Convenience overload for setting visible state on widgets/controls.
 
- Public Member Functions inherited from QGCAbstractState
 QGCAbstractState (const QString &stateName, QState *parent)
 
QGCStateMachinemachine () const
 
Vehiclevehicle () const
 
QString stateName () const
 
class StateContextcontext () const
 
void setOnEntry (EntryCallback callback)
 Set a callback to be invoked when the state is entered.
 
void setOnExit (ExitCallback callback)
 Set a callback to be invoked when the state is exited.
 
void setCallbacks (EntryCallback onEntry, ExitCallback onExit=nullptr)
 Set both entry and exit callbacks.
 
void setEventHandler (EventHandler handler)
 Set a custom event handler for this state.
 

Protected Member Functions

void onEnter () override
 Override to perform actions on state entry.
 
- Protected Member Functions inherited from QGCAbstractState
virtual void onLeave ()
 Override to perform actions on state exit.
 
void onEntry (QEvent *event) override
 
void onExit (QEvent *event) override
 
bool event (QEvent *event) override
 

Detailed Description

A state that implements the circuit breaker pattern.

After a threshold of failures, the circuit "trips" and immediately fails without attempting the action for a reset timeout period. This prevents cascading failures when an external service is down.

States:

  • Closed: Normal operation, action is attempted
  • Open: Tripped, immediately fails without trying
  • Half-Open: After reset timeout, allows one attempt to test recovery

Example usage:

auto* state = new CircuitBreakerState("ExternalAPI", &machine,
[]() { return callExternalApi(); },
5, // Failure threshold
30000 // Reset timeout (ms)
);
state->addTransition(state, &CircuitBreakerState::advance, successState);
state->addTransition(state, &CircuitBreakerState::error, errorState);
QGCStateMachine * machine() const

Definition at line 31 of file CircuitBreakerState.h.

Member Typedef Documentation

◆ Action

using CircuitBreakerState::Action = std::function<bool()>

Definition at line 37 of file CircuitBreakerState.h.

Member Enumeration Documentation

◆ State

enum class CircuitBreakerState::State
strong
Enumerator
Closed 

Normal operation.

Open 

Tripped, failing fast.

HalfOpen 

Testing if service recovered.

Definition at line 39 of file CircuitBreakerState.h.

Constructor & Destructor Documentation

◆ CircuitBreakerState()

CircuitBreakerState::CircuitBreakerState ( const QString &  stateName,
QState *  parent,
Action  action,
int  failureThreshold = 5,
int  resetTimeoutMsecs = 30000 
)
Parameters
stateNameName for logging
parentParent state
actionAction to execute (returns true on success)
failureThresholdNumber of failures before tripping
resetTimeoutMsecsTime before attempting recovery

Definition at line 4 of file CircuitBreakerState.cc.

Member Function Documentation

◆ circuitReset

void CircuitBreakerState::circuitReset ( )
signal

Emitted when the circuit resets (after successful half-open test)

Referenced by reset().

◆ circuitState()

State CircuitBreakerState::circuitState ( ) const
inline

Get the current circuit state.

Definition at line 56 of file CircuitBreakerState.h.

◆ failed

void CircuitBreakerState::failed ( )
signal

Emitted when action fails (or circuit is open)

Referenced by onEnter().

◆ failureCount()

int CircuitBreakerState::failureCount ( ) const
inline

Get the current failure count.

Definition at line 59 of file CircuitBreakerState.h.

◆ failureThreshold()

int CircuitBreakerState::failureThreshold ( ) const
inline

Get the failure threshold.

Definition at line 62 of file CircuitBreakerState.h.

◆ isTripped()

bool CircuitBreakerState::isTripped ( ) const
inline

Check if the circuit is currently tripped (open)

Definition at line 68 of file CircuitBreakerState.h.

References Open.

◆ onEnter()

void CircuitBreakerState::onEnter ( )
overrideprotectedvirtual

Override to perform actions on state entry.

Reimplemented from QGCAbstractState.

Definition at line 22 of file CircuitBreakerState.cc.

References QGCAbstractState::advance(), QGCAbstractState::error(), failed(), HalfOpen, Open, reset(), QGCAbstractState::stateName(), succeeded(), and tripped().

◆ reset()

void CircuitBreakerState::reset ( )

Manually reset the circuit breaker.

Definition at line 14 of file CircuitBreakerState.cc.

References circuitReset(), Closed, and QGCAbstractState::stateName().

Referenced by onEnter().

◆ succeeded

void CircuitBreakerState::succeeded ( )
signal

Emitted when action succeeds.

Referenced by onEnter().

◆ tripped

void CircuitBreakerState::tripped ( )
signal

Emitted when the circuit trips (too many failures)

Referenced by onEnter().


The documentation for this class was generated from the following files: