7 дней Pro+ · без картыНачать пробный период

Устранение неполадок

Идентификаторы ошибок, с которыми вы можете столкнуться, что они означают и что с ними делать.

График остаётся пустым или сообщает о проблемах с WebGL

Графики рисуются средствами WebGL. Если браузер вообще не может создать контекст WebGL, график сообщает, что не смог инициализироваться, и просит обновить браузер или включить аппаратное ускорение — эти два шага и являются решением. Если графический контекст теряется позже, например после сброса GPU, выгруженной вкладки или выхода мобильного устройства из сна, график сообщает, что отрисовка приостановлена и возобновится, когда GPU восстановится. Восстановление автоматическое: когда браузер восстанавливает контекст, график пересобирает ресурсы GPU и заново загружает текущие свечи, поэтому перезагрузка страницы не нужна. Если сама пересборка не удаётся, график остаётся на паузе, а сбой записывается в консоль браузера.

Инициализацияконтекст созданОтрисовкаконтекст GPU потерянПаузаконтекст восстановленПересборкасвечи загружены занововосстановление автоматическое — перезагрузка не нужнаОстановленосообщается в консоли браузераконтекст недоступенсбой пересборки
График запрашивает у canvas контекст WebGL2 при монтировании. Если контекст не получен, инициализация проваливается один раз и окончательно для этой загрузки страницы, и график показывает сообщение об обновлении браузера или включении аппаратного ускорения. Если контекст есть и позже теряется, график отменяет стандартную обработку потери браузером — именно этот шаг вообще делает восстановление возможным — и приостанавливает отрисовку. При восстановлении он пересобирает ресурсы GPU и принудительно заново загружает текущие свечи, затем продолжает работу. Если пересборка выбрасывает ошибку, график возвращается в состояние паузы и пишет сбой в консоль браузера; каждый переход оставляет в консоли строку `[WebGLChart]`.

Что должен обеспечивать ваш браузер

Свечные графики и тепловые карты рисуются в контексте WebGL2. Рендерер запрашивает у canvas именно webgl2 и выбрасывает ошибку, когда браузер ничего не возвращает — именно в этот момент график сообщает о сбое инициализации WebGL и предлагает обновить браузер или включить аппаратное ускорение. Программного пути отрисовки для самих свечей нет: слой аннотаций использует обычный 2D-canvas, но без WebGL2 ценовой ряд не отрисовывается вовсе. Поэтому браузер, поддерживающий только первое поколение WebGL, или запущенный с отключённым ускорением, даёт пустой график ровно с этим сообщением.

Когда контекст создан и позже теряется — сброс драйвера GPU, выгруженная фоновая вкладка, пробуждение мобильного устройства, — график отменяет стандартную обработку потери браузером, что и делает автоматическое восстановление возможным в принципе, и переходит в состояние паузы. При восстановлении он пересобирает ресурсы GPU, инвалидирует версию своего буфера, чтобы каждая свеча была загружена заново, и возвращается к отрисовке. Каждый шаг оставляет в консоли браузера строку с префиксом [WebGLChart]: одну на потерю, одну на успешную пересборку и строку ошибки, если пересборка не удалась. Эти три строки — самое быстрое свидетельство, которое стоит приложить к сообщению о пустом графике.

Перенаправления на вход, предложения перейти на платный тариф и отключённые возможности

Открытие защищённой страницы без входа отправляет вас на страницу входа с сохранением назначения и возвращает туда после входа; та же ситуация для запроса API отвечает 401 с UNAUTHORIZED. Если вы вошли, но ваш тариф не покрывает страницу, вы перенаправляетесь на страницу Upgrade с требуемым уровнем в строке запроса, а эквивалентный запрос API отвечает 402 с PAYMENT_REQUIRED плюс ключ возможности. Живой чат ограничен так же — на уровне preview страница Support показывает призыв перейти на платный тариф вместо чата. Возможность, отключённая оператором, отвечает 503 с KILL_SWITCH и заголовком Retry-After.

