INGInious Architecture¶
Frontend¶
Frontend architecture is mainly based on web.py framework.
Basically the python code is in the root folder. A template
folder groups HTML templates used by the framework and a static
folder contains CSS and JS files.
Also a page
directory contains all the page definitions. Those definitions are Python class that implement GET and POST methods. This is not the only job of those class but it’s the main one.
Some important python modules (related to frontend development) are defined in the frontend like:
User manager
Submission manager
Plugin manager
Tasks and Courses factories
webdav
…
Those modules manage object use only in the frontend. They are never shared with the backend or common parts.
In addition of this a plugins
package contains all the plugins that are used by the instance. Those plugins must first be defined in the configuration file.
Besides, a task_dispensers
package has been add to ensure the distribution of question through the frontend. This add extra feature to improve the task listing for a course.
Finally, a tests
package gather all the tests write to ensure the good behaviour of the frontend.
Backend queue¶
Backend package architecture is quite simple to understand are there are two important files.
First one is topic_priority_queue.py
that defines a queue data structure based on topics.
The other one is backend.py
which define the all backend logic base on message passing. Backend uses the topic priority queue to handle requests.
Agent¶
Agent package is split into python subpackages : Docker and MCQ.
MCQ subpackage defines a class object that implements the MCQ Agent. This comes with translation configuration files.
Docker subpackage also defines a class object that implements Docker Agent. An interface to Docker is also defined as utils for Docker mangement. Finally a timeout interface is also declared to especially manage timeout in agent.