Контракт между ботом и гейтвеем: сервисы, вызовы, сообщения и перечисления. Страница собрана из файлов .proto в каталоге
proto/ репозитория, руками не правится: сборка книги сравнивает ее с файлами и падает, если они разошлись.
Как подключиться, какие заголовки слать и в каком порядке вызывать: Подключить бота. Как устроены события и
что делать с Gap и Lagged: События и сверка после перезапуска. Что значит каждая ошибка и что с ней делать:
Ошибки и что с ними делать.
В файлах три пакета описаний:
| Файл | Для кого | Что в нем |
gateway.proto | боты | сервис Gateway: заявки, счет, рынок, подписки, Health и поток Events |
types.proto | боты | значения, которыми обмениваются вызовы: инструменты, заявки, портфель, рыночные данные |
service.proto | команды brokapi | сервис Service у службы brokapi up. Боту он не нужен |
Описания и комментарии в файлах английские, так они и показаны ниже: это тот самый текст, который увидит ваш генератор кода.
Файл proto/brokapi/gateway/v1/gateway.proto, пакет brokapi.gateway.v1.
The brokapi gateway: one process that holds the connection to one broker account and serves any number of bots.
How a bot uses it:
1. Connect to the Unix socket of the gateway (or 127.0.0.1 on Windows) and send two metadata headers with every
call: `authorization: Bearer <the key from the access.key file>` and `x-brokapi-bot: <name of the bot>`.
2. Open `Events` first, then subscribe. The first frame of `Events` says the stream is registered. Events that
happen after it are yours.
3. Call `Reconcile` once before any trading command.
An error of the library comes back as a gRPC status with the `brokapi-error-bin` trailer, an `ErrorDetail`. The
status code is a hint for generic tools. The detail is the whole error: what a bot needs to decide whether to retry
is in `kind`.
A call named like the type it returns (Portfolio, OrderBook, TradingParams, TradingStatus, Schedule) names the type with its full name: inside the service the short name is the call, and protoc and buf refuse it. tools/proto-check.
Orders: a command is never repeated by the gateway, and it runs to its end if you stop waiting
Stop orders
Account
Market data
Instruments
The rest
| Поле | Тип | № | Описание |
cid | string | 1 | |
Без полей.
| Поле | Тип | № | Описание |
cid | string | 1 | |
Без полей.
| Поле | Тип | № | Описание |
ledger | список string | 1 | The ids of the orders you placed and have not seen end. |
include_journal | bool | 2 | Add the orders of the gateway’s own journal (all bots) to the ledger. Without it the orders of the other bots come back as foreign. |
Без полей.
| Поле | Тип | № | Описание |
positions | список Position | 1 | |
| Поле | Тип | № | Описание |
balances | список Balance | 1 | |
| Поле | Тип | № | Описание |
candles | список Candle | 1 | |
| Поле | Тип | № | Описание |
sub | uint64 | 1 | The id that marks the events of this subscription (Event.sub). |
| Поле | Тип | № | Описание |
sub | uint64 | 1 | |
Без полей.
| Поле | Тип | № | Описание |
ticker | string | 1 | |
| Поле | Тип | № | Описание |
exchange | string | 1 | |
range | TimeRange | 2 | |
| Поле | Тип | № | Описание |
method | string | 1 | The name of the method of the broker’s API, as the broker names it. |
args_json | string | 2 | The arguments as a JSON object, empty for none. |
command | bool | 3 | True when the call changes something at the broker: a lost reply is then Unknown and the call is not repeated. |
| Поле | Тип | № | Описание |
reply_json | string | 1 | |
Без полей.
| Поле | Тип | № | Описание |
md | MarketDataCaps | 1 | |
ud | UserDataCaps | 2 | |
candle_spans | список CandleSpan | 3 | The longest span one Candles request may cover, per timeframe, as the broker documents it. A timeframe that is not listed has no known limit. A client that reads a long history cuts it into windows of this span. |
| Поле | Тип | № | Описание |
timeframe | Timeframe | 1 | |
span_ns | uint64 | 2 | |
Без полей.
| Поле | Тип | № | Описание |
name | string | 1 | |
first_seen_ns | int64 | 2 | When the gateway first heard from the bot (since the gateway started). |
last_seen_ns | int64 | 3 | |
calls | uint64 | 4 | |
streaming | bool | 5 | The bot has an Events stream open. |
queued | uint64 | 6 | Events waiting in the buffer of its stream. |
lagged | uint64 | 7 | How many times its stream was closed because the bot read too slowly. |
| Поле | Тип | № | Описание |
state | GatewayState | 1 | |
name | string | 2 | The name of the gateway and the broker it serves. |
broker | string | 3 | |
version | string | 4 | |
epoch | uint64 | 5 | Chosen at random each time the gateway starts. A bot keeps it with its last event number. |
last_seq | uint64 | 6 | The number of the last event. |
detail | string | 7 | While STARTING: what the gateway is doing or what went wrong the last time. |
open_orders | uint64 | 8 | Orders of the journal that are not known to have ended. |
bots | список BotInfo | 9 | |
uptime_ns | uint64 | 10 | How long this run of the gateway has been up. |
pid | uint32 | 11 | The process id of the gateway. |
events_total | uint64 | 12 | The number of events since the start, and how many per second over the last ten seconds. |
events_per_sec | double | 13 | |
limits | список LimitInfo | 14 | How much of each bucket of the rate limit of the broker is left. |
subscriptions | список SubscriptionInfo | 15 | The subscriptions at the broker and who holds them. |
One bucket of the rate limit of the broker.
| Поле | Тип | № | Описание |
bucket | string | 1 | |
available | uint32 | 2 | |
capacity | uint32 | 3 | |
A subscription at the broker. The same request of several bots is one subscription with several owners. Only an owner can close it. The gateway’s own subscriptions (the states of orders) have the owner “(gateway)”.
| Поле | Тип | № | Описание |
sub | uint64 | 1 | |
what | string | 2 | What it is: the kind and the instrument. |
owners | список string | 3 | |
| Поле | Тип | № | Описание |
epoch | uint64 | 1 | Where to continue. Without epoch the stream is live only. |
last_seq | uint64 | 2 | The number of the last event you handled. |
own_orders_only | bool | 3 | Orders and executions of the orders that this bot placed (by the journal), not those of the other bots. Everything else comes to all. |
A frame of the Events stream. The first is always ready.
| Поле | Тип | № | Описание |
ready | Ready | 1 | Одно из группы frame. |
event | Event | 2 | Одно из группы frame. |
gap | Gap | 3 | Одно из группы frame. |
lagged | Lagged | 4 | Одно из группы frame. |
| Поле | Тип | № | Описание |
epoch | uint64 | 1 | The epoch of this gateway run and the number the next live event will have. |
next_seq | uint64 | 2 | |
replaying | uint64 | 3 | How many events follow from the ring before the live ones begin. |
The events after last_seq are no longer there. Call Reconcile and read the account again: the stream goes on from now.
| Поле | Тип | № | Описание |
reason | Reason | 1 | |
requested_after | uint64 | 2 | |
first_available | uint64 | 3 | The oldest event still in the ring (the next one to come if the ring is empty). |
The stream is closed because this bot read too slowly and its buffer filled. The events in the buffer were delivered first. Reconnect with the last number you got.
| Поле | Тип | № | Описание |
last_seq | uint64 | 1 | |
The error of the library, whole. Sent in the brokapi-error-bin trailer of a failed call.
| Поле | Тип | № | Описание |
kind | Kind | 1 | |
code | string | 2 | REJECTED: the code of the refusal (“not_found”, “price_off_step”, …). |
message | string | 3 | CONFIG, TRANSPORT, REJECTED, GATEWAY_STARTING, BAD_REQUEST: the text. |
retry_after_ns | uint64 | 4 | RATE_LIMITED. |
capability | string | 5 | UNSUPPORTED. |
| Значение | Число | Описание |
GATEWAY_STATE_UNSPECIFIED | 0 | |
GATEWAY_STATE_STARTING | 1 | The gateway runs the reconcile of its journal. Every call but Health and Caps is answered UNAVAILABLE. |
GATEWAY_STATE_READY | 2 | |
GATEWAY_STATE_STOPPING | 3 | The gateway is stopping: no new commands. |
| Значение | Число | Описание |
REASON_UNSPECIFIED | 0 | |
REASON_TOO_OLD | 1 | The ring has already dropped them (by count or by age). |
REASON_NEW_EPOCH | 2 | The gateway was restarted: its numbers begin again. |
REASON_AHEAD | 3 | The number is ahead of the gateway. |
| Значение | Число | Описание |
KIND_UNSPECIFIED | 0 | |
KIND_CONFIG | 1 | |
KIND_TRANSPORT | 2 | |
KIND_RATE_LIMITED | 3 | |
KIND_REJECTED | 4 | |
KIND_UNKNOWN | 5 | The command may or may not have reached the broker: look at the order before anything else. |
KIND_UNSUPPORTED | 6 | |
KIND_NOT_RECONCILED | 7 | |
KIND_DEGRADED | 8 | |
KIND_SHUTTING_DOWN | 9 | |
KIND_GATEWAY_STARTING | 10 | The gateway is not ready yet. The command was not run. |
KIND_BAD_REQUEST | 11 | The request could not be read: a bad id, a bad number. The command was not run. |
Файл proto/brokapi/gateway/v1/types.proto, пакет brokapi.gateway.v1.
The types of the brokapi gateway: the same values as the types of `brokapi-core`, written for the wire.
Rules that hold for every message in this file:
* A price, a quantity, an amount of money is a string with a decimal number ("101.25", "-0.5"). Never a double:
a double cannot hold 0.1 and a bot that adds prices loses kopecks. Parse it into a decimal type of your language.
* A moment of time is an integer of nanoseconds since 1970-01-01 UTC, in a field that ends with `_ns`.
* An order id (`cid`) is a UUID in the text form with hyphens, made by the bot.
* `optional` marks a value that may be absent: absent is not the same as an empty string or zero.
When the library saw something. broker_ts_ns is the broker’s own time when the broker gives one.
| Поле | Тип | № | Описание |
rx_ts_ns | int64 | 1 | |
| Поле | Тип | № | Описание |
from_ns | int64 | 1 | |
to_ns | int64 | 2 | |
An instrument: the same in every broker (symbol and mic) and the way this broker names it (native). Take it from ResolveInstrument, Find or GetInstrument and pass it back as it is.
| Поле | Тип | № | Описание |
symbol | string | 1 | |
mic | string | 2 | |
native | NativeId | 3 | |
| Поле | Тип | № | Описание |
symbol_mic | SymbolMic | 1 | Одно из группы id. |
ticker_class | TickerClass | 2 | Одно из группы id. |
figi | string | 3 | Одно из группы id. |
uid | string | 4 | Одно из группы id. |
| Поле | Тип | № | Описание |
symbol | string | 1 | |
mic | string | 2 | |
| Поле | Тип | № | Описание |
ticker | string | 1 | |
class_code | string | 2 | |
| Поле | Тип | № | Описание |
backpressure | Backpressure | 1 | |
cap | uint64 | 2 | The buffer size for LOSSLESS and DROP_NEWEST. |
| Поле | Тип | № | Описание |
cid | string | 1 | The id of the new order. |
original_cid | string | 2 | |
| Поле | Тип | № | Описание |
cid | string | 1 | |
broker_id | string | 2 | |
ts | Timestamps | 3 | |
| Поле | Тип | № | Описание |
kind | OrderStateKind | 1 | |
cid | string | 2 | |
broker_id | string | 3 | ACKED. |
filled | string | 4 | PARTIALLY_FILLED. |
left | string | 5 | |
reason | string | 6 | REJECTED. |
| Поле | Тип | № | Описание |
confirmed | список OrderSnapshot | 1 | In your ledger and active at the broker. |
closed_offline | список string | 2 | In your ledger, not active at the broker: filled, cancelled or refused while you were away. Ask OrderState. |
foreign | список OrderSnapshot | 3 | Active at the broker, not in your ledger: somebody else’s orders. Do not touch them. |
| Поле | Тип | № | Описание |
kind | Kind | 1 | |
date_ns | int64 | 2 | KIND_GOOD_TILL_DATE. |
| Поле | Тип | № | Описание |
kind | Kind | 1 | |
other | string | 2 | |
A stop order by your id or by the broker’s id.
| Поле | Тип | № | Описание |
cid | string | 1 | Одно из группы ref. |
broker_id | string | 2 | Одно из группы ref. |
| Поле | Тип | № | Описание |
price | string | 1 | |
qty | string | 2 | |
A full book (incremental false) or a change of it (incremental true, then seq is the number of the change).
| Поле | Тип | № | Описание |
instrument | InstrumentId | 1 | |
timeframe | Timeframe | 2 | |
open | string | 3 | |
high | string | 4 | |
low | string | 5 | |
close | string | 6 | |
volume | string | 7 | |
open_ts_ns | int64 | 8 | |
close_ts_ns | int64 | 9 | |
ts | Timestamps | 10 | |
| Поле | Тип | № | Описание |
currency | string | 1 | |
available | string | 2 | |
blocked | string | 3 | |
ts | Timestamps | 4 | |
| Поле | Тип | № | Описание |
broker_order_id | string | 2 | |
instrument | InstrumentId | 3 | |
side | Side | 4 | |
price | string | 5 | |
qty | string | 6 | |
commission | string | 7 | |
trade_id | string | 8 | |
ts | Timestamps | 9 | |
| Поле | Тип | № | Описание |
by_ticker | ByTicker | 1 | Одно из группы query. |
by_isin | string | 2 | Одно из группы query. |
by_kind | InstrumentKind | 3 | Одно из группы query. |
| Поле | Тип | № | Описание |
ticker | string | 1 | |
| Поле | Тип | № | Описание |
instrument | InstrumentId | 1 | |
lot_size | string | 2 | |
min_qty | string | 3 | |
price_step | string | 4 | |
price_step_value | string | 5 | |
currency | string | 6 | |
| Поле | Тип | № | Описание |
start_ns | int64 | 1 | |
end_ns | int64 | 2 | |
kind | SessionKind | 3 | |
| Поле | Тип | № | Описание |
order_book | bool | 1 | |
market_trades | bool | 2 | |
quotes | bool | 3 | |
candles | bool | 4 | |
| Поле | Тип | № | Описание |
max_order_book_depth | uint32 | 1 | |
incremental_order_book | bool | 2 | |
streaming | StreamingCaps | 3 | |
| Поле | Тип | № | Описание |
kind | Kind | 1 | |
window_secs | uint64 | 2 | How long the broker remembers an id (the two last kinds). |
| Поле | Тип | № | Описание |
place_idempotency | PlaceIdempotency | 1 | |
ws_rpc | bool | 2 | |
ordered_command_channel | bool | 3 | |
supports_replace | bool | 4 | |
supports_stop_orders | bool | 5 | |
streams_executions | bool | 6 | |
sandbox | bool | 7 | |
| Поле | Тип | № | Описание |
positions | список Position | 1 | |
| Поле | Тип | № | Описание |
balances | список Balance | 1 | |
| Поле | Тип | № | Описание |
sub | uint64 | 1 | |
lost_from_ns | int64 | 2 | |
| Поле | Тип | № | Описание |
sub | uint64 | 1 | |
gap_from_ns | int64 | 2 | |
One event of the broker connection. seq counts the events of this gateway from 1, without holes, in the order the gateway got them: keep the last one you handled and give it to Events when you reconnect.
| Поле | Тип | № | Описание |
seq | uint64 | 1 | |
source | string | 2 | The connector that produced it: “NAME-md” or “NAME-ud”, NAME being the name of the gateway. |
ts | Timestamps | 4 | |
order_book | OrderBook | 10 | Одно из группы payload. |
market_trade | MarketTrade | 11 | Одно из группы payload. |
quote | Quote | 12 | Одно из группы payload. |
candle | Candle | 13 | Одно из группы payload. |
order | OrderSnapshot | 14 | Одно из группы payload. Your order changed state. |
execution | Execution | 15 | Одно из группы payload. |
portfolio | Portfolio | 16 | Одно из группы payload. |
positions | PositionList | 17 | Одно из группы payload. |
balances | BalanceList | 18 | Одно из группы payload. |
resync | Resync | 19 | Одно из группы payload. A stream of order book changes lost its place: ask for a snapshot. |
overflow | Overflow | 20 | Одно из группы payload. A lossless subscription of the connector overflowed. Trading stops until you call Reconcile. |
reconnected | Reconnected | 21 | Одно из группы payload. A stream was cut and came back: whatever happened from gap_from_ns may be missing. |
| Значение | Число | Описание |
SIDE_UNSPECIFIED | 0 | |
SIDE_BUY | 1 | |
SIDE_SELL | 2 | |
| Значение | Число | Описание |
ORDER_TYPE_UNSPECIFIED | 0 | |
ORDER_TYPE_MARKET | 1 | |
ORDER_TYPE_LIMIT | 2 | |
| Значение | Число | Описание |
TIMEFRAME_UNSPECIFIED | 0 | |
TIMEFRAME_M1 | 1 | |
TIMEFRAME_M5 | 2 | |
TIMEFRAME_M10 | 3 | |
TIMEFRAME_M15 | 4 | |
TIMEFRAME_M30 | 5 | |
TIMEFRAME_H1 | 6 | |
TIMEFRAME_H4 | 7 | |
TIMEFRAME_D1 | 8 | |
TIMEFRAME_W1 | 9 | |
TIMEFRAME_MN | 10 | |
| Значение | Число | Описание |
INSTRUMENT_KIND_UNSPECIFIED | 0 | |
INSTRUMENT_KIND_STOCK | 1 | |
INSTRUMENT_KIND_BOND | 2 | |
INSTRUMENT_KIND_OPTION | 3 | |
INSTRUMENT_KIND_FUTURE | 4 | |
INSTRUMENT_KIND_ETF | 5 | |
INSTRUMENT_KIND_MUTUAL_FUND | 6 | |
INSTRUMENT_KIND_CURRENCY | 7 | |
INSTRUMENT_KIND_OTHER | 8 | |
INSTRUMENT_KIND_PERPETUAL | 9 | |
| Значение | Число | Описание |
TRADING_AVAILABILITY_UNSPECIFIED | 0 | |
TRADING_AVAILABILITY_OPEN | 1 | |
TRADING_AVAILABILITY_CLOSED | 2 | |
TRADING_AVAILABILITY_BREAK | 3 | |
TRADING_AVAILABILITY_UNKNOWN | 4 | |
| Значение | Число | Описание |
SESSION_KIND_UNSPECIFIED | 0 | |
SESSION_KIND_PRE_MARKET | 1 | |
SESSION_KIND_MAIN | 2 | |
SESSION_KIND_POST_MARKET | 3 | |
SESSION_KIND_AUCTION | 4 | |
SESSION_KIND_OTHER | 5 | |
| Значение | Число | Описание |
RESYNC_REASON_UNSPECIFIED | 0 | |
RESYNC_REASON_SEQUENCE_GAP | 1 | |
RESYNC_REASON_SUBSCRIPTION_RESET | 2 | |
RESYNC_REASON_MANUAL | 3 | |
| Значение | Число | Описание |
STOP_ORDER_KIND_UNSPECIFIED | 0 | |
STOP_ORDER_KIND_STOP_LOSS | 1 | |
STOP_ORDER_KIND_TAKE_PROFIT | 2 | |
STOP_ORDER_KIND_STOP_LIMIT | 3 | |
| Значение | Число | Описание |
BACKPRESSURE_UNSPECIFIED | 0 | |
BACKPRESSURE_CONFLATE | 1 | The latest value replaces older ones that nobody has read yet. For prices. |
BACKPRESSURE_LOSSLESS | 2 | Every value is kept up to cap. When the buffer is full the stream is marked lost and trading stops until Reconcile. |
BACKPRESSURE_DROP_NEWEST | 3 | At cap the newest value is dropped. |
| Значение | Число | Описание |
ORDER_STATE_KIND_UNSPECIFIED | 0 | |
ORDER_STATE_KIND_IN_FLIGHT | 1 | Sent, no answer yet. |
ORDER_STATE_KIND_UNKNOWN | 2 | No answer and the outcome is not known: ask with OrderState, do not send again. |
ORDER_STATE_KIND_ACKED | 3 | Accepted by the broker (broker_id). |
ORDER_STATE_KIND_PARTIALLY_FILLED | 4 | Partly executed (filled, left). |
ORDER_STATE_KIND_FILLED | 5 | |
ORDER_STATE_KIND_CANCELLED | 6 | |
ORDER_STATE_KIND_REJECTED | 7 | Refused (reason). |
| Значение | Число | Описание |
KIND_UNSPECIFIED | 0 | |
KIND_GOOD_TILL_CANCEL | 1 | |
KIND_END_OF_DAY | 2 | |
KIND_GOOD_TILL_DATE | 3 | |
| Значение | Число | Описание |
KIND_UNSPECIFIED | 0 | |
KIND_ACTIVE | 1 | |
KIND_TRIGGERED | 2 | |
KIND_CANCELLED | 3 | |
KIND_EXPIRED | 4 | |
KIND_OTHER | 5 | A state this version does not know: the broker’s word is in other. |
| Значение | Число | Описание |
KIND_UNSPECIFIED | 0 | |
KIND_LABEL_ONLY | 1 | The broker only keeps the label: a second place with the same id may open a second order. |
KIND_REJECT_DUPLICATE | 2 | |
KIND_IDEMPOTENT | 3 | |
Файл proto/brokapi/service/v1/service.proto, пакет brokapi.service.v1.
The API of the brokapi service: the commands of the program `brokapi` talk to it. The service runs the gateways of one
config file, one process each, and watches them.
It is for the person who runs the machine, not for bots: bots talk to a gateway (brokapi.gateway.v1). The service
listens on a Unix socket (or on 127.0.0.1 on Windows) in its state directory, and a call carries the key from
`service.key` of that directory in `authorization: Bearer <key>`, as a call to a gateway does.
| Вызов | Запрос | Ответ | Описание |
Info | InfoRequest | ServiceInfo | What the service is. |
List | ListRequest | ListResponse | The gateways, with what the service knows of each (the state of the process) and what the gateway says of itself. Without names: all of them. |
Start | GatewayRef | GatewayInfo | Starts a gateway that is stopped or failed. A gateway that runs is left alone. |
Stop | StopRequest | StopResponse | Stops a gateway and keeps it stopped until Start. With cancel_orders the active orders and stop orders of the account are cancelled first. Orders at the exchange are otherwise not touched. |
Restart | GatewayRef | GatewayInfo | Stops a gateway and starts it again. |
Add | GatewayRef | GatewayInfo | Reads the config file again and starts the gateway of this name from it, if it is not running. |
Remove | GatewayRef | GatewayInfo | Stops a gateway and forgets it until Add or Reload brings it back from the config. |
Reload | ReloadRequest | ReloadResponse | Reads the config file again and brings the running gateways in line with it: starts the new ones, stops the ones that are gone from the file, restarts the ones whose section changed. |
Shutdown | ShutdownRequest | ShutdownResponse | Stops the service. The gateways are stopped too, unless leave_gateways is set. |
Без полей.
| Поле | Тип | № | Описание |
pid | uint32 | 1 | |
version | string | 2 | |
config | string | 3 | The config file the service was started with, and its state directory. |
state_dir | string | 4 | |
address | string | 5 | Where the service listens. |
started_ns | uint64 | 6 | |
uptime_ns | uint64 | 7 | |
gateways | uint32 | 8 | |
running | uint32 | 9 | |
| Поле | Тип | № | Описание |
names | список string | 1 | |
| Поле | Тип | № | Описание |
name | string | 1 | |
A gateway as the service sees it.
| Поле | Тип | № | Описание |
name | string | 1 | |
broker | string | 2 | |
state | string | 3 | starting, running, restarting, stopping, stopped or failed. |
pid | uint32 | 4 | The process id, 0 if there is no process. |
uptime_ns | uint64 | 5 | How long the process has run. |
restarts | uint32 | 6 | How many times the service started it again after it stopped on its own. |
last_error | string | 7 | The last time it stopped on its own or could not start, and why. Empty if it never did. |
restart_in_ns | uint64 | 8 | While restarting: how long until the next start. |
cpu_percent | float | 9 | The CPU use of the process in percent of one core, and its memory in bytes. |
memory_bytes | uint64 | 10 | |
account | string | 11 | The account and whether it is a sandbox, from the config. |
sandbox | bool | 12 | |
adopted | bool | 13 | The service found this process running when it started, instead of starting it. |
address | string | 14 | Where the gateway listens, and its directory. |
state_dir | string | 15 | |
| Поле | Тип | № | Описание |
name | string | 1 | |
cancel_orders | bool | 2 | |
| Поле | Тип | № | Описание |
gateway | GatewayInfo | 1 | |
cancelled_orders | uint32 | 2 | How many orders and stop orders were cancelled before the stop. |
cancelled_stops | uint32 | 3 | |
errors | список string | 4 | Orders that could not be cancelled, with the reason. |
Без полей.
| Поле | Тип | № | Описание |
started | список string | 1 | |
stopped | список string | 2 | |
restarted | список string | 3 | |
unchanged | список string | 4 | |
| Поле | Тип | № | Описание |
leave_gateways | bool | 1 | |
Без полей.