diff --git a/ping/views/__init__.py b/ping/views/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2b38d03c969c294b0845027299537c3b93e7abcf --- /dev/null +++ b/ping/views/__init__.py @@ -0,0 +1,2 @@ +from .experiment import * +from .network import * diff --git a/ping/views/experiment.py b/ping/views/experiment.py new file mode 100644 index 0000000000000000000000000000000000000000..4ba32dce132a779c726a09d3aa83e9ab98c4d721 --- /dev/null +++ b/ping/views/experiment.py @@ -0,0 +1,86 @@ +import os +import shutil +import zipfile + +from django.conf import settings + +from django.http import HttpResponse, HttpResponseRedirect +from django.template import loader +from django.urls import reverse + +from ..models import Experiment, ExperimentForm + + +def entry(request): + if request.method == 'POST': + form = ExperimentForm(request.POST, request.FILES) + + if form.is_valid(): + form.save() + return HttpResponseRedirect(reverse('ping:experiment')) + + else: + form = ExperimentForm() + template = loader.get_template('ping/entry.html') + context = {"form": form} + return HttpResponse(template.render(context, request)) + + +def empty_tmp(): + folder = str(settings.MEDIA_ROOT) + "/tmp" + for filename in os.listdir(folder): + file_path = os.path.join(folder, filename) + try: + if os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + except Exception as e: + print('Failed to delete %s. Reason: %s' % (file_path, e)) + + +def check(request, experiment_id): + # get the path + print(experiment_id) + exp = Experiment.objects.get(pk=experiment_id) + print(str(exp.media)) + print(str(settings.MEDIA_ROOT) + str(exp.media)) + # check if it's a zip -> wrong format : not zip + print() + + if not zipfile.is_zipfile(str(settings.MEDIA_ROOT) + str(exp.media)): + exp.status = "Wrong format : zip file expected" + exp.save() + return HttpResponseRedirect(reverse('ping:experiment')) + + with zipfile.ZipFile(str(settings.MEDIA_ROOT) + str(exp.media), 'r') as zip_ref: + zip_ref.extractall(str(settings.MEDIA_ROOT) + "/tmp") + + folder_path = str(settings.MEDIA_ROOT) + "/tmp/" + exp.name + + if not os.path.isdir(folder_path): + exp.status = "Wrong format : zip should contain a folder" + exp.save() + empty_tmp() + return HttpResponseRedirect(reverse('ping:experiment')) + + required_files = ["amas.py", "agent.py", "env.py", "scheduler.py"] + for required_file in required_files: + if not os.path.exists(folder_path + "/" + required_file): + exp.status = "Wrong format : " + required_file + " file is expected" + exp.save() + empty_tmp() + return HttpResponseRedirect(reverse('ping:experiment')) + + exp.status = "Checked" + exp.save() + empty_tmp() + return HttpResponseRedirect(reverse('ping:experiment')) + + +def experiment(request): + template = loader.get_template('ping/experiment.html') + context = { + "experiments": Experiment.objects.all(), + } + return HttpResponse(template.render(context, request)) diff --git a/ping/views.py b/ping/views/network.py similarity index 50% rename from ping/views.py rename to ping/views/network.py index 9cd930554ebde50d240e380e6008034f0c3391e4..84e9734db5886687e08b8539042aec4bad3b5f9c 100644 --- a/ping/views.py +++ b/ping/views/network.py @@ -1,11 +1,6 @@ -import os import platform -import shutil import subprocess import re -import zipfile - -from django.conf import settings from django.http import HttpResponse, HttpResponseRedirect from django.template import loader @@ -13,8 +8,7 @@ from django.urls import reverse from iotAmak.tool.remote_client import RemoteClient from iotAmak.tool.ssh_client import SSHClient, Cmd -from .models import Client, Agent, Experiment, ExperimentForm - +from ..models import Client, Agent def get_remote_client(): res = [] @@ -106,77 +100,4 @@ def pressed(request): c.status = "Offline" c.save() - return HttpResponseRedirect(reverse('ping:index')) - - -def entry(request): - if request.method == 'POST': - form = ExperimentForm(request.POST, request.FILES) - - if form.is_valid(): - form.save() - return HttpResponseRedirect(reverse('ping:experiment')) - - else: - form = ExperimentForm() - template = loader.get_template('ping/entry.html') - context = {"form": form} - return HttpResponse(template.render(context, request)) - -def empty_tmp(): - folder = str(settings.MEDIA_ROOT) + "/tmp" - for filename in os.listdir(folder): - file_path = os.path.join(folder, filename) - try: - if os.path.isfile(file_path) or os.path.islink(file_path): - os.unlink(file_path) - elif os.path.isdir(file_path): - shutil.rmtree(file_path) - except Exception as e: - print('Failed to delete %s. Reason: %s' % (file_path, e)) - -def check(request, experiment_id): - # get the path - print(experiment_id) - exp = Experiment.objects.get(pk=experiment_id) - print(str(exp.media)) - print(str(settings.MEDIA_ROOT) + str(exp.media)) - # check if it's a zip -> wrong format : not zip - print() - - if not zipfile.is_zipfile(str(settings.MEDIA_ROOT) + str(exp.media)): - exp.status = "Wrong format : zip file expected" - exp.save() - return HttpResponseRedirect(reverse('ping:experiment')) - - with zipfile.ZipFile(str(settings.MEDIA_ROOT) + str(exp.media), 'r') as zip_ref: - zip_ref.extractall(str(settings.MEDIA_ROOT) + "/tmp") - - folder_path = str(settings.MEDIA_ROOT) + "/tmp/" + exp.name - - if not os.path.isdir(folder_path): - exp.status = "Wrong format : zip should contain a folder" - exp.save() - empty_tmp() - return HttpResponseRedirect(reverse('ping:experiment')) - - required_files = ["amas.py", "agent.py", "env.py", "scheduler.py"] - for required_file in required_files: - if not os.path.exists(folder_path + "/" + required_file): - exp.status = "Wrong format : " + required_file + " file is expected" - exp.save() - empty_tmp() - return HttpResponseRedirect(reverse('ping:experiment')) - - exp.status = "Checked" - exp.save() - empty_tmp() - return HttpResponseRedirect(reverse('ping:experiment')) - - -def experiment(request): - template = loader.get_template('ping/experiment.html') - context = { - "experiments": Experiment.objects.all(), - } - return HttpResponse(template.render(context, request)) + return HttpResponseRedirect(reverse('ping:index')) \ No newline at end of file