🛠 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 Placeholder | Deskripsi | Contoh 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