diff --git a/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py b/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py index 038f06402e091c1df52d713581de436ec859d093..9a114448956ff84e23a6ac882a2ebaa016a58dbe 100644 --- a/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py +++ b/services/webapp/code/rosetta/core_app/management/commands/core_app_populate.py @@ -233,9 +233,9 @@ class Command(BaseCommand): #===================== storages = Storage.objects.all() if storages: - print('Not creating demo storages as they already exist') + print('Not creating demo storage resources as they already exist') else: - print('Creating demo storages...') + print('Creating demo storage resources...') # Get demo computing resources demo_computing_resources = [] diff --git a/services/webapp/code/rosetta/core_app/templates/add_container.html b/services/webapp/code/rosetta/core_app/templates/add_software.html similarity index 100% rename from services/webapp/code/rosetta/core_app/templates/add_container.html rename to services/webapp/code/rosetta/core_app/templates/add_software.html diff --git a/services/webapp/code/rosetta/core_app/templates/components/computing.html b/services/webapp/code/rosetta/core_app/templates/components/computing.html index d405510cee833e88e59dcded61c81497e71467f4..dfbbb418239939e88ea9fffd955dc5d78952ace3 100644 --- a/services/webapp/code/rosetta/core_app/templates/components/computing.html +++ b/services/webapp/code/rosetta/core_app/templates/components/computing.html @@ -71,7 +71,7 @@ <!-- <div style="background:{{computing.color}}; height:24px"></div> --> <div style="padding:10px; margin-top:5px; text-align:center; border-bottom: #e0e0e0 solid 1px; "> - <a href="/computings/?uuid={{ computing.uuid }}&details=True">{{ computing.name }}</a> + <a href="/computing/?uuid={{ computing.uuid }}&details=True">{{ computing.name }}</a> </div> <div style="padding:10px;"> @@ -111,7 +111,7 @@ {% if 'singularity' in computing.container_runtimes %}<img src="/static/img/singularity-logo.svg" style="height:18px; width:18px; margin-bottom:2px" />{% endif %}--> {% if container %} <div style="margin:0px; margin-top:2px; text-align:center; padding:5px"> - <form action="/create_task/" method="POST"> + <form action="/new_task/" method="POST"> {% csrf_token %} <input type="hidden" name="step" value="{{ data.next_step }}" /> <input type="hidden" name="task_container_uuid" value="{{container.uuid}}"> diff --git a/services/webapp/code/rosetta/core_app/templates/components/container.html b/services/webapp/code/rosetta/core_app/templates/components/container.html index f5da7c50c8c9f9a8bddb3e9c552d225f52408836..d6981795f90ab97aa5196f0db2974db50e4fbb17 100644 --- a/services/webapp/code/rosetta/core_app/templates/components/container.html +++ b/services/webapp/code/rosetta/core_app/templates/components/container.html @@ -46,17 +46,17 @@ <tr><td colspan=2><hr style="margin:5px"></td></tr> <tr> - <td><b>Protocol</b></td> + <td><b>Interface protocol</b></td> <td>{{ container.interface_protocol }}</td> </tr> <tr> - <td><b>Port</b></td> + <td><b>Interface port</b></td> <td>{{ container.interface_port }}</td> </tr> <tr> - <td><b>Transport</b></td> + <td><b>Interface transport</b></td> <td>{{ container.interface_transport }}</td> </tr> @@ -65,9 +65,8 @@ <td>{{ container.arch }}</td> </tr> - <tr> - <td><b>OS</b></td> + <td><b>Operating System</b></td> <td>{{ container.os }}</td> </tr> @@ -110,7 +109,7 @@ <div style="padding:10px; margin-top:5px; text-align:center; border-bottom: {{container.color}} solid 10px; "> - <a href="/containers/?uuid={{ container.uuid }}">{{ container.name }}</a> + <a href="/software/?uuid={{ container.uuid }}">{{ container.name }}</a> </div> <div style="padding:10px; height: 110px; vertical-align: middle; "> @@ -133,7 +132,7 @@ <div style="margin-bottom:13px; margin-top: 3px; text-align:center"> {% if not disable_play_button %} - <a href="/create_task?task_container_uuid={{ container.uuid }}&step=two" class="btn btn-light" style="border: #c0c0c0 1px solid"> <i class="fa fa-play" style="color:green"></i></a> + <a href="/new_task?task_container_uuid={{ container.uuid }}&step=two" class="btn btn-light" style="border: #c0c0c0 1px solid"> <i class="fa fa-play" style="color:green"></i></a> {% endif %} </div> diff --git a/services/webapp/code/rosetta/core_app/templates/components/task.html b/services/webapp/code/rosetta/core_app/templates/components/task.html index 2c269fbd051526f7763288886f89210b1a60ad38..35ef478837dccaf21412545169f924017b490827 100644 --- a/services/webapp/code/rosetta/core_app/templates/components/task.html +++ b/services/webapp/code/rosetta/core_app/templates/components/task.html @@ -32,14 +32,14 @@ <b>Computing:</b> {{ task.computing.name }} <span style="font-size:14px; background-color:{{task.computing.color}}"> </span><br/> --> <b>Software:</b> - <a href="/containers/?uuid={{ task.container.uuid }}" style="color:{{task.container.color}}">{{ task.container.name }}</a> + <a href="/software/?uuid={{ task.container.uuid }}" style="color:{{task.container.color}}">{{ task.container.name }}</a> {% if task.container.type == 'docker' %}<img src="/static/img/docker-logo.svg" style="height:18px; width:18px; margin-bottom:4px" />{% endif %} {% if task.container.type == 'singularity' %}<img src="/static/img/singularity-logo.svg" style="height:18px; width:18px; margin-bottom:4px" />{% endif %} <br/> - <b>Computing:</b> <a href="/computings/?uuid={{ task.computing.uuid }}">{{ task.computing.name }}</a> - <!-- <a href="/computings/?uuid={{ task.computing.uuid }}" no_style="color:{{task.computing.color}}"><i class="fa fa-external-link" ></i></a><br/> --> + <b>Computing:</b> <a href="/computing/?uuid={{ task.computing.uuid }}">{{ task.computing.name }}</a> + <!-- <a href="/computing/?uuid={{ task.computing.uuid }}" no_style="color:{{task.computing.color}}"><i class="fa fa-external-link" ></i></a><br/> --> <div style="margin-top:2px"> {% if task.status == "running" %} diff --git a/services/webapp/code/rosetta/core_app/templates/computings.html b/services/webapp/code/rosetta/core_app/templates/computing.html similarity index 84% rename from services/webapp/code/rosetta/core_app/templates/computings.html rename to services/webapp/code/rosetta/core_app/templates/computing.html index ff3d50742fef517c831472c1f631afc48688607d..0edbc23bfd12baa277de39f02f6b1a6f35c771b9 100644 --- a/services/webapp/code/rosetta/core_app/templates/computings.html +++ b/services/webapp/code/rosetta/core_app/templates/computing.html @@ -10,9 +10,9 @@ <div class="span8 offset2"> {% if data.computing %} - <h1><a href="/computings">Computing Resources</a> <span style="font-size:18px"> / {{ data.computing.name }}</span></h1> + <h1><a href="/computing">Computing resources</a> <span style="font-size:18px"> / {{ data.computing.name }}</span></h1> {% else %} - <h1>Computing Resources</h1> + <h1>Computing resources</h1> {% endif %} <hr/> diff --git a/services/webapp/code/rosetta/core_app/templates/navigation.html b/services/webapp/code/rosetta/core_app/templates/navigation.html index 77ff62d697b2140b20180630f03e3ae7eff5dba0..3004bdb474a2a98cf1a3fd8de831748e77c1c66f 100644 --- a/services/webapp/code/rosetta/core_app/templates/navigation.html +++ b/services/webapp/code/rosetta/core_app/templates/navigation.html @@ -18,14 +18,14 @@ {% if user.is_authenticated %} <li> - <a href="/containers" onclick = $("#menu-close").click(); >Software</a> + <a href="/software" onclick = $("#menu-close").click(); >Software</a> </li> <li> - <a href="/computings" onclick = $("#menu-close").click(); >Computing</a> + <a href="/computing" onclick = $("#menu-close").click(); >Computing</a> </li> <li> - <a href="/files" onclick = $("#menu-close").click(); >Storages</a> + <a href="/storage" onclick = $("#menu-close").click(); >Storage</a> </li> <li> diff --git a/services/webapp/code/rosetta/core_app/templates/create_task.html b/services/webapp/code/rosetta/core_app/templates/new_task.html similarity index 99% rename from services/webapp/code/rosetta/core_app/templates/create_task.html rename to services/webapp/code/rosetta/core_app/templates/new_task.html index 8eedd2ca85aff248dbfa210bd3264af1b13044b3..fb6cd695805a86eab79aa7e606eb1523931cd5ef 100644 --- a/services/webapp/code/rosetta/core_app/templates/create_task.html +++ b/services/webapp/code/rosetta/core_app/templates/new_task.html @@ -73,7 +73,7 @@ <div style="width:620px; float:left; border: #e0e0e0 solid 0px; margin-top:10px; ; margin-bottom:15px"> - <form action="/create_task/" method="POST"> + <form action="/new_task/" method="POST"> {% csrf_token %} <input type="hidden" name="task_container_uuid" value="{{data.task_container.uuid}}"> <input type="hidden" name="step" value="{{ data.next_step }}" /> diff --git a/services/webapp/code/rosetta/core_app/templates/containers.html b/services/webapp/code/rosetta/core_app/templates/software.html similarity index 92% rename from services/webapp/code/rosetta/core_app/templates/containers.html rename to services/webapp/code/rosetta/core_app/templates/software.html index 5623e54bb5177aa6b9dbbae6009aa97fdb1d749e..86fef6be8ef08f46beaaf23638ef8df66a961e41 100644 --- a/services/webapp/code/rosetta/core_app/templates/containers.html +++ b/services/webapp/code/rosetta/core_app/templates/software.html @@ -10,7 +10,7 @@ <div class="span8 offset2"> {% if data.container %} - <h1><a href="/containers">Software Containers</a> <span style="font-size:18px"> / {{ data.container.name }}</span></h1> + <h1><a href="/software">Software containers</a> <span style="font-size:18px"> / {{ data.container.name }}</span></h1> {% else %} {% if data.mode == 'new_task' %} <h1>New Task</h1> @@ -18,7 +18,7 @@ <div style="padding-left:10px; padding-top:1px"><h4>Software container</h4></div> <br/> {% else %} - <h1>Software Containers</h1> + <h1>Software containers</h1> <hr/> {% endif %} @@ -74,7 +74,7 @@ {% if not data.container %} <div class="row" style="padding:10px; padding-left:15px"> - <a href="/add_container">Add new...</a> + <a href="/add_software">Add new...</a> </div> {% endif %} diff --git a/services/webapp/code/rosetta/core_app/templates/files.html b/services/webapp/code/rosetta/core_app/templates/storage.html similarity index 94% rename from services/webapp/code/rosetta/core_app/templates/files.html rename to services/webapp/code/rosetta/core_app/templates/storage.html index fee103b589546dd3866b3ba9b9a63138c4ede4dc..9b29c546610e94c4a0fcf915b9792a86cd33296b 100644 --- a/services/webapp/code/rosetta/core_app/templates/files.html +++ b/services/webapp/code/rosetta/core_app/templates/storage.html @@ -10,7 +10,7 @@ <div class="span8 offset2" style="height:100%;"> - <h1>Storages</h1> + <h1>Storage resources</h1> <hr/> diff --git a/services/webapp/code/rosetta/core_app/templates/tasks.html b/services/webapp/code/rosetta/core_app/templates/tasks.html index e76a1863a42b3443b6d26f29290f1875370a346a..fa9b5545a7f74a72ff94132a2a02d68d51f93dc8 100644 --- a/services/webapp/code/rosetta/core_app/templates/tasks.html +++ b/services/webapp/code/rosetta/core_app/templates/tasks.html @@ -28,7 +28,7 @@ {% if not data.task %} <div class="row" style="padding:10px; padding-left:15px"> - <a href="/create_task">New task...</a> + <a href="/new_task">New task...</a> </div> {% endif %} diff --git a/services/webapp/code/rosetta/core_app/views.py b/services/webapp/code/rosetta/core_app/views.py index 1f929d110dafc434941771e4cc1bcecc612cb32f..352648d1a958fb5a5583be00215bf6cbb20466f2 100644 --- a/services/webapp/code/rosetta/core_app/views.py +++ b/services/webapp/code/rosetta/core_app/views.py @@ -416,17 +416,15 @@ def tasks(request): #========================= -# Create Task view +# New task #========================= @private_view -def create_task(request): +def new_task(request): # Init data data={} data['user'] = request.user - data['profile'] = Profile.objects.get(user=request.user) - data['title'] = 'New Task' # Get task container helper function def get_task_container(request): @@ -472,7 +470,7 @@ def create_task(request): if not step: # Step one is assumed: chose software container - return HttpResponseRedirect('/containers/?mode=new_task') + return HttpResponseRedirect('/software/?mode=new_task') elif step == 'two': @@ -612,7 +610,7 @@ def create_task(request): data['step'] = 'created' - return render(request, 'create_task.html', {'data': data}) + return render(request, 'new_task.html', {'data': data}) #========================= @@ -659,11 +657,11 @@ def task_log(request): #========================= -# Containers +# Software containers #========================= @private_view -def containers(request): +def software(request): # Init data data={} @@ -709,11 +707,11 @@ def containers(request): container.delete() # Redirect - return HttpResponseRedirect('/containers') + return HttpResponseRedirect('/software') except Exception as e: - data['error'] = 'Error in getting the container or performing the required action' - logger.error('Error in getting the container with uuid="{}" or performing the required action: "{}"'.format(uuid, e)) + data['error'] = 'Error in getting the software container or performing the required action' + logger.error('Error in getting container with uuid="{}" or performing the required action: "{}"'.format(uuid, e)) return render(request, 'error.html', {'data': data}) @@ -735,22 +733,20 @@ def containers(request): data['containers'] = list(user_containers) + list(platform_containers) - return render(request, 'containers.html', {'data': data}) + return render(request, 'software.html', {'data': data}) #========================= -# Add Container view +# Add software container #========================= @private_view -def add_container(request): +def add_software(request): # Init data - data={} - data['user'] = request.user - data['profile'] = Profile.objects.get(user=request.user) - data['title'] = 'Add container' + data = {} + data['user'] = request.user # Container name if setting up a new container container_name = request.POST.get('container_name', None) @@ -827,23 +823,21 @@ def add_container(request): # Set added switch data['added'] = True - return render(request, 'add_container.html', {'data': data}) + return render(request, 'add_software.html', {'data': data}) #========================= -# Computings view +# Computing resources #========================= @private_view -def computings(request): +def computing(request): # Init data data={} - data['user'] = request.user - data['profile'] = Profile.objects.get(user=request.user) - data['title'] = 'Computing resources' - data['name'] = request.POST.get('name',None) + data['user'] = request.user + data['name'] = request.POST.get('name',None) # Get action/details if any uuid = request.GET.get('uuid', None) @@ -861,13 +855,26 @@ def computings(request): else: data['computings'] = list(Computing.objects.filter(group=None)) + list(Computing.objects.filter(group__user=request.user)) - return render(request, 'computings.html', {'data': data}) + return render(request, 'computing.html', {'data': data}) + + +#========================= +# Storage +#========================= +@private_view +def storage(request): + + # Set data & render + data = {} + data['user'] = request.user + + return render(request, 'storage.html', {'data': data}) #========================= -# Add profile conf view +# Add profile conf #========================= @private_view @@ -999,16 +1006,6 @@ def sharable_link_handler(request, short_uuid): return redirect(redirect_string) -#========================= -# File manager -#========================= -@public_view -def files_view(request): - - # Set data & render - data = {} - return render(request, 'files.html', {'data': data}) - diff --git a/services/webapp/code/rosetta/urls.py b/services/webapp/code/rosetta/urls.py index 4807d439fa0c151a45f637ca0860b79b741046c8..1015d6ffadc416c6afe9bfe98b30aa7b0fbf09f7 100644 --- a/services/webapp/code/rosetta/urls.py +++ b/services/webapp/code/rosetta/urls.py @@ -39,44 +39,50 @@ core_app_api_router.register(r'users', core_app_api.UserViewSet) urlpatterns = [ - # Webpages + # Pages url(r'^$', core_app_views.entrypoint), path('main/', core_app_views.main_view), path('login/', core_app_views.login_view), path('logout/', core_app_views.logout_view), url(r'^register/$', core_app_views.register_view), - url(r'^account/$', core_app_views.account), - url(r'^add_profile_conf/$', core_app_views.add_profile_conf), - + + # Software + url(r'^software/$', core_app_views.software), + url(r'^add_software/$', core_app_views.add_software), + + #Computing + url(r'^computing/$', core_app_views.computing), + + # Storage + url(r'^storage/$', core_app_views.storage), + + # Tasks url(r'^tasks/$', core_app_views.tasks), - url(r'^create_task/$', core_app_views.create_task), + url(r'^new_task/$', core_app_views.new_task), url(r'^task_log/$', core_app_views.task_log), url(r'^task_connect/$', core_app_views.task_connect), - url(r'^computings/$', core_app_views.computings), - url(r'^containers/$', core_app_views.containers), - url(r'^add_container/$', core_app_views.add_container), - url(r'^files/$', core_app_views.files_view), - + # Sharable and direct connection links for tasks url(r'^direct_connect/(?P<uuid>[0-9a-f-]+)/$', core_app_views.direct_connection_handler), url(r'^t/(?P<short_uuid>\w{0,36})/$', core_app_views.sharable_link_handler), - # Modules + # Account + url(r'^account/$', core_app_views.account), + url(r'^add_profile_conf/$', core_app_views.add_profile_conf), + + # OpenID Connect Auth + path('oidc/', include('mozilla_django_oidc.urls')), + + # Admin and API docs (Swagger) path('admin/', admin.site.urls), path('api/v1/doc/', get_swagger_view(title="Swagger Documentation")), - # ViewSet APIs + # APIs path('api/v1/base/login/', core_app_api.login_api.as_view(), name='login_api'), path('api/v1/base/logout/', core_app_api.logout_api.as_view(), name='logout_api'), - - # Custom APIs path('api/v1/base/agent/', core_app_api.agent_api.as_view(), name='agent_api'), path('api/v1/filemanager/', core_app_api.FileManagerAPI.as_view(), name='filemanager_api'), - - # Open ID Connect Auth - path('oidc/', include('mozilla_django_oidc.urls')), - ]