В браузереЧерез APIЗапросВход выполнен?нетСтраница входа303 → /auth401UNAUTHORIZEDдаТариф покрывает?нетСтраница Upgrade303 → /upgrade402PAYMENT_REQUIREDдаВозможность включена?нетСкоро503503KILL_SWITCH + Retry-AfterдаСтраница отображается
Шлюз авторизации принимает решение один раз, а затем отображает его двумя способами. Если вход не выполнен, запрос страницы отправляется на экран входа с сохранением назначения, а вызов API получает 401 UNAUTHORIZED. Тариф, не покрывающий маршрут, отправляет запрос страницы на экран Upgrade с указанием источника, исходного пути и требуемого уровня, а вызову API отвечает 402 PAYMENT_REQUIRED вместе с ключом возможности и требуемым уровнем. Отключённая возможность отображает страницу ошибки kill switch для браузера и документ problem+json для вызова API. Оба варианта 503 несут одно и то же значение Retry-After из записи возможности в реестре: 60 секунд для Funding Heatmap, 1800 для CME Detector, 300 по умолчанию.

Заблокировано, урезано и задержано — что не является сбоем

Два визуальных сигнала означают «ваш тариф этого не включает», и ни один из них не является ошибкой. Ограниченная поверхность закрыта наложением с замком, которое перехватывает и клики мыши, и активацию с клавиатуры и открывает диалог перехода на платный тариф вместо ссылки под ним. Частично видимый виджет данных вместо этого получает встроенную золотую плашку — она используется там, где данные есть, но урезаны, например при задержанном тике или ограниченной глубине истории. Если график показывает меньше баров, чем вы ожидаете, и несёт такую плашку, история была сокращена намеренно, а не потеряна.

Третье наблюдение объясняется временем. Шлюз намеренно остаётся неопределённым, пока не загрузятся ваши права доступа: до этого он скрыт и неактивен, поэтому платящие пользователи никогда не видят мигания заблокированного состояния перед разблокировкой. Видимое следствие в том, что ограниченная плитка может быть пустой мгновение сразу после загрузки страницы. На сервере та же политика отвечает на запросы API кодом 402 и полезной нагрузкой с ключом возможности и требуемым уровнем, тогда как навигация браузера перенаправляется на страницу Upgrade с источником, исходным путём и требуемым уровнем в строке запроса — именно поэтому страница Upgrade может точно сказать, что вы пытались открыть.

Коды ошибок, которые несёт ответ API

У каждого ответа собственного API приложения фиксированная структура. Успех несёт success: true, полезную нагрузку data и метку времени. Сбой несёт success: false и объект error с машиночитаемым code, человекочитаемым message и, возможно, target с именем проблемного поля, объектом details с дополнительным контекстом и doc_url. Приводите code, когда сообщаете о проблеме: код стабилен, а формулировка сообщения — нет. Существует двенадцать кодов, и каждый привязан к одному HTTP-статусу.

