Skip to content

Latest commit

 

History

History
97 lines (65 loc) · 9.18 KB

cli-session.md

File metadata and controls

97 lines (65 loc) · 9.18 KB

Взаимодействие с сервером

Программный комплекс участника упакован в docker контейнер. Схема взаимодействия с сервером

Протокол, инкапсуляция

Обмен с сервером происходит по протоколу websocket с помощью высокоуровневой библиотеки socket.io. Весь код обмена с сервером инкапсулирован в клиенте внутри docker контейнера и к нему предоставлен консольный интерфейс, что позволяет интегрироваться с сервером на любом удобном языке программирования.

Количество подключений

С одного токена разрешено только одно одновременное подключение к серверу.

Начало работы

./pku start --mode <mode> --count 300 --type train --lang ru --time
  • mode режим сессии. Возможные варианты: algorithmic/technical/final. Сессию финала можно поднять только в день проведения финальных испытаний.
  • count количество файлов в выборке. Максимум 1000. Если количество файлов превзойдет количество размеченных на данный момент текстов в системе двумя экспертами - то выдастся максимально возможное количество со стороны сервера. Параметр актуален только для алгоритмической сессии.
  • type тип выборки. Возможные варианты: train/test. Параметр актуален только для алгоритмической сессии.
  • lang язык датасета. Возможные варианты: rus/eng/all. Параметр актуален только для алгоритмической сессии. (Будет реализован с 0.20 версии)
  • time время лимита отдачи одного файла. Может принимать параметры в диапазоне от 10 до 60 секунд. По умолчанию 60 секунд. Параметр актуален только для алгоритмической сессии. (Будет реализован с 0.20 версии)

Запуск сессии запускает фоновый процесс клиента websocket соединения в рамках docker контейнера.

это не рекомендуемая практика в рамках идеологии docker контейнера, но docker в ПКУ используется в 1 очередь для инкапсуляции.

Сессия может быть завершена:

  1. В случае завершения приема файлов со стороны сервер. Сервер завершает прием файлов через 5 минут после отдачи последнего файла.
  2. В случае ручного завершения сессии со стороны клиента.
  3. В случае при разрыве соединения которое продлится 15 и более минут.

Вне зависимости от действий пользователя cli интерфейса (за исключением команды pku endSession) клиент websocket соединения будет принимать файлы и складывать их в директорию files/in (в ближайших версиях папки in/out будут разделены на подпапки сессий).

Лимиты времени отдачи файлов клиентом серверу

После того как сервер отдал файл клиенту (с момента push по протоколу websocket) сервер начинает отсчет времени, в рамках которого принятый от клиента файла будет считать уложившимся в сроки.

  • В рамках сессии финала лимит времени на отдачу файлов ограничен техническим регламентом.
  • В рамках сессии технической квалификации лимит на отдачу 60 секунд.
  • В рамках сессии алгоритмической квалификации лимит на отдачу по умолчанию 60 секунд, но может быть изменен отдельным параметром. Если сессия открыта — сервер примет и сохранит файл который был отдан клиентом с просроченным лимитом времени, но пометит его меткой просроченного времени. Если сессия завершена — файл передать невозможно.

Reconnect

В рамках сессии допускается потери соединений до 15 минут каждое. ПКУ может переподключиться командой ./pku start в течение 15 минут. При этому сервер на основе токена переподключит его к последней открытой сессии (параллельно не может быть запущено более 1 сессии, в т.ч. разных типов). В случае прошествии 15 минут сервер принудительно завершит сессию и команда ./pku start будет запускать новую сессию. При переподключении не будет возможности получить с сервера те файлы, которые были переданы за время отключения, по завершению сессии, они будут помечены как не отданные клиентом. Клиент продолжит принимать файлы и складывать их в директорию.

Получение файлов через cli

Команды получения файлов выдает идентификаторы файлов без указания расширения файла.

# Получение последнего переданного файла от сервера клиенту из папки /files/in
./pku getNextFile

# Получение списка всех переданных на данный момент файлов (по сути всех файлов в папке /files/in)
./pku getFileList

Отправка размеченных файлов

Получив файл, участник после их разметки должен положить файл с разметкой в директорию /files/out с тем же именем что и входной файл.

# Командой sendFile отправляется файл который лежит в директории /files/out на сервер
./pku send --fileId <fileId>

# Пример
./pku send --fileId 000015

fileId - это идентификатор, без указания расширения файла.

Принудительное завершение сессии

./pku stop

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

Базовый алгоритм работы

  1. Подключаемся к сессии (pku start ...параметры)
  2. Проверяем наличие нового файла командой getNextFile
  3. Обрабатываем файл (добавляем разметку в json) и кладем обработанный файл в директорию /files/out
  4. Отправляем обработанный файл на сервер командой send

После завершения сессии сервер обрабатывает данные с помощью модулей PSR и модулей расчета критериев на сервере в порядке очереди и предоставляет отчет о прохождении квалификационной сессии.
Отчет о финальной сессии будет доступен после проверки экспертами текстов.

Диагностика неполадок

  1. docker-compose logs может выдать дополнительную информацию если что-то пошло не так.
  2. Запустите docker-compose up -d --force-recreate