diff --git a/src/grade-openmp.sh b/src/grade-openmp.sh new file mode 100644 index 0000000000000000000000000000000000000000..9fb5275ba6098fbaea39261295cbc54c5e5229b6 --- /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 0000000000000000000000000000000000000000..010c5c4d3424e620ba40c0805d4da15bf3733270 --- /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 0000000000000000000000000000000000000000..7021a046a7a5b88b5a61c2ae05ea4e58d9951396 --- /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 0000000000000000000000000000000000000000..d484f396f8d12ff7853b352f8d092b1e5fa64f1d --- /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 0000000000000000000000000000000000000000..ec6c763b9e1daf418a1b765d46857dfdc4c9b65b --- /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 0000000000000000000000000000000000000000..e7642114aec2429e3fa975c6d1b1873fa83f709f --- /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))