Две структуры ответа находятся вне этого набора. Более старые эндпоинты отвечают устаревшей оболочкой с code, msg, data и success, где code — это числовая строка, сгруппированная по классам: 10xxx для проблем со входными данными, 20xxx для аутентификации, 30xxx для авторизации, 40xxx для отсутствующих или конфликтующих ресурсов, 50xxx для серверных сбоев и 60xxx для вышестоящих сервисов. Проблемы базы данных транслируются, прежде чем дойти до вас: потерянное соединение становится 503 с «Database temporarily unavailable», запрос, превысивший лимит времени, становится 504 с «Request timed out», дубликат становится 409, а нарушение ограничения становится 400. Первые два стоит повторить; последние два будут повторяться, пока не изменятся входные данные.

  • BAD_REQUEST — 400. Запрос сформирован неверно. Проверьте отправленные параметры.
  • VALIDATION_ERROR — 400. Одно из входных значений не прошло проверку; ответ называет его в target.
  • UNAUTHORIZED — 401. Действительной сессии нет. Войдите и повторите запрос.
  • PAYMENT_REQUIRED — 402. Вход выполнен, но тариф этого не покрывает. details несёт featureKey, requiredTier и, для доменных ограничений, requiredDomain.
  • FORBIDDEN — 403. Аутентификация пройдена, но действие не разрешено. Точная причина намеренно остаётся на сервере.
  • NOT_FOUND — 404. По этому адресу такого ресурса нет.
  • CONFLICT — 409. Ресурс изменился у вас под руками или уже существует. Перезагрузите и повторите.
  • PAYLOAD_TOO_LARGE — 413. Тело запроса превышает допустимый размер.
  • RATE_LIMITED — 429. Слишком много запросов. Ответ несёт Retry-After, X-RateLimit-Limit и X-RateLimit-Remaining; у эндпоинтов ИИ собственный отдельный лимит, и они отвечают отдельным кодом AI_RATE_LIMITED.
  • INTERNAL_ERROR — 500. Непредвиденный серверный сбой. Сообщите о нём, указав ваш Error ID.
  • UPSTREAM_ERROR — 502. Сервис, от которого зависит эндпоинт, дал сбой. Повторите позже.
  • SERVICE_UNAVAILABLE — 503. Временно недоступно. Обратите внимание, что намеренно отключённая возможность использует другое тело ответа 503, описанное ниже.

Kill switch: кто отключает возможность и насколько

Kill switch — это выключатель одной названной возможности, которым управляет команда Athenum, а не вы, и именно из-за него страница может быть недоступна, пока остальное приложение исправно. Один и тот же 503 порождают две разные ситуации. Если возможность отключена, потому что её бэкенд ещё не выпущен, страница ошибки читается как «Coming Soon» и поясняет, что возможность находится в разработке. Если оператор отключил работающую возможность, страница читается как «Temporarily Unavailable». Оба ответа идентифицируют себя кодом KILL_SWITCH и стабильным публичным именем возможности, таким как funding-heatmap или cme-detector.

Ответ подсказывает, сколько ждать. Каждый выключатель несёт собственное значение Retry-After: 60 секунд для Funding Heatmap, 1800 секунд для CME Detector и 300 секунд для всего, где явная настройка не задана. Вызывающие API получают ту же информацию как application/problem+json, включая флаг defaultKilled, который отличает случай «ещё не построено» от случая «отключено оператором». Сам ответ 503 никогда не кешируется, а успешные ответы на переключаемых эндпоинтах кешируются не более десяти секунд, поэтому переключение доходит до вас быстро; общий кеш всё же может отдавать предыдущий ответ примерно пятнадцать секунд после переключения.

Отключённый маршрут обычно недостижим кликом. Маршруты, которые выключатель блокирует полностью, отфильтровываются из карточек главной страницы и скрываются из командной палитры, поэтому 503 видят в основном те, кто пользуется закладкой, прямой ссылкой или API. Не всякий выключатель блокирует маршрут: некоторые вместо этого меняют поведение на месте — поэтому возможность может быть затронута, хотя ни одна страница не отдаёт 503. Страницы kill switch не несут Error ID, потому что такой ответ является намеренным решением, а не инцидентом, и идентификатор не выдумывается ради заполнения поля.

Общесайтовое обслуживание против сбоя одной возможности

Запланированное окно обслуживания выглядит не так, как любой другой сбой. Вместо обычной страницы ошибки вы получаете самостоятельный документ с заголовком «We'll be back soon», без навигации, без Error ID и без ссылки на поддержку. Он отдаётся с HTTP 503 и Retry-After в один час. Страница полностью самодостаточна — её стили и логотип встроены, и она не делает сетевых запросов, — поэтому она отображается даже тогда, когда бэкенд, база данных и аналитика недоступны. Она также помечена как неиндексируемая, чтобы поисковые системы восприняли сбой как временный.

