Интеграция с ejudge

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
Post Reply
quick
Posts:20
Joined:16 November 2008, 17:40
Интеграция с ejudge

Post by quick » 13 April 2011, 22:18

Доброго времени суток.
Я успешно использую ejudge для проведения соревнований уже довольно долгое время, но недавно появилась задача тесной интеграции самописного движка сайта олимпиад с самой системой. Решение найти своими силами не получилось, поэтому решил обратиться (снова) к уважаемому автору и сообществу и задать несколько вопросов.

1. При регистрации пользователей на сайте регистрационная информация автоматически вставляется в базу ejudge (используется MySQL плагин). К сожалению ejudge не всегда воспринимает обновленную информацию и пользователь зайти в интерфейс new-client может, но при отправке решения в поле team пишется null, и вердикт всегда check failed. Помогает перезагрузка конфигов контеста из мастер интерфейса. Можно это как-то обойти? Есть какой-нибудь API для перезагрузки таблиц или может быть можно отключить их кеширование?

2. Пытаемся реализовать отправку задачи через интерфейс нашего сайта. Для этого логинимся используя ejudge-contests-cmd и далее используя ключ сессии и эту же программу сабмитим задачу.
Но как узнать есть ли в данный момент у конкретного пользователя открытая сессия в системе и ее ключ? Сколько времени хранится ключ сессии? Можно, конечно, после каждой операции разлогиниваться, тогда этот вопрос не встает, но это как-то не хорошо.

Также был найден баг: при попытке удаления привелегированного пользователя из serve-control -> details -> edit serve configuration file -> general settings -> user permissions -> delete возвращается ошибка super-serve error: invalid parameter. Приходится всегда удалять из конфиг файла вручную.

Еще хотелось бы иметь более подробное логирование. Например если при операции merge runs in xml format произошла ошибка парсинга хмл-а, то ничего внятного не говорится. Этот же хмл я минуту назад сгенерировал из master интерфеса командой Write runs in XML internal format with source. Есть где-нибудь подробные логи?

Спасибо

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Интеграция с ejudge

Post by cher » 14 April 2011, 23:17

quick wrote:Доброго времени суток.
1. При регистрации пользователей на сайте регистрационная информация автоматически вставляется в базу ejudge (используется MySQL плагин). К сожалению ejudge не всегда воспринимает обновленную информацию и пользователь зайти в интерфейс new-client может, но при отправке решения в поле team пишется null, и вердикт всегда check failed. Помогает перезагрузка конфигов контеста из мастер интерфейса. Можно это как-то обойти? Есть какой-нибудь API для перезагрузки таблиц или может быть можно отключить их кеширование?
Попробуйте выполнить

Code: Select all

ejudge-contests-cmd unload
после добавления пользователя.
quick wrote: 2. Пытаемся реализовать отправку задачи через интерфейс нашего сайта. Для этого логинимся используя ejudge-contests-cmd и далее используя ключ сессии и эту же программу сабмитим задачу.
Но как узнать есть ли в данный момент у конкретного пользователя открытая сессия в системе и ее ключ? Сколько времени хранится ключ сессии? Можно, конечно, после каждой операции разлогиниваться, тогда этот вопрос не встает, но это как-то не хорошо.
Ключи сессии хранятся в таблице cookies, если используется MySQL. Там же есть время окончания действия ключа.
quick wrote:Еще хотелось бы иметь более подробное логирование. Например если при операции merge runs in xml format произошла ошибка парсинга хмл-а, то ничего внятного не говорится. Этот же хмл я минуту назад сгенерировал из master интерфеса командой Write runs in XML internal format with source. Есть где-нибудь подробные логи?
Посмотрите в /home/judges/var, там находятся лог-файлы серверных компонент.

yun_man_ger
Posts:32
Joined:27 September 2010, 07:37

Re: Интеграция с ejudge

Post by yun_man_ger » 29 April 2011, 15:38

Здравствуйте,

в ejudge есть "Доступ к ejudge из программ на Питоне".
Но в нем реализован лишь доступ к пользователям.

будет ли продолжение разработки?

Хотелось бы его так-же использовать и для других целей.
Для получения данных о контестах, управление контестами.
например получить результаты контеста, создать новый контест, вызвать "Check contest settings" програмно.
елементарно добавить clar, ответить на clar.

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

одним словом хотлось бы занести весь функционал cgi в виде api.

возможно ли это? есть ли планы на это?

если возможно, но некому, то возможно ли записаться к вам в конрибьютеры.
я не спец, но программировать умею.
методым тыка добавлял в Ejudge-contests-cmd свои комманды.

такие как

dump-languages - получить языки контеста
get-contest-status - получить статус контеста
get-contest-sched - время старта
get-contest-duration - длительность
get-contest-description - три предыдущих вместе + название контеста
submit-run-v2 - сабмит задачи не по short_name а по id

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Интеграция с ejudge

Post by cher » 04 May 2011, 07:43

yun_man_ger wrote:Здравствуйте,
в ejudge есть "Доступ к ejudge из программ на Питоне".
Но в нем реализован лишь доступ к пользователям.

будет ли продолжение разработки?

Хотелось бы его так-же использовать и для других целей.
Для получения данных о контестах, управление контестами.
например получить результаты контеста, создать новый контест, вызвать "Check contest settings" програмно.
елементарно добавить clar, ответить на clar.

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

одним словом хотлось бы занести весь функционал cgi в виде api.

возможно ли это? есть ли планы на это?
Это возможно. Но конкретно моих планов на реализацию такой функциональности нет, главным образом потому что мне в данный момент такая функциональность не нужна, и нет применения, на котором эту функциональность можно было бы тестировать.
yun_man_ger wrote: если возможно, но некому, то возможно ли записаться к вам в конрибьютеры.
я не спец, но программировать умею.
методым тыка добавлял в Ejudge-contests-cmd свои комманды.

