This plugin is in BETA version and NOT recommended to use in production websites
readme varies in respect to version (i.e., branch), there are two available ones.
The Online Judge plugin for Moodle is designed for courses involving programming. It can automatically grade submitted source code by testing them against customizable test cases (ACM-ICPC/Online Judge style).
Component | Description |
---|---|
judgelib |
A local-type plugin which provides an online judge function library to any part of Moodle. |
judges |
Judge engine plugins for judgelib |
clients |
Although there is a developed user interface client, any kind of moodle plugins can work as the client of |
Judge Engine | Description |
---|---|
Compiles and executes C/C++ programs locally in a protected environment (see libsandbox). Supports Linux 32/64-bit only. |
|
Posts all data to sphere-engine.com which compiles and executes programs remotely. Supports 40+ languages, such as C/C++, Java, Python, C#, JavaScript, Perl, PHP. Works on both Windows and Linux. |
|
Docker (under development) |
Posts all data to docker image which compilers, executes, and limiting their behavior. |
Online Judge Assignment Feedback Plugin: online judge version of the official feedback plugin assignment activity.
The workflow is:
-
Administrators install and config it.
-
Teachers create Assignment, choose Online Judge as a feedback type, and setup testcases, etc.
-
Students submit code in Online Judge Assignment Activities.
-
The Judge Daemon judges the submissions in background.
-
Teachers and students get judge results in Online Judge Assignment Activities.
-
Moodle
2.0
-2.7
,3.4+
-
php-cli
-
make
,gcc
,gcc-multilib
, andg++
. -
pcntl
andposix
extension forphp-cli
Ensure that SELinux allows apache to execute outgoing HTTP requests through the following command:
getsebool httpd_can_network_connect
if it is not set true, run:
setsebool -P httpd_can_network_connect on
-
Moodle
2.0
-2.7
,3.4+
-
php-cli
git clone -b OJ_VERSION git://github.com/hit-moodle/moodle-local_onlinejudge.git onlinejudge
💡
|
OJ_VERSION is obtained from the available branches. |
💡
|
MOODLE_PATH means the root path of your moodle installation.
|
If you would like to use sandbox judge engine, then run:
cd MOODLE_PATH/local/onlinejudge/judge/sandbox/sand/libsandbox && ./configure
cd ..
make
💡
|
Make sure the file named sand is executable, and has the following context: system_u:object_r:bin_t:s0 .
|
In order to start using sphere engine, navigate to the following path:
MOODLE_PATH/local/onlinejudge/judge/sphere_engine/api/
and run:
composer install
💡
|
Sphere Engine accepts only one file. So, ensure that the "Maximum number of
uploaded files" under "Submission types" is set to 1 when you create an
assignment.
|
-
If the directory
MOODLE_PATH/local/onlinejudge
exists, remove/move it (because it will be automatically removed). -
Make sure the directory name of this plugin is
onlinejudge
. If not, rename it. -
Put
onlinejudge
intoMOODLE_PATH/local/
-
Login your site as admin and access
/admin/index.php
. The plugin will be installed/upgraded. -
Configure the maximum cpu and memory limits.
-
Run
MOODLE_PATH/local/onlinejudge/cli/install_assign_feedback
to install the local plugin. -
Login your site as admin and access
/admin/index.php
. The plugin will be installed/upgraded. -
In shell,
sudo php MOODLE_PATH/local/onlinejudge/cli/judged.php -n -v
, to launch the Judge Daemon.
-
If the folder
MOODLE_PATH\local\onlinejudge
exists, remove/move it (because it will be automatically removed). -
Make sure the folder name of this plugin is
onlinejudge
. If not, rename it. -
Put
onlinejudge
intoMOODLE_PATH\local\
-
Login your site as admin and access
/admin/index.php
. The plugins will be installed/upgraded. -
Configure the maximum cpu and memory limits.
-
Navigate to
MOODLE_PATH\local\onlinejudge\cli
and runinstall_assign_feedback.bat
to install the local plugin. -
Login your site as admin and access
/admin/index.php
. The plugins will be installed/upgraded. -
In command prompt, write
php.exe MOODLE_PATH\local\onlinejudge\cli\judged.php -v
, to launch the Judge Daemon.
After installation, there will be a new assignment feedback type called Online Judge appears in the "Feedback types" while creating the assignment. Simply check that box and follow the inline help.
After checking the Online Judge
checkbox, several options will appear:
-
Programming Language (please note that if you installed
libsandbox
, there will be two instance of theC
andC++
programming languages which could be judged either usinglibsandbox
or Sphere Engine, however, the ones executed by the sandbox engine will have "(run locally)" next to them). -
"Ratio for presentation error" (please click the question mark symbol next to that field).
-
"Compile only" (please click the question mark symbol next to that field).
-
"Link Math Library" (please click the question mark symbol next to that field).
-
"Allow Warnings" (please click the question mark symbol next to that field).
-
"Link Static Libraries" (please click the question mark symbol next to that field). It is recommended to enable that option if you are using
libsandbox
. -
"Maximum CPU time" (please click the question mark symbol next to that field).
-
"Maximum memory usage" (please click the question mark symbol next to that field).
-
"Sphere-Engine Client ID" (If you are using sphere engine, you can find your client id in the "API Tokens" tab)
-
"Sphere-Engine Access Token" (If you are using sphere engine, you can find your access token in the "API Tokens" tab)
After creating the assignment, two buttons will appear in the assignment page
context, Test Case Management
and Rejudge All
buttons.
If you click the Test Case Management
button, you will be redirected to a web
form which allows you to specify several test cases which will be tested against
the submitted code. You can specify these test cases either in the textarea
fields or by uploading testcase files and from which the expected input or
output will be read.
You may also choose to specify a grade per testcase (e.g., based on their difficulty).
This option might come in handy if you have edited the assignment or the judging options and would like the have the edits reflected in the previously judged submissions.
If you expand the "Online Judge" tab of a submission, there will be a Force
Judge
button which allows you to only rejudge that submission.
The judge daemon, which exists in cli/judged.php
, has several helpful options for debugging purposes. Use --help
argument for more information.
Judge all unjudged tasks.
Options:
-h, --help Print out this help
-n, --nodaemon Do not run as daemon (Linux only)
-o, --once Exit while no more to judge
-v, --verbose Verbose output
Example:
$sudo -u www-data /usr/bin/php local/onlinejudge/cli/judged.php
Home |
https://github.com/hit-moodle/moodle-local_onlinejudge |
FAQ |
https://github.com/hit-moodle/moodle-local_onlinejudge/wiki |
Bug reports, feature requests, help wanted and other issues: |
https://github.com/hit-moodle/moodle-local_onlinejudge/issues |