Шлюз намеренно узок. Он подменяет только браузерные запросы страниц: запросы GET или HEAD, которые просят HTML. Вызовы API под /api/ проходят насквозь, как и эндпоинты проверки здоровья контейнера и любой запрос скриптов, стилей или шрифтов. Стоит знать о следствии: во время обслуживания клиент API или встроенная интеграция могут продолжать работать как обычно, пока браузер показывает страницу обслуживания. Если вы видите «We'll be back soon», затронут весь сайт; если вы видите страницу ошибки 503 с названием одной возможности, затронута только она.

Ничего не видноразбирайте снаружи внутрьВсе страницы пустые?даОбщесайтовое обслуживание503 с подсказкой повторанетЦелая страница отдаёт 503?даKill switch на одной возможностикод KILL_SWITCHнетПуста только область графика?даWebGL не запустилсявключите аппаратное ускорениенетПанель сообщает о сбое чтения?даСбой чтения источникаможно повторить позженетПанель сообщает об ожидании?даДанных пока нетсборщик ещё не доставилнетЗначок замкаограничение тарифа, не сбой
Разбирайте сбой снаружи внутрь. Пустая каждая страница означает, что включён общесайтовый режим обслуживания (503 с подсказкой повторить через час). Отдельная страница, отвечающая 503 с «Coming Soon» или «Temporarily Unavailable», — это kill switch на одной названной возможности. Внутри загрузившейся страницы область графика и панель данных ломаются по-разному: график без контекста WebGL2 сообщает о сбое инициализации, а панель называет собственную причину. «Fleet read failed» — это ошибка транспорта с кнопкой повтора, и источник при этом может быть исправен; «Awaiting Fleet-Bridge» со значком UNAVAILABLE означает, что чтение прошло успешно и вернуло пусто; значок замка означает ограничение тарифа, а не сбой.

Как читать пустую панель: значок называет сбой

Панели на страницах Macro несут в углу небольшой значок, и этот значок — самый быстрый способ отличить сбой от тихого источника данных. Пять состояний значка описывают реальные данные, а два описывают саму панель. Поскольку значок выводится из тех же правил свежести, по которым панель рисует, он не может заявить состояние, которое данные не подтверждают: панель, которой нечего показать, никогда не помечается STALE, а отсутствующее значение никогда не заменяется подставным числом.

Оболочки уровня панели добавляют второй слой информации. Первая загрузка в процессе отображается скелетом без вердикта и без текста. Чтение, сорвавшееся на транспорте, отображается карточкой ошибки с формулировкой «Fleet read failed — the source may still be live. Retry to reload.» и кнопкой повтора — источник вполне может быть исправен, и повтор является правильной реакцией. Чтение, которое прошло успешно, но не вернуло строк, отображается как «Awaiting Fleet-Bridge» со значком UNAVAILABLE. Эти два выглядят похоже, но означают противоположное: первое — проблема соединения, которую можно повторить, второе означает, что ряд ещё не начал поступать.

Панели TradeFI сообщают причину словами, а не значком. Когда поставщик данных дал сбой, панель сообщает, что данные временно недоступны. Когда поставщик ответил пустотой, она сообщает, что данных по этому символу нет. Институциональное владение добавляет третий случай: примечание о том, что представление является официальным отслеживаемым подмножеством институтов и репрезентативно, а не исчерпывающе, — это заявление об охвате, а не сбой. Списки сопоставимых компаний ведут себя так же и называют нестандартный источник в примечании над панелью, если такой использовался.

  • LIVE — внутридневное наблюдение или наблюдение в реальном времени в рамках ожидаемой частоты.
  • EOD — честное закрытие периода для дневного, недельного, месячного или квартального ряда.
  • STALE — реальное значение, но старше ожидаемой частоты обновления ряда.
  • FALLBACK — последние заведомо корректные кешированные данные, заведомо не текущее значение.
  • MODEL — расчётная эвристика или построение Athenum, а не прямое наблюдение.
  • UNAVAILABLE — панель находится в состоянии ошибки, и ничего не отрисовано.
  • LOADING — первая загрузка ещё идёт, и свежесть пока не определена.