такие как

dump-languages - получить языки контеста
get-contest-status - получить статус контеста
get-contest-sched - время старта
get-contest-duration - длительность
get-contest-description - три предыдущих вместе + название контеста
submit-run-v2 - сабмит задачи не по short_name а по id
Это было бы весьма желательно. Присылайте патчи.
Если Вы добавите в ejudge функциональность, которая нужна Вам, я думаю, это будет полезно всем пользователям ejudge.

vk
Posts:165
Joined:24 August 2007, 13:44
Location:Ханты-Мансийск
Contact:

Re: Интеграция с ejudge

Post by vk » 06 June 2011, 22:33

ИМХО, если вся информация по турнирам и посылкам будет храниться в MySQL, то работать с ejudge станет намного проще.
(Но отдельное спасибо разработчикам за то, что начали поддерживать MySQL, я этого долго ждал :razz:)
dump-languages - получить языки контеста
get-contest-status - получить статус контеста
get-contest-sched - время старта
get-contest-duration - длительность
get-contest-description - три предыдущих вместе + название контеста
submit-run-v2 - сабмит задачи не по short_name а по id
было бу неплохо, конечно, плюс еще кое-что добавить.

И тогда мне не пришлось бы писать парсер конфигов на XML и INI-like и работать напрямую с базой :-)
А так - я только отсылать на поверку не научился в обход еjudge-contests-cmd, все остальное - напрямую 8)

vk
Posts:165
Joined:24 August 2007, 13:44
Location:Ханты-Мансийск
Contact:

Re: Интеграция с ejudge

Post by vk » 06 June 2011, 22:43

А по поводу
при отправке решения в поле team пишется null, и вердикт всегда check failed. Помогает перезагрузка конфигов контеста из мастер интерфейса
У меня такое бывает и при использовании стандартного интерфейса. На виртуальных турнирах с открытой регистрацией точно бывает время от времени, на остальных - не помню. При этом перезагружать турнир иногда не представляется возможным (хотя вроде и помогает), т.к. идет турнир.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Интеграция с ejudge

Post by cher » 09 June 2011, 14:39

vk wrote:А по поводу
при отправке решения в поле team пишется null, и вердикт всегда check failed. Помогает перезагрузка конфигов контеста из мастер интерфейса
У меня такое бывает и при использовании стандартного интерфейса. На виртуальных турнирах с открытой регистрацией точно бывает время от времени, на остальных - не помню. При этом перезагружать турнир иногда не представляется возможным (хотя вроде и помогает), т.к. идет турнир.
Перегрузку турнира вполне безопасно проводить и во время его работы. Информация не будет потеряна.

Указанная ошибка возникает из-ра рассинхронизации списков пользователей в турнире и базе данных. Я попробую эту проблему исправить к следующей версии.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Интеграция с ejudge

Post by cher » 09 June 2011, 14:43

vk wrote:ИМХО, если вся информация по турнирам и посылкам будет храниться в MySQL, то работать с ejudge станет намного проще.
(Но отдельное спасибо разработчикам за то, что начали поддерживать MySQL, я этого долго ждал :razz:)
Мне кажется, что реляционная база данных не очень подходит для хранения конфигурационной информации о турнирах. Поэтому конфигурационные файлы переносить в базу данных не планируется.

vk
Posts:165
Joined:24 August 2007, 13:44
Location:Ханты-Мансийск
Contact:

Re: Интеграция с ejudge

Post by vk » 10 June 2011, 06:37

cher wrote: Перегрузку турнира вполне безопасно проводить и во время его работы. Информация не будет потеряна.
Я вот не помню, помогает ли перегрузка турнира, или все-таки нужно перезагружать ejudge. В следующий раз возникнет такая проблема - поисследую.
cher wrote: Указанная ошибка возникает из-ра рассинхронизации списков пользователей в турнире и базе данных. Я попробую эту проблему исправить к следующей версии.
Было бы неплохо :-)
cher wrote: Мне кажется, что реляционная база данных не очень подходит для хранения конфигурационной информации о турнирах. Поэтому конфигурационные файлы переносить в базу данных не планируется.
Нет - так нет.
Просто часть информации о турнирах храниться в contest.xml, часть в serve.cfg и часть в MySQL... Все конфиги перенести в БД довольно трудно, но часть - вполне. Да и получать данные из базы данных быстрее, чем парсить файлы каждый раз.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Интеграция с ejudge

Post by cher » 14 June 2011, 14:38

vk wrote:Просто часть информации о турнирах храниться в contest.xml, часть в serve.cfg и часть в MySQL... Все конфиги перенести в БД довольно трудно, но часть - вполне. Да и получать данные из базы данных быстрее, чем парсить файлы каждый раз.
Ну, может тогда вам самим копировать в БД ту часть конфигурационных параметров, которые вам нужны в соответствии со спецификой использования? К тому же, если анализаторы .cfg и XML файлов уже есть...

yun_man_ger
Posts:32
Joined:27 September 2010, 07:37

Re: Интеграция с ejudge

Post by yun_man_ger » 17 June 2011, 16:19

Патч о котором говорил есть тут.

http://buben.kz/2011/06/17/patch-ejudge-dlya-algoprog/

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Интеграция с ejudge

Post by cher » 25 June 2011, 22:05

Я добавил патч в SVN. Только вместо команды "submit-run-v2" команда "submit-run" поддерживает задание Id задачи в формате "#Id".

yun_man_ger
Posts:32
Joined:27 September 2010, 07:37

Re: Интеграция с ejudge

Post by yun_man_ger » 29 June 2011, 09:30

:D

Post Reply