Lewati ke konten utama

🛠 Worker

Overview

Worker adalah komponen yang berfungsi menjalankan autograder pada submission yang telah diantrikan oleh Publisher. Worker mengambil submission dari antrian, kemudian mengeksekusi autograder tertentu yang relevan dengan jenis submission tersebut. Worker bertanggung jawab dalam menjalankan proses penilaian otomatis sesuai kriteria yang ditentukan untuk menghasilkan laporan sesuai kontrak yang telah disepakati.

Features and Capabilities

Alur yang dilakukan direviu-worker dalam menjalankan proses autograding.

1. Normalisasi folder submission

Dalam mengirimkan submission, siswa seringkali tidak memperhatikan struktur folder. Ketika berkas .zip diekstrak, ada yang proyek submissionnya berada di high-level, contohnya:

submission -> folder hasil ekstrak sekaligus folder proyek
- src
- package.json
- ... etc

Ada pula yang disimpan secara nested folder, contohnya:

submission -> folder hasil ekstrak
- open-music-api -> folder proyek
- src
- package.json
- ..etc
submission -> folder hasil ekstrak
- my-submission -> folder
- open-music-api -> folder folder proyek
- src
- package.json
- ...etc

Intinya, kita tidak bisa mengontrol berkas yang dikirimkan oleh siswa.

Untuk itu, direviu dibalik layar akan melakukan "normalisasi submission folder" dengan tujuan agar autograder dapat lebih mudah dalam menguji submission. Seluruh folder proyek akan disimpan oleh direviu secara otomatis di high-level folder seperti contoh pertama.

2. Membuat berkas auto-review-config.json di dalam folder submission

direviu menyediakan berkas auto-review-config.json yang merupakan artifact submission. Berkas tersebut akan disimpan pada root proyek submission siswa, setelah diekstrak dan dinormalisasi. Contoh:

submission -> folder hasil ekstrak, dinormalisasi, sekaligus menjadi folder proyek
- src
- package.json
- ... etc
- auto-review-config.json -> artefak submission

Berikut adalah nilai-nilai yang terdapat pada berkas auto-review-config.json.

{
"id": 667273, // submission id -> number
"submitter_name": "Dimas Saputra", // nama siswa yang submit -> string
"quiz_id": 32712, // tutorial/quiz id di dicoding.com -> number
"course_id":610 // kelas id -> number
}

Nilai-nilai pada artifact submission bisa digunakan oleh autograder untuk berbagai hal. Kebanyakan, digunakan untuk membuat pesan approval atau rejection dengan memanfaatkan nilai submitter_name.

Selain itu, nilai-nilai lain digunakan untuk kasus yang lebih spesifik. Contohnya, di a261_assistest nilai course_id dimanfaatkan untuk membuat pesan hasil review yang tergantung kelasnya karena assistest digunakan oleh 3 kelas yang berbeda. Saat ini, course_id juga digunakan untuk menentukan apakah hasil review sifatnya draft (untuk kelas Back-End Pemula AWS) atau sudah fully-automate (untuk kelas Back-End Pemula GCP).

3. Membuat berkas script.sh di dalam folder submission

Selain berkas auto-review-config.json, direviu juga menulis berkas shell scripts yang nantinya akan dieksekusi untuk menjalankan autograder. Berkas shell script ini juga akan disimpan di dalam folder root proyek submission dengan format {submissionId}_{scriptName}.sh.

Berikut adalah contoh berkas shell scripts yang ditulis jika submission id bernilai 667273 dan scriptName a261_assistest.

submission -> folder hasil ekstrak, dinormalisasi, sekaligus menjadi folder proyek
- src
- package.json
- ... etc
- auto-review-config.json -> artefak submission
- 667273_a261_assistest.sh -> shell script untuk menjalankan autograder

Kode yang ditulis dalam berkas shell scripts diambil dari templates scripts yang tersedia pada source code direviu. Saat ini, penambahan templates masih dilakukan secara hardcoded di dalam folder scripts.

Berikut adalah salah satu contoh templates script a80_keris.sh yang tersedia di source code.

java -jar .keris/lib/keris.jar -s $(SUBMISSION_FOLDER_PATH) -r $(SUBMISSION_FOLDER_PATH)

Berikut adalah beberapa placeholder yang dapat diakses via templates scripts.

Sintaks PlaceholderDeskripsiContoh nilai setelah di-bind
$(SUBMISSION_FOLDER_PATH)Mendapatkan absolut path proyek submission/home/app/direviu/submissions/667273

Placeholder tersebut akan di-bind menjadi sebuah nilai ketika berkas shell scripts ditulis pada folder submission.

4. Menjalankan berkas script.sh

direviu dibangun dengan Node.js. Dalam mengeksekusi berkas shell scripts untuk menjalankan autograder, kami memanfaatkan child process fs.execSync dengan beberapa konfigurasi berikut.

  • Current Working Directory -> Folder home dari instance direviu.
  • Execution Timeout -> 10 menit

Repository

direviu

Autograder runner based on queue

Contributors: Dimas, Deden