Как сообщить о проблеме: ваш Error ID

Когда запрос не проходит, страница ошибки показывает HTTP-статус, короткий заголовок и — если он был сгенерирован — Error ID. Этот идентификатор создаётся именно для вашего инцидента и прикрепляется к записанному отчёту об ошибке, поэтому поддержка может найти именно ваш случай. Нажмите кнопку копирования рядом с ним, затем выберите «Chat with support»: ссылка переносит Error ID на страницу поддержки. При обращении укажите Error ID, адрес страницы и то, что вы делали. Error ID есть не у каждой ошибки — для намеренно отключённой возможности заглушка не выдумывается, поэтому поле просто отсутствует.

Куда попадает ваш Error ID после копирования

Идентификатор на странице ошибки создаётся на сервере, по одному на инцидент, в момент перехвата сбоя. Сервер пишет запись в лог, содержащую этот идентификатор вместе с HTTP-статусом, именем ошибки, путём запроса, методом запроса и меткой времени; в продакшне запись намеренно опускает стеки вызовов и внутренние детали. Тот же идентификатор прикрепляется к инциденту, отправляемому в систему отслеживания ошибок, поэтому поддержка может сопоставить вашу копию идентификатора с записанным сбоем. Исключение — запросы, которые просто попали на несуществующую страницу: они всё равно получают идентификатор, но не пересылаются в систему отслеживания ошибок.

То, что получает браузер, намеренно скудно — общее сообщение плюс идентификатор, — чтобы через страницу не утекли внутренние детали. Нажатие «Chat with support» переносит идентификатор дальше: ссылка открывает страницу поддержки с темой инцидента, Error ID и просьбой открыть чат, а не запускает виджет чата на сбойной странице. Если кнопка копирования будто бы ничего не делает, значит, запись в буфер обмена была отклонена — так бывает на небезопасных источниках или когда доступ к буферу обмена запрещён, — и сбой записывается в консоль браузера; в этом случае выделите идентификатор вручную.

Доступен ли живой чат на странице поддержки на самом деле, зависит от трёх проверок, выполняемых до отрисовки страницы. Чат требует платного тарифа: на уровне preview страница показывает вместо него предложение перейти на платный тариф. Чат также не выдаётся, пока выключен переключатель мессенджера поддержки и пока запросу требуется согласие, которое не было зафиксировано — а это случай запросов, которые выглядят европейскими, британскими или швейцарскими, и запросов, вообще не несущих признака страны, поскольку проверка отказывает в безопасную сторону. В каждом из этих случаев страница всё равно предлагает почту и сообщество в Discord, и эти два канала присутствуют всегда, независимо от тарифа.

Что проверить, прежде чем сообщать о проблеме

Большая часть того, о чём спросит поддержка, уже видна на экране. Проверки ниже занимают меньше минуты и превращают «оно сломалось» в сообщение, с которым можно работать. Двигайтесь снаружи внутрь — весь сайт, затем страница, затем панель, — потому что у каждого слоя свой владелец и своё решение. Ничего здесь не требует инструментов разработчика, кроме двух пунктов, где они упомянуты явно.

  • Определите масштаб. Затронуты все страницы, одна страница или одна панель внутри в остальном работающей страницы? «We'll be back soon» означает весь сайт; страница 503 с названием возможности означает только эту возможность.
  • Прочитайте формулировку дословно. «Coming Soon» и «Temporarily Unavailable» — разные ситуации, хотя оба являются 503, а тексты панелей «Fleet read failed» и «Awaiting Fleet-Bridge» означают противоположное.
  • Поищите значок. LOADING, STALE, FALLBACK и UNAVAILABLE описывают разные состояния, а замок или золотая плашка означают ограничение тарифа, а не сбой.
  • Повторите один раз после ожидания. Временные ответы сами указывают своё окно повтора в заголовке Retry-After, видимом на панели сети браузера; более ранний повтор обычно вернёт тот же ответ.
  • При пустом графике откройте консоль браузера и поищите строки с префиксом [WebGLChart], затем убедитесь, что браузер актуален и аппаратное ускорение включено.
  • Скопируйте Error ID, если он показан. Если кнопка копирования ничего не делает, выделите его вручную — браузер может отклонить запись в буфер обмена.
  • Запишите адрес страницы, время и то, что вы делали непосредственно перед сбоем. Error ID определяет инцидент; эти три вещи определяют, чего вы пытались добиться.

