Charon plugin¶
Plugin is running on moodle.taltech.ee.
Source code is in gitlab.
Thesis is in digikogu.taltech.ee.
Wiki is at gitlab.
Architecture¶
Flows in Charon¶
Submission testing flow¶
Charon is a link between Gitlab and Arete. Whenever a student pushes to a repository a webhook is triggered and the event is sent to https://moodle.taltech.ee/mod/charon/api/git_callback.
There Charon extracts gradable exercises ands sends the information with additional information to Arete.
Once the testing is complete, Arete sends the result back to Charon where it is saved.
Here is what happens inside when receiving git callback:
Tester callback:
Defence flow¶
Defence flow functional requirements.
Future¶
Future nice-to-haves.
Creating Charons through CLI¶
Seeder now allows to choose a course, section under that course and a grade preset to populate the database with a given number of charons, together with its grade category, grademaps and grade items.
Formula calculation multiplies grade items from preset.
Run the following command in /mod/charon
folder
php artisan db:seed --class=CharonSeeder
Enter course ID:
> 2
Choose a preset:
[1] Tests and style [1]
[2] Tests and defense [2]
[3] Tests, style and defense [3]
> 3
Choose a section:
[1] Topic 0 (visible) [1]
[2] Name of topic (visible) [2]
[3] Topic 2 (visible) [3]
[4] Topic 3 (visible) [4]
[5] Topic 4 (visible) [5]
> 5
Enter a number of charons [1]:
> 2
[2020-11-20 22:04:43] develop.INFO: Creating a grade map: [{"grademap_name":"eos - Tests","max_points":"1.00","id_number":"eos_Tests"}]
[2020-11-20 22:04:43] develop.INFO: Creating a grade map: [{"grademap_name":"eos - Style","max_points":"1.00","id_number":"eos_Style"}]
[2020-11-20 22:04:43] develop.INFO: Creating a grade map: [{"grademap_name":"eos - Defense","max_points":"1.00","id_number":"eos_Defense"}]
Successfully linked grades for Charon 241
[2020-11-20 22:04:43] develop.INFO: Creating a grade map: [{"grademap_name":"iure - Tests","max_points":"1.00","id_number":"iure_Tests"}]
[2020-11-20 22:04:43] develop.INFO: Creating a grade map: [{"grademap_name":"iure - Style","max_points":"1.00","id_number":"iure_Style"}]
[2020-11-20 22:04:43] develop.INFO: Creating a grade map: [{"grademap_name":"iure - Defense","max_points":"1.00","id_number":"iure_Defense"}]
Successfully linked grades for Charon 242
Deploying in a new Moodle instance¶
#!/usr/bin/env bash
# Run this file in Moodle server as root from /srv/moodle directory
SRC=/srv/moodle
DEST=/srv/moodle/public_html/mod/charon
die () {
echo >&2 "$@"
exit 1
}
if [ "$#" != 1 ]; then
printf "1 argument required, $# provided. Argument can be test or live.\n\
test - moodle-test\n\
live - moodle-live"
die
fi
ENV=$1 # environment
if [ -d "$SRC/charon" ]; then
rm -r "$SRC/charon"
fi
if [ -f "$SRC/artifacts.zip" ]; then
rm "$SRC/artifacts.zip"
fi
curl -v -X GET --header "PRIVATE-TOKEN: $(cat .charon_token)" -o artifacts.zip "https://gitlab.cs.ttu.ee/api/v4/projects/216/jobs/artifacts/master/download?job=create_production_artifacts"
unzip artifacts.zip
chmod -R 0755 "$SRC/charon"
find "$SRC/charon" -type f -exec chmod 0644 {} \;
chown -R moodle:http "$SRC/charon"
cp -rT charon "$DEST"
chown -R moodle:http /srv/moodle/public_html/mod/charon
chmod -R 775 /srv/moodle/public_html/mod/charon/plugin/storage
find /srv/moodle/public_html/mod/charon/plugin/storage -type f -exec chmod 0664 {} \;
sh clear_opcache.sh $ENV
cd /srv/moodle/public_html
echo "y" | php admin/cli/upgrade.php # answer "y" to prompt
php admin/cli/purge_caches.php
cd mod/charon
php artisan key:generate
php artisan db:seed --force