From 9f388bbb6aadfe32740fe5c45a4421e76dd9f459 Mon Sep 17 00:00:00 2001 From: 13518104 Kevin Austin Stefano <13518104@std.stei.itb.ac.id> Date: Sat, 6 Mar 2021 20:02:58 +0700 Subject: [PATCH] Add grader --- src/grade-openmp.sh | 35 ++++++++++++++++++++++++ src/grade-openmpi.sh | 35 ++++++++++++++++++++++++ src/python_script/check_openmp.py | 43 ++++++++++++++++++++++++++++++ src/python_script/check_openmpi.py | 43 ++++++++++++++++++++++++++++++ src/python_script/get_testcase.py | 24 +++++++++++++++++ src/python_script/submit_file.py | 16 +++++++++++ 6 files changed, 196 insertions(+) create mode 100644 src/grade-openmp.sh create mode 100644 src/grade-openmpi.sh create mode 100644 src/python_script/check_openmp.py create mode 100644 src/python_script/check_openmpi.py create mode 100644 src/python_script/get_testcase.py create mode 100644 src/python_script/submit_file.py diff --git a/src/grade-openmp.sh b/src/grade-openmp.sh new file mode 100644 index 0000000..9fb5275 --- /dev/null +++ b/src/grade-openmp.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "Usage: ./autograde.sh 13518056 13518104" + exit +fi + +rm -rf $2/* + +rm -rf ./tmp +mkdir ./tmp +mkdir ./tmp/testcases + +if ! python3 ./python_script/get_testcase.py $1; then + exit +fi + +testcases_names=() + +readarray -d '' testcases_names < <(find ./tmp/testcases -type f -print0) + +for tc in ${testcases_names[@]}; do + ./openmp-script.sh $tc +done + +if ! python3 ./python_script/check_openmp.py $1 $2; then + exit +fi + +zip -r $1.zip . + +if ! python3 ./python_script/submit_file.py $1 $1.zip; then + exit +fi +echo "Thank you for using our service!" diff --git a/src/grade-openmpi.sh b/src/grade-openmpi.sh new file mode 100644 index 0000000..010c5c4 --- /dev/null +++ b/src/grade-openmpi.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +if [ "$#" -ne 2 ]; then + echo "Usage: ./autograde.sh 13518056 13518104" + exit +fi + +rm -rf $2/* + +rm -rf ./tmp +mkdir ./tmp +mkdir ./tmp/testcases + +if ! python3 ./python_script/get_testcase.py $1; then + exit +fi + +testcases_names=() + +readarray -d '' testcases_names < <(find ./tmp/testcases -type f -print0) + +for tc in ${testcases_names[@]}; do + ./openmpi-script.sh $tc +done + +if ! python3 ./python_script/check_openmpi.py $1 $2; then + exit +fi + +zip -r $1.zip . + +if ! python3 ./python_script/submit_file.py $1 $1.zip then + exit +fi +echo "Thank you for using our service!" diff --git a/src/python_script/check_openmp.py b/src/python_script/check_openmp.py new file mode 100644 index 0000000..7021a04 --- /dev/null +++ b/src/python_script/check_openmp.py @@ -0,0 +1,43 @@ +import os +import sys +import requests + +from os import walk + +nim = sys.argv[1] +openmp_dir = sys.argv[2] + +url = 'http://100.25.13.77/api/v1/check' + +body = { + 'nim': nim, + 'is_openmp': True, + 'answers': [], +} + +_, _, openmp_files = next(walk(openmp_dir)) + +for file in openmp_files: + total_node = file.split('_')[0] + testcase_id = file.split('_')[1] + f = open(os.path.join(openmp_dir, file), 'r') + content = f.read() + f.close() + answer = { + 'total_node': int(total_node), + 'testcase_id': int(testcase_id), + 'answer': content, + } + body['answers'].append(answer) + +response = requests.post(url = url, json = body) + +print('OpenMP Status Code:', response.status_code) +if response.status_code != 200: + sys.exit(-1) +else: + data = response.json() + results = data['results'] + for result in results: + print('Total Node:', result['total_node']) + print('Correct:', result['is_accepted']) diff --git a/src/python_script/check_openmpi.py b/src/python_script/check_openmpi.py new file mode 100644 index 0000000..d484f39 --- /dev/null +++ b/src/python_script/check_openmpi.py @@ -0,0 +1,43 @@ +import os +import sys +import requests + +from os import walk + +nim = sys.argv[1] +openmpi_dir = sys.argv[2] + +url = 'http://100.25.13.77/api/v1/check' + +body = { + 'nim': nim, + 'is_openmp': False, + 'answers': [], +} + +_, _, openmpi_files = next(walk(openmpi_dir)) + +for file in openmpi_files: + total_node = file.split('_')[0] + testcase_id = file.split('_')[1] + f = open(os.path.join(openmpi_dir, file), 'r') + content = f.read() + f.close() + answer = { + 'total_node': int(total_node), + 'testcase_id': int(testcase_id), + 'answer': content, + } + body['answers'].append(answer) + +response = requests.post(url = url, json = body) + +print('OpenMPI Status Code:', response.status_code) +if response.status_code != 200: + sys.exit(-1) +else: + data = response.json() + results = data['results'] + for result in results: + print('Total Node:', result['total_node']) + print('Correct:', result['is_accepted']) diff --git a/src/python_script/get_testcase.py b/src/python_script/get_testcase.py new file mode 100644 index 0000000..ec6c763 --- /dev/null +++ b/src/python_script/get_testcase.py @@ -0,0 +1,24 @@ +import os +import sys +import requests + +nim = sys.argv[1] + +url = 'http://100.25.13.77/api/v1/testcase' + +params = { + 'nim': nim, +} + +response = requests.get(url = url, params = params) + +data = response.json() + +for tc in data['set']: + total_node = tc['total_node'] + tc_id = tc['testcase_id'] + content = tc['question'] + filename = str(total_node) + '_' + str(tc_id) + f = open(os.path.join('tmp', 'testcases', filename), 'w') + f.write(content) + f.close() diff --git a/src/python_script/submit_file.py b/src/python_script/submit_file.py new file mode 100644 index 0000000..e764211 --- /dev/null +++ b/src/python_script/submit_file.py @@ -0,0 +1,16 @@ +import os +import sys +import requests + +from os import walk + +nim = sys.argv[1] +filename = sys.argv[2] + +url = 'http://100.25.13.77/api/v1/submit?nim={nim}'.format(nim = nim) +files = { + 'file': open(filename, 'rb') +} + +response = requests.post(url = url, files = files) +print('Submission Status Code: {statusCode}'.format(statusCode = response.status_code)) -- GitLab