Конфиг brokapi.toml
Справочник по файлу, который читает программа brokapi. Один файл - одна служба: в нем перечислены гейтвеи (по одному на счет) и то, как
служба за ними следит. Как работать с файлом по шагам: Быстрый старт. Команда brokapi init пишет образец с комментариями,
brokapi check --offline проверяет файл, не обращаясь к брокерам.
Пример
Два гейтвея на одной службе: песочница Т-Банка и счет АЛОР. Токены берутся из переменной и из файла:
state_dir = "state"
[service]
stop_timeout = "10s"
[service.restart]
initial = "500ms"
max_pause = "30s"
max_restarts = 5
window = "60s"
[[gateway]]
name = "tbank-sandbox"
broker = "tbank"
account = "2000000000"
sandbox = true
token_env = "TBANK_TOKEN"
[[gateway]]
name = "alor-main"
broker = "alor"
account = "D12345"
token_file = "/etc/brokapi/alor.token"
autostart = false
[gateway.ring]
size = 20000
max_age = "10m"
[gateway.limits.http]
rate = 50
per = "1s"
burst = 50
Разделы [gateway.ring] и [gateway.limits.*] относятся к ближайшему сверху [[gateway]], то есть в примере - к alor-main.
У Bybit пара из ключа и секрета, поэтому гейтвей читает два значения: секрет как токен (token_env или token_file), ключ из key_env или key_file. sandbox = true - демо-счет
(у него своя пара ключей, BYBIT_DEMO_API_KEY и BYBIT_DEMO_API_SECRET), без него гейтвей работает на основном контуре:
state_dir = "state"
[[gateway]]
name = "bybit-demo"
broker = "bybit"
sandbox = true
token_env = "BYBIT_DEMO_API_SECRET"
key_env = "BYBIT_DEMO_API_KEY"
Где лежит файл
Команда ищет конфиг по порядку: ключ -c <файл>, переменная BROKAPI_CONFIG, ./brokapi.toml, brokapi.toml в каталоге настроек
пользователя (на Linux ~/.config/brokapi, на macOS и Windows свои каталоги). Ничего не нашлось - код выхода 2 и список мест, где искали.
Служба определяется файлом: у двух файлов разные каталоги состояния и разные сокеты, значит, это две независимые службы. Две службы на один каталог состояния программа не пустит: вторая откажется запускаться и назовет pid и конфиг первой.
Верхний уровень
| Ключ | Тип | По умолчанию | Что значит |
|---|---|---|---|
state_dir | путь | <имя файла без .toml>.state рядом с конфигом | Каталог, где служба и гейтвеи держат свои файлы: журналы заявок, ключи доступа, сокеты, pid-файлы, логи. Относительный путь считается от каталога конфига |
[service] | раздел | см. ниже | Как служба следит за гейтвеями |
[[gateway]] | список разделов | пусто | Гейтвеи: по одному разделу на счет |
Имя по умолчанию берется из имени файла, поэтому prod.toml и test.toml в одном каталоге получают разные каталоги состояния
(prod.state и test.state) и не сталкиваются.
Любое неизвестное поле - ошибка с именем поля, а не молчаливый пропуск: опечатка в названии не превратится в настройку по умолчанию.
[service]
| Ключ | По умолчанию | Что значит |
|---|---|---|
listen | сокет в каталоге состояния (Linux, macOS; если путь длиннее, чем принимает система, то в личном коротком каталоге, см. Какие файлы где лежат), свободный порт 127.0.0.1 (Windows) | Где служба слушает команды: unix:<путь> или tcp:127.0.0.1:<порт>. Адрес должен быть на этом компьютере (127.0.0.1, ::1) |
check_interval | "1s" | Как часто служба проверяет свои гейтвеи |
stop_timeout | "10s" | Сколько гейтвею дается на остановку по просьбе, после этого его завершают принудительно |
[service.restart]
Что служба делает, когда гейтвей остановился сам (упал, был убит):
| Ключ | По умолчанию | Что значит |
|---|---|---|
initial | "500ms" | Пауза перед первым перезапуском. После каждого следующего пауза вдвое длиннее |
max_pause | "30s" | Дольше этого пауза не растет |
max_restarts | 5 | Сколько перезапусков за window разрешено. Не меньше 1 |
window | "60s" | Период, в котором перезапуски считаются |
Когда за window набралось max_restarts остановок, гейтвей получает состояние failed, служба перестает его запускать и ждет
brokapi start <имя>. Почему так: гейтвей, который падает сразу после старта (токен отозван, счет закрыт), без предела будет бесконечно
стучаться к брокеру. Гейтвей, который проработал дольше window, начинает счет с нуля. Запуск руками (start, restart) тоже обнуляет счет.
[service.logs]
| Ключ | По умолчанию | Что значит |
|---|---|---|
max_size_mb | 10 | При каком размере файл закрывается и начинается новый, в мегабайтах |
keep | 5 | Сколько старых файлов хранить рядом с текущим |
Журналы лежат в <state_dir>/logs/: service.log и по файлу на гейтвей (<имя>.log). Читать их удобнее командой brokapi logs.
[[gateway]]
Один раздел - одно подключение: брокер, счет и токен. Бот подключается к гейтвею, а не к брокеру.
| Ключ | Обязателен | Что значит |
|---|---|---|
name | да | Имя гейтвея. Команды обращаются к нему по имени, оно же имя каталога <state_dir>/gateways/<имя>/. От 1 до 32 символов: буквы, цифры, ., _, -. Имена не повторяются |
broker | да | bcs, tbank, finam, alor или bybit |
account | нет | Счет: account_id у Т-Банка и Финама, portfolio у АЛОР. У БКС и Bybit выбора счета нет (ключ Bybit принадлежит одному счету), поле с ним - ошибка |
sandbox | нет | true - песочница брокера (у Т-Банка sandbox, у АЛОР test, у Bybit демо-счет). У БКС и Финама песочницы нет, sandbox = true для них - ошибка |
token_env | один из двух | Имя переменной окружения с токеном |
token_file | один из двух | Путь к файлу с токеном (весь файл, без пробелов по краям) |
key_env, key_file | только Bybit, один из двух | Ключ API Bybit: имя переменной окружения или путь к файлу. У Bybit пара из ключа и секрета, секрет задают как токен (token_env или token_file), а ключ этими двумя полями |
autostart | нет, true | false - служба не запускает гейтвей на up, он ждет brokapi start |
bot_buffer | нет, 1024 | Сколько событий копится для одного бота. Бот, у которого буфер переполнился, считается слишком медленным: его поток закрывается кадром Lagged, остальные боты не замечают. См. События |
bot_grace | нет, "30s" | Сколько бот может отсутствовать, прежде чем гейтвей отпустит его подписки |
[gateway.ring] | нет | Кольцо последних событий: size (по умолчанию 10000) и max_age (по умолчанию "5m"). От него зависит, как давно бот может отключиться и все равно получить пропущенное |
[gateway.limits.<ведро>] | нет | Заменяет ведро лимита брокера: rate, per, burst, все три обязательны |
[gateway.settings] | нет | Остальные настройки коннектора, как в библиотеке: endpoint, write, exchange, app_name и другие |
Токен - ровно один из двух способов. Оба сразу или ни одного - ошибка конфига. Токен в [gateway.settings] (token, refresh_token,
secret) тоже ошибка: токен не должен попадать в файл, который хранят и копируют.
Файл с токеном должен читаться только вами (chmod 600). brokapi check предупреждает, если это не так (на Linux и macOS).
Путь к нему лучше писать абсолютный: относительный читается от рабочего каталога процесса, а не от каталога конфига.
БКС и заявки. Для торговли у БКС нужен токен на запись и настройка write = true в [gateway.settings], как в библиотеке
(BCS_IS_WRITE). Без этого брокер торговые команды не примет.
Ведра лимита
Гейтвей создает один счетчик лимитов брокера на всех ботов. В [gateway.limits.<ведро>] можно заменить значения одного ведра. Названия
ведер у каждого брокера свои. Их видно в таблице rate limit of the broker команды brokapi status <гейтвей>, а как ведра устроены
и зачем у отмены отдельное: Лимиты запросов. Неизвестное имя - ошибка конфига, в которой перечислены известные.
Длительности
Везде, где ждет время, строка с единицей: "500ms", "30s", "5m", "2h". Число без единицы - секунды.
Что дальше
- Проверить файл:
brokapi check --offline(только файл и токены),brokapi check(еще и чтение счета). - Применить изменения без остановки службы:
brokapi reload. Раздел изменился - гейтвей перезапускается, не изменился - нет. Измененияstate_dir,[service]иlistenбез перезапуска службы не применяются. - Настройки коннекторов: страницы брокеров БКС, Т-Банк, Финам, АЛОР.
Листать можно клавишами Влево и Вправо.