TsgcWSCircuitBreaker › Events › OnStateChange
Fired when a circuit transitions between Closed, Open and HalfOpen.
property OnStateChange: TsgcCircuitBreakerOnStateChange;
// TsgcCircuitBreakerOnStateChange = procedure(Sender: TObject; const aKey: string; aOldState, aNewState: TsgcCircuitState) of object
—
Fires after every successful state transition, including operator-driven ForceOpen / ForceClose / Reset and threshold-driven Closed -> Open / Open -> HalfOpen / HalfOpen -> Closed or HalfOpen -> Open. The aKey parameter identifies the circuit (typically a hostname), and aOldState / aNewState are TsgcCircuitState values — csClosed, csOpen or csHalfOpen. Use this event for structured logging, alerting (PagerDuty, Slack, Teams), and real-time dashboards that paint per-host breaker status. Runs synchronously on the thread that triggered the transition; keep the handler fast and non-blocking — delegate heavy work to a worker thread.
procedure TForm1.CircuitStateChange(Sender: TObject; const aKey: string;
aOldState, aNewState: TsgcCircuitState);
const
cStateName: array [TsgcCircuitState] of string =
('Closed', 'Open', 'HalfOpen');
begin
Log(Format('Circuit %s: %s -> %s',
[aKey, cStateName[aOldState], cStateName[aNewState]]));
if aNewState = csOpen then
NotifyPagerDuty('Circuit open for ' + aKey);
end;