Momotor Engine overview

Momotor Engine is the part of Momotor that turns submitted work and assignment settings into a result that another system can show to a user. It receives a recipe, configuration, and product, and processes them into a result.

In the main educational use case, the product is a student’s submission. The recipe and configuration describe the assignment: which checks should run, which files or settings they need, and how their output should be combined. The result usually contains mostly static blocks of HTML and related data that can be shown later in a learning environment or another user interface.

Momotor Engine is similar to a continuous integration system. Like a CI system, it organizes work, runs steps in a controlled environment, and stores the outcome. What, or even how, it actually performs the checks is not built directly into the system itself. The behavior comes from the recipe and from the checklets that the recipe asks it to run.

Recipes and checklets

A recipe is a plan for one kind of processing job. Some recipes are generic and are reused by many assignments or courses. Others are specialized for a single assignment. A recipe mainly lists which checklets should run, in which order, and what data each checklet should receive.

Checklets are usually small Python packages. They do the concrete work: for example inspecting files, running tests, rendering feedback, comparing output, or calling a tool like a compiler. Many recipes share the same checklets, which gives Momotor code reuse across assignments and courses. Some checklets are unique because the assignment they support is unique.

See the Recipe structure page for more details on how recipes and checklets work together.

The generally available recipes can be found at the following URL: https://gitlab.tue.nl/momotor/recipe

The broker

The broker coordinates the processing. It accepts work from a client, keeps track of the job, makes the needed bundles and assets available, and schedules work on suitable workers. If a checklet needs an external tool, that tool must be available in the environment where the checklet runs.

This separation is intentional. Momotor Engine provides the organization and the processing framework, while recipes and checklets define the assignment-specific behavior.

Further reading

These package documents describe the pieces behind the overview:

Indices and tables