Интеграция с ejudge
Доброго времени суток.
Я успешно использую 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. Есть где-нибудь подробные логи?
Спасибо
Я успешно использую 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. Есть где-нибудь подробные логи?
Спасибо
Re: Интеграция с ejudge
Попробуйте выполнитьquick wrote:Доброго времени суток.
1. При регистрации пользователей на сайте регистрационная информация автоматически вставляется в базу ejudge (используется MySQL плагин). К сожалению ejudge не всегда воспринимает обновленную информацию и пользователь зайти в интерфейс new-client может, но при отправке решения в поле team пишется null, и вердикт всегда check failed. Помогает перезагрузка конфигов контеста из мастер интерфейса. Можно это как-то обойти? Есть какой-нибудь API для перезагрузки таблиц или может быть можно отключить их кеширование?
Code: Select all
ejudge-contests-cmd unload
Ключи сессии хранятся в таблице cookies, если используется MySQL. Там же есть время окончания действия ключа.quick wrote: 2. Пытаемся реализовать отправку задачи через интерфейс нашего сайта. Для этого логинимся используя ejudge-contests-cmd и далее используя ключ сессии и эту же программу сабмитим задачу.
Но как узнать есть ли в данный момент у конкретного пользователя открытая сессия в системе и ее ключ? Сколько времени хранится ключ сессии? Можно, конечно, после каждой операции разлогиниваться, тогда этот вопрос не встает, но это как-то не хорошо.
Посмотрите в /home/judges/var, там находятся лог-файлы серверных компонент.quick wrote:Еще хотелось бы иметь более подробное логирование. Например если при операции merge runs in xml format произошла ошибка парсинга хмл-а, то ничего внятного не говорится. Этот же хмл я минуту назад сгенерировал из master интерфеса командой Write runs in XML internal format with source. Есть где-нибудь подробные логи?
-
- Posts:32
- Joined:27 September 2010, 07:37
Re: Интеграция с ejudge
Здравствуйте,
в 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
в 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
Re: Интеграция с ejudge
Это возможно. Но конкретно моих планов на реализацию такой функциональности нет, главным образом потому что мне в данный момент такая функциональность не нужна, и нет применения, на котором эту функциональность можно было бы тестировать.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.
Re: Интеграция с ejudge
ИМХО, если вся информация по турнирам и посылкам будет храниться в MySQL, то работать с ejudge станет намного проще.
(Но отдельное спасибо разработчикам за то, что начали поддерживать MySQL, я этого долго ждал
)
И тогда мне не пришлось бы писать парсер конфигов на XML и INI-like и работать напрямую с базой
А так - я только отсылать на поверку не научился в обход еjudge-contests-cmd, все остальное - напрямую
(Но отдельное спасибо разработчикам за то, что начали поддерживать MySQL, я этого долго ждал

было бу неплохо, конечно, плюс еще кое-что добавить.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, все остальное - напрямую

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

Нет - так нет.cher wrote: Мне кажется, что реляционная база данных не очень подходит для хранения конфигурационной информации о турнирах. Поэтому конфигурационные файлы переносить в базу данных не планируется.
Просто часть информации о турнирах храниться в contest.xml, часть в serve.cfg и часть в MySQL... Все конфиги перенести в БД довольно трудно, но часть - вполне. Да и получать данные из базы данных быстрее, чем парсить файлы каждый раз.
Re: Интеграция с ejudge
Ну, может тогда вам самим копировать в БД ту часть конфигурационных параметров, которые вам нужны в соответствии со спецификой использования? К тому же, если анализаторы .cfg и XML файлов уже есть...vk wrote:Просто часть информации о турнирах храниться в contest.xml, часть в serve.cfg и часть в MySQL... Все конфиги перенести в БД довольно трудно, но часть - вполне. Да и получать данные из базы данных быстрее, чем парсить файлы каждый раз.
-
- Posts:32
- Joined:27 September 2010, 07:37
Re: Интеграция с ejudge
Я добавил патч в SVN. Только вместо команды "submit-run-v2" команда "submit-run" поддерживает задание Id задачи в формате "#Id".