Коды ошибок сборщика

Сборщик данных по фьючерсам помечает каждый сбой стабильным кодом, и этот код появляется в квадратных скобках везде, где текст ошибки показывается или пишется в лог. Это внутренние идентификаторы бэкенда: увидев такой в ответе поддержки или в заметке о состоянии, вы понимаете, какой этап дал сбой и повторил ли сборщик попытку, переключился ли на другой источник или сдался.

КодЗначениеВосстановление
FUT-1001HttpFailedЗапрос к бирже так и не завершился.HTTP request failed for {exchange}: {message}Повторяется
FUT-1002ExchangeErrorБиржа ответила, но собственной ошибкой.Exchange error for {exchange}: {message}Переключается на другой источник
FUT-1003RateLimitExceededБиржа отклонила вызов из-за превышения её лимита частоты запросов.API rate limit hit for {exchange}Повторяется
FUT-1004ParseFailedОтвет пришёл, но не читается в ожидаемой структуре.Parse error for {exchange}: {message}Переключается на другой источник
FUT-1005DatabaseErrorЗапись или чтение собранных данных не удались.Database error: {source}Повторяется
FUT-1006SerializationErrorПолезную нагрузку не удалось закодировать или декодировать, поэтому повтор не поможет.Serialization error: {source}Фатальная
FUT-1007RequestErrorСбой самого HTTP-клиента до или во время вызова.Request error: {source}Повторяется
FUT-1008ConfigErrorНеверная конфигурация или окружение — это не проблема рыночных данных.Config error: {message}Фатальная
FUT-1009RateLimiterInternalСобственный ограничитель частоты запросов сборщика дал сбой.Rate limiter error: {message}Повторяется
FUT-1010UnknownСбой, не подпадающий ни под одну из категорий выше. Фиксированного действия по восстановлению для него не определено.{message}Не классифицирована

Коды ошибок Volume Delta

Эндпоинт Volume Delta возвращает код с префиксом VDLT_ и подсказку. Ошибки, которые можно повторить, являются временными — тот же запрос может пройти успешно чуть позже; остальные требуют изменить сам запрос.

КодМожно повторитьПодсказка, возвращаемая API
VDLT_EXCHANGE_TIMEOUTДаRetry after a few seconds. The exchange may be experiencing high load.
VDLT_EXCHANGE_RATE_LIMITEDДаRetry after 30s. Reduce request frequency.
VDLT_EXCHANGE_BAD_RESPONSEНетThe exchange returned malformed data. Try a different exchange filter.
VDLT_EXCHANGE_UNAVAILABLEДаThe exchange API is down. Data from other exchanges is still available.
VDLT_OHLC_SOURCE_FAILEDДаBinance is the primary price source. Retry in a few seconds.
VDLT_NO_DATAНетAll configured exchanges failed. Check the exchanges parameter or try again later.
VDLT_INVALID_INTERVALНетValid intervals: 1m, 3m, 5m, 15m, 30m, 1h, 4h, 8h, 12h, 1d
VDLT_INVALID_ASSETНетValid assets: BTC, ETH, SOL
VDLT_PARAM_TOO_LONGНетReduce the number of exchange IDs. Maximum 2000 characters.

Столбец с подсказкой воспроизводит английскую строку, которую возвращает API; она не локализуется.

Всё ещё не решается

Обратитесь в поддержку из приложения. Опубликованных целевых уровней обслуживания, показателей доступности или гарантированного времени ответа нет, поэтому эта страница их не заявляет.