예제 #1
0
def student_update(request, sid, status_value):
    s_id = int(sid)
    usera = UserAccessProfile(request)
    user_type = usera.user_type
    if user_type != 2:
        messages.error(request, 'Error: You have not permission to access this page.')
        return HttpResponseRedirect("/")
    std_obj = MyUser.objects.get(id=s_id)
    std_obj.status = status_value
    std_obj.save()
    messages.success(request, 'Success: Update User.')
    return HttpResponseRedirect("/lab/students/")
예제 #2
0
def student_course_cancel(request, cid):
    course_id = int(cid)
    usera = UserAccessProfile(request)
    #c_user = get_user_by_email(the_user(request))
    user_type = usera.user_type  # get_user_type(c_user)
    if user_type != 3:
        # messages.error(page.request, 'Error: You have not permission to access this page.')
        return HttpResponseRedirect("/")

    course = StudentCourses.objects.get(id=course_id)
    remove_course_by_emails(usera.username, course.course_ref.id)
    course.delete()
    messages.success(request, 'Success: Unroll from Course.')
    return HttpResponseRedirect("/lab/my_courses/")
예제 #3
0
    def get_context_data(self, **kwargs):
        page = Page(self.request)

        #node_list = Node.objects.all()

        context = super(TimelineView, self).get_context_data(**kwargs)
        #context['node_list'] = node_list
        context['last_update'] = datetime.now()
        context['title'] = 'TIMELINE VIEW'
        context['username'] = UserAccessProfile(self.request).username
        context['topmenu_items'] = topmenu_items('Timeline View', page.request)
        prelude_env = page.prelude_env()
        context.update(prelude_env)
        return context
예제 #4
0
def omf_exe(request):
    if not slice_on_time(request, "omf"):
        return HttpResponse('eof', content_type="text/plain")
    else:
        script = request.POST.get('script_text', '')
        if not script:
            return HttpResponse(request,
                                'Script Empty',
                                content_type="text/plain")

        username = UserAccessProfile(
            request).username  # get_username_by_email(the_user(request))
        t = exe_script("%s" % script, username)
        if t != 0:
            return HttpResponse(t, content_type="application/json")
        return HttpResponse({"error": "Error, Invalid Script"},
                            content_type="text/plain")
예제 #5
0
    def get_context_data(self, **kwargs):
        page = Page(self.request)
        page.add_js_files([
            "js/jquery.validate.js", "js/my_account.register.js",
            "js/my_account.edit_profile.js"
        ])
        page.add_css_files(["css/plugin.css"])
        usera = UserAccessProfile(self.request)
        c_user = usera.user_obj  # get_user_by_email(the_user(self.request))
        get_count_active_slice(c_user=c_user, username=usera.session_username)
        pending_list_1 = Reservation.objects.filter(
            user_ref=c_user,
            username=usera.session_username,
            status=ReservationStatus.get_pending())
        active_list_1 = Reservation.objects.filter(
            user_ref=c_user,
            username=usera.session_username,
            status=ReservationStatus.get_active())
        pending_list_2 = SimReservation.objects.filter(
            user_ref=c_user,
            username=usera.session_username,
            status=ReservationStatus.get_pending())
        active_list_2 = SimReservation.objects.filter(
            user_ref=c_user,
            username=usera.session_username,
            status=ReservationStatus.get_active())

        context = super(SliceCurrentView, self).get_context_data(**kwargs)
        context['current_list_1'] = pending_list_1
        context['active_list_1'] = active_list_1
        context['current_list_2'] = pending_list_2
        context['active_list_2'] = active_list_2

        context['time_now'] = timezone.now()
        # XXX This is repeated in all pages
        # more general variables expected in the template
        context['title'] = 'Reservation Panel'
        # the menu items on the top
        # context['topmenu_items'] = topmenu_items('Reservation Status', page.request)  # @qursaan change from _live
        # so we can sho who is logged
        context['username'] = usera.username  # the_user(self.request)
        # context ['firstname'] = config['firstname']
        prelude_env = page.prelude_env()
        context.update(prelude_env)
        return context
예제 #6
0
def access_token_gen(request):
    stype = request.POST.get('stype', None)
    if stype is None:
        return HttpResponse("error: Please go back and try again",
                            content_type="text/plain")

    if not slice_on_time(request, stype):
        return HttpResponse('eof', content_type="text/plain")

    else:
        r = -1
        usera = UserAccessProfile(request)
        slice_id = request.session.get('slice_id', None)
        slice_id = int(slice_id)
        current_slice = None
        if stype == "omf":
            current_slice = Reservation.objects.get(id=slice_id)
        elif stype == "sim":
            current_slice = SimReservation.objects.get(id=slice_id)

        username = usera.user_obj.first_name + randomStringDigits(6)
        password = randomStringDigits(10)

        recipients = []
        recipients.append(usera.user_obj.email)
        ctx = {
            'slice_name': current_slice.slice_name,
            'slice_duration': current_slice.slice_duration,
            'password': password,
            'access_token': username,
        }
        # TODO: qursaan@ call backend here
        r = 1
        # if cc_myself:
        recipients.append(SUPPORT_EMAIL)
        msg = render_to_string('access-token-email.txt', ctx)
        # print "email, msg, email, recipients", email , msg, email, recipients
        send_mail("CRCLAB user %s requested Access Password" % usera.username,
                  msg, DEFAULT_FROM_EMAIL, recipients)

        if r == 1:
            return HttpResponse("Success", content_type="text/plain")
    return HttpResponse("Fail, Try again!", content_type="text/plain")
예제 #7
0
    def get_or_post(self, request, method):
        usera = UserAccessProfile(request)
        self.user_email = usera.username  # the_user(request)
        page = Page(request)

        self.errors = []
        # user = get_user_by_email(the_user(self.request))
        user_type = usera.user_type  # get_user_type(user)
        if user_type != 0:
            messages.error(
                page.request,
                'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        fedlist = Site.objects.all()

        if method == 'POST':
            self.errors = []
            '''site_name = request.POST.get('site_name', '')
            site_url = request.POST.get('site_url', '')
            site_ip = request.POST.get('site_ip', '')
            site_location = request.POST.get('site_location', '')
            site_contact = request.POST.get('site_contact', '')

            if not self.errors and site:
                site.name = site_name
                site.url = site_url
                site.ip = site_ip
                site.location = site_location
                site.contact_email = site_contact
                site.save()
                messages.success(request, 'Success: Update site information')'''

        template_name = "fed-list.html"
        template_env = {
            'topmenu_items': topmenu_items('Site Information', page.request),
            'username': usera.username,  # the_user(self.request),
            'fedlist': fedlist,
            'title': 'Site Information',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #8
0
    def get_or_post(self, request, method):
        page = Page(self.request)
        usera = UserAccessProfile(request)
        c_user = usera.user_obj  # get_user_by_email(the_user(self.request))
        user_type = usera.user_type  # get_user_type(c_user)
        if user_type != 3:
            # messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        template_name = "std-courses-view.html"
        add_all_courses_by_email(usera.username)
        courses_list = StudentCourses.objects.filter(students_ref=c_user)
        template_env = {
            'topmenu_items': topmenu_items('My Courses', page.request),
            'username': usera.username,  #the_user(self.request),
            'courses_list': courses_list,
            'title': 'My Courses',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #9
0
    def get_context_data(self, **kwargs):
        page = Page(self.request)
        n_local_user = MyUser.objects.filter().count()
        n_remote_user = '******'  # 'Users.objects.filter().count()
        n_remote_site = Site.objects.filter().count() - 1
        n_local_resources = PhysicalNode.objects.filter().count()
        n_remote_resources = '#'

        context = super(FedView, self).get_context_data(**kwargs)
        context['fed_service'] = get_fed_status()
        context['n_local_user'] = n_local_user
        context['n_remote_user'] = n_remote_user
        context['n_remote_site'] = n_remote_site
        context['n_local_res'] = n_local_resources
        context['n_remote_res'] = n_remote_resources
        context['username'] = UserAccessProfile(self.request).username  # the_user(self.request)
        context['topmenu_items'] = topmenu_items('Testbed View', page.request)
        prelude_env = page.prelude_env()
        context.update(prelude_env)
        return context
예제 #10
0
    def get_or_post(self, request, method):
        page = Page(self.request)
        usera = UserAccessProfile(request)
        c_user = usera.user_obj
        user_type = usera.user_type
        if user_type != 2:
            messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        template_name = "ins_students_manage.html"
        student_list = MyUser.objects.filter(supervisor_id=c_user.id, user_type=3)
        template_env = {
            'topmenu_items': topmenu_items('Students List', page.request),
            # 'errors': errors,
            'username': usera.username, #the_user(self.request),
            'student_list': student_list,
            'time_now': timezone.now,
            'title': 'Current Students',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #11
0
    def get_or_post(self, request, method):
        page = Page(self.request)
        usera = UserAccessProfile(request)
        c_user = usera.user_obj #get_user_by_email(the_user(self.request))
        user_type = usera.user_type #get_user_type(c_user)
        if user_type != 2:
            messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        template_name = "ins-courses-view.html"
        courses_list = Course.objects.filter(instructor_ref=c_user)
        template_env = {
            'topmenu_items': topmenu_items('Courses List', page.request),
            # 'errors': errors,
            'username': usera.username, #the_user(self.request),
            'courses_list': courses_list,
            'time_now': timezone.now,
            'title': 'Current Active Courses',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #12
0
    def get_or_post(self, request, method):
        page = Page(self.request)
        usera = UserAccessProfile(request)
        c_user = usera.user_obj  #get_user_by_email(the_user(self.request))
        user_type = usera.user_type  #get_user_type(c_user)
        if user_type != 3:
            # messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        template_name = "std-experiments-view.html"
        s_courses_list = StudentCourses.objects.filter(students_ref=c_user)

        c_ids = []

        for c in s_courses_list:
            c_ids.append(c.course_ref.id)

        courses_list = Course.objects.filter(id__in=c_ids)
        exp_list = Experiments.objects.filter(course_ref__in=courses_list,
                                              status=0)

        res_exp_list = Experiments.objects.filter(course_ref__in=courses_list)
        std_exp_list = StudentsExperiment.objects.filter(
            students_ref=c_user, experiment_ref__in=res_exp_list)

        res_std_list_id = []
        for s in std_exp_list:
            res_std_list_id.append(s.experiment_ref.id)

        exp_list = exp_list.exclude(id__in=res_std_list_id)

        template_env = {
            'topmenu_items': topmenu_items('My Courses', page.request),
            'username': usera.username,
            'exp_list': exp_list,
            'std_exp_list': std_exp_list,
            'title': 'My Courses',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #13
0
    def get_or_post(self, request, method):
        page = Page(self.request)
        usera = UserAccessProfile(self.request)
        c_user = usera.user_obj # get_user_by_email(the_user(self.request))
        user_type = usera.user_type # get_user_type(c_user)
        if user_type > 3:
            messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")
        lib_list = None
        lib_name = request.POST.get('lib_name', '')
        lib_auth = request.POST.get('lib_auth', '')
        lib_type = request.POST.get('lib_type', '')
        lib_tag = request.POST.get('lib_tag', '')
        lib_desc = request.POST.get('lib_desc', '')

        if method == 'POST':
            lib_list = CustomLibrary.objects.filter(name__icontains=lib_name, author__icontains=lib_auth,
                                                    type__icontains=lib_type, tag__icontains=lib_tag,
                                                    description__icontains=lib_desc)

        else:
            lib_list = CustomLibrary.objects.all()

        template_name = "library-view.html"
        template_env = {
            'topmenu_items': topmenu_items('Library List', page.request),
            # 'errors': errors,
            'lib_list': lib_list,
            'lib_name': lib_name,
            'lib_auth': lib_auth,
            'lib_type': lib_type,
            'lib_tag': lib_tag,
            'lib_desc': lib_desc,
            'username': usera.username, # the_user(self.request),
            'title': 'Custom Libraries',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #14
0
    def get_context_data(self, **kwargs):
        page = Page(self.request)

        the_date = datetime.now(tz=timezone.get_current_timezone())  # datetime.today()
        year_l, year_v = get_total_last_year(the_date, 't')
        year_vl, year_vv = get_total_last_year(the_date, 'v')
        year_sl, year_sv = get_total_last_year(the_date, 's')
        # user_list, value_list = get_month_usage_by_users(None)
        res_l , res_v, res_c = get_total_resource_usage()

        context = super(StatsAdminView, self).get_context_data(**kwargs)
        context['year_l'] = year_l
        context['year_vv'] = year_vv
        context['year_sv'] = year_sv
        context['year_v'] = year_v
        context['res_l'] = res_l
        context['res_v'] = res_v
        context['res_c'] = res_c
        context['username'] = UserAccessProfile(self.request).username  # the_user(self.request)
        context['topmenu_items'] = topmenu_items('Testbed View', page.request)
        prelude_env = page.prelude_env()
        context.update(prelude_env)
        return context
예제 #15
0
    def get(self, request):
        page = Page(self.request)
        usera = UserAccessProfile(request)
        c_user = usera.user_obj  #get_user_by_email(the_user(self.request))
        user_type = usera.user_type  #get_user_type(c_user)
        if user_type != 2:
            messages.error(
                page.request,
                'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        template_name = "ins-validate-view.html"

        std_requests = get_std_requests(c_user.id)

        template_env = {
            'topmenu_items': topmenu_items('Validation', page.request),
            # 'errors': errors,
            'username': usera.username,
            'std_pending_list': std_requests,
            'title': 'Manage Student',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #16
0
    def get_or_post(self, request, fid, method):
        usera = UserAccessProfile(request)
        self.user_email = usera.username  # the_user(request)
        page = Page(request)

        self.errors = []
        user_type = usera.user_type  # get_user_type(user)
        if user_type != 0:
            messages.error(
                page.request,
                'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        site = None
        if fid:
            try:
                site = Site.objects.get(id=fid)
            except Site.DoesNotExist:
                site = None

        if site:
            site_name = site.name
            site_url = site.url
            site_ip = site.ip
            site_location = site.location
            site_contact = site.contact_email
            site_pkey = site.public_key
        else:
            site_name = ''
            site_url = ''
            site_ip = ''
            site_location = ''
            site_contact = ''
            site_pkey = ''

        if method == 'POST':
            self.errors = []
            site_name = request.POST.get('site_name', '')
            site_url = request.POST.get('site_url', '')
            site_ip = request.POST.get('site_ip', '')
            site_location = request.POST.get('site_location', '')
            site_contact = request.POST.get('site_contact', '')
            site_pkey = request.POST.get('site_pkey', '')

            # UPDATE
            if not self.errors and site:
                site.name = site_name
                site.url = site_url
                site.ip = site_ip
                site.location = site_location
                site.contact_email = site_contact
                site.public_key = site_pkey
                site.save()
                messages.success(request, 'Success: Update site information')
                return HttpResponseRedirect('/federation/list')
            else:  # create new site
                site = Site(
                    name=site_name,
                    url=site_url,
                    ip=site_ip,
                    location=site_location,
                    contact_email=site_contact,
                    public_key=site_pkey,
                )
                site.save()
                messages.success(request, 'Success: Add new site information')
                return HttpResponseRedirect('/federation/list')

        template_name = "fed-site.html"
        template_env = {
            'topmenu_items': topmenu_items('Site Information', page.request),
            'username': usera.username,  # the_user(self.request),
            'site_name': site_name,
            'site_url': site_url,
            'site_ip': site_ip,
            'site_location': site_location,
            'site_contact': site_contact,
            'site_pkey': site_pkey,
            'site_info': 0,
            'title': 'Site Information',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #17
0
    def get_or_post(self, request, method):
        usera = UserAccessProfile(request)

        self.user_email = usera.username  # the_user(request)
        page = Page(request)

        user = usera.user_obj  # get_user_by_email(the_user(request))
        user_type = usera.user_type  # get_user_type(user)
        if user_type > 3:
            messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        if method == 'POST':
            self.errors = []

            lib_name = request.POST.get('lib_name', None)
            lib_auth = request.POST.get('lib_auth', None)
            lib_type = request.POST.get('lib_type', None)
            lib_type_other = request.POST.get('lib_type_other', None)
            lib_tag = request.POST.get('lib_tag', None)
            lib_link = request.POST.get('lib_link', None)
            lib_desc = request.POST.get('lib_desc', None)
            lib_file = None
            request_date = timezone.now()
            if len(request.FILES) > 0:
                lib_file = request.FILES['lib_file']

            if lib_name is None or lib_name == '':
                self.errors.append('Library Name is mandatory')
            if lib_file is None or lib_file == '':
                self.errors.append('Code file is mandatory')
            if lib_type is None or lib_type == '':
                self.errors.append('Code type is mandatory')
            if lib_type == 'Other' and (lib_type_other is None or lib_type_other == ''):
                self.errors.append('Code type is mandatory')

            if not self.errors:
                if lib_type == 'Other':
                    lib_type = ''.join(e for e in lib_type_other if e.isalnum())
                c = CustomLibrary(
                    user_ref=user,
                    name=lib_name,
                    author=lib_auth,
                    type=lib_type,
                    tag=lib_tag,
                    external_link=lib_link,
                    description=lib_desc,
                )
                sv_library = c.save()

                # if sv_library:
                # Save file and update
                if lib_file:
                    fs = FileSystemStorage(location='media/' + lib_type + '/')
                    new_filename = user.username + "_" + request_date.strftime('%d_%m_%Y') + "_" + lib_file.name
                    # directory = os.path.join(fs.location, lib_type)
                    if not os.path.exists(fs.location):
                        os.makedirs(fs.location)
                    filename = fs.save(new_filename, lib_file)
                    uploaded_file_url = fs.url(lib_type + '/' + filename)
                    c.file = uploaded_file_url
                    sv_library = c.save()
                    # if not sv_library:
                    # c.delete()
                    # messages.error(page.request, 'Error: Cannot Upload file')

                    messages.success(page.request, 'Success: Add new course')
                    return HttpResponseRedirect("/lab/library")

                c.delete()
                messages.error(page.request, 'Error: Saving Library')

        template_env = {
            'topmenu_items': topmenu_items('Add new library', page.request),
            'username': usera.username,  # the_user(request),
            'errors': self.errors,
            'title': "Add New Library"
        }
        template_env.update(page.prelude_env())
        return render(request, 'library-add.html', template_env)
예제 #18
0
    def get_context_data(self, **kwargs):

        page = Page(self.request)
        page.add_js_files([
            "js/jquery.validate.js", "js/my_account.register.js",
            "js/my_account.edit_profile.js"
        ])
        page.add_css_files(["css/account_view.css", "css/plugin.css"])

        # @qursaan
        # user_details = MyUser.objects.filter(email=the_user(self.request))
        # user_query  = Query().get('local:user').select('config','email','status')
        # user_details = execute_query(self.request, user_query)
        usera = UserAccessProfile(self.request)
        user_detail = usera.user_obj  # get_user_by_email(the_user(self.request))

        # not always found in user_details...
        config = {}
        user_status = 'N/A'
        user_fname = '?'
        user_lname = '?'
        user_authu = 'Unknown Authority'

        # for user_detail in user_details:
        if user_detail:
            # different significations of user_status
            if user_detail.status == 0:
                user_status = 'Disabled'
            elif user_detail.status == 1:
                user_status = 'Validation Pending'
            elif user_detail.status == 2:
                user_status = 'Enabled'
            else:
                user_status = 'N/A'

            user_fname = user_detail.first_name
            user_lname = user_detail.last_name
            user_authu = user_detail.authority_hrn

        context = super(AccountView, self).get_context_data(**kwargs)
        # context['principal_acc'] = principal_acc_list
        # context['ref_acc'] = ref_acc_list
        # context['platform_list'] = platform_list
        # context['my_users'] = my_users
        # context['my_slices'] = my_slices
        # context['my_auths'] = my_auths
        context['user_status'] = user_status
        context['person'] = self.request.user
        context['firstname'] = user_fname  # config.get('firstname',"?")
        context['lastname'] = user_lname  # config.get('lastname',"?")
        context['fullname'] = context['firstname'] + ' ' + context['lastname']
        context[
            'authority'] = user_authu  # config.get('authority',"Unknown Authority")
        # context['user_private_key'] = account_priv_key
        # XXX This is repeated in all pages
        # more general variables expected in the template
        context['title'] = 'Account Information'
        # the menu items on the top
        context['topmenu_items'] = topmenu_items(
            'My Account', page.request)  # @qursaan change from _live
        # so we can sho who is logged
        context['username'] = usera.username
        prelude_env = page.prelude_env()
        context.update(prelude_env)
        return context
예제 #19
0
def action_load_save_image(request, action):
    stype = request.POST.get('stype', None)
    if stype is None:
        return HttpResponse("error: Please go back and try again",
                            content_type="text/plain")

    if not slice_on_time(request, stype):
        return HttpResponse('eof', content_type="text/plain")
    # for any action  ############# TODO: @qursaan

    # node_name = None
    if action == 'load':
        node_name = request.POST.getlist('the_node[]', None)
    else:  # Save
        node_name = request.POST.get('the_node', None)

    if not node_name:
        return HttpResponse("error: Please select at least one node",
                            content_type="text/plain")

    slice_id = request.session.get('slice_id', None)
    if slice_id is None:
        return HttpResponse("error: Please go back and try again")

    slice_id = int(slice_id)
    task_id = None
    task_id_list = None
    if action == 'load':
        task_id_list = []
        for n in node_name:
            task_id = str(get_task_id(slice_id, n, stype))
            task_id_list.append(task_id)
    else:  # Save
        task_id = get_task_id(slice_id, node_name, stype)

    if task_id:
        if not check_next_task_duration(task_id, stype):
            return HttpResponse('warning: wait 5 min before next try',
                                content_type="text/plain")

        # end for any action ###########
        r = 0
        # if stype == 'omf':
        # for load action ###########
        if action == 'load':
            os_id = request.POST.get('the_os', '')
            os_type = request.POST.get('the_type', '')
            os_location = ''
            os_obj = None

            if os_type == 'base_image':
                if stype == 'omf':
                    os_obj = TestbedImage.objects.get(id=os_id)
                elif stype == 'sim':
                    os_obj = SimulationImage.objects.get(id=os_id)

            elif os_type == 'user_image':
                os_obj = UserImage.objects.get(id=os_id)

            if os_obj:
                os_location = os_obj.location

            r = load_images(task_id_list, os_location, ".", node_name)
            if r == 1:
                for t in task_id_list:
                    update_task_testbed(t, action, stype)
        # for save action ###########
        elif action == 'save':
            user_image_name = request.POST.get('the_image',
                                               'untitled').replace(" ", "_")
            if user_image_name == '':
                user_image_name = "untitled"

            usera = UserAccessProfile(request)
            #user_name = the_user(request)
            user = usera.user_obj  # get_user_by_email(user_name)
            r = save_images(task_id, user_image_name, ".", node_name)
            if r == 1:
                image_name = user_image_name + "_" + node_name
                update_user_images(image_name, user, usera.session_username)
                update_task_testbed(task_id, action, stype)

        # for any action  ##########
        if r == 1:
            return HttpResponse('success: start ' + action + ' ...',
                                content_type="text/plain")
    return HttpResponse('error: Unable to ' + action + ' image',
                        content_type="text/plain")
예제 #20
0
    def get(self, request, slicename=tmp_default_slice):
        page = Page(request)
        page.add_css_files('css/slice-view.css')
        page.add_js_files(["js/common.functions.js"])
        page.add_js_chunks(
            '$(function() { messages.debug("sliceview: jQuery version " + $.fn.jquery); });'
        )
        page.add_js_chunks(
            '$(function() { messages.debug("sliceview: users turned %s"); });'
            % ("on" if do_query_users else "off"))
        page.add_js_chunks(
            '$(function() { messages.debug("sliceview: leases turned %s"); });'
            % ("on" if do_query_leases else "off"))
        page.add_js_chunks(
            '$(function() { messages.debug("manifold URL %s"); });' %
            (ConfigEngine().manifold_url()))

        #        metadata = page.get_metadata()
        #        resource_md = metadata.details_by_object('resource')
        #        resource_fields = [column['name'] for column in resource_md['column']]

        #        user_md = metadata.details_by_object('user')
        #        user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]

        # TODO The query to run is embedded in the URL
        main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
        main_query.select(
            'slice_hrn',
            # 'resource.hrn', 'resource.urn',
            'resource.hostname',
            'resource.type',
            'resource.network_hrn',
            'lease.urn',
            'user.user_hrn',
            # 'application.measurement_point.counter'
        )
        # for internal use in the querytable plugin;
        # needs to be a unique column present for each returned record
        main_query_init_key = 'hostname'

        # variables that will get passed to the view-unfold1.html template
        template_env = {}

        # define 'unfold_main' to the template engine - the main contents
        #        template_env [ 'unfold_main' ] = main_stack.render(request)

        # more general variables expected in the template
        template_env['title'] = '%(slicename)s' % locals()
        # the menu items on the top
        template_env['topmenu_items'] = topmenu_items('Slice', page.request)
        # so we can sho who is logged
        template_env['username'] = UserAccessProfile(request).username

        # don't forget to run the requests
        #        page.expose_js_metadata()
        # the prelude object in page contains a summary of the requirements() for all plugins
        # define {js,css}_{files,chunks}
        template_env.update(page.prelude_env())

        return render_to_response('view-unfold1.html',
                                  template_env,
                                  context_instance=RequestContext(request))
예제 #21
0
    def get_or_post(self, request, method, exp_id):
        usera = UserAccessProfile(request)
        self.user_email = usera.username
        page = Page(request)

        self.errors = []
        # print "EXP:", exp_id

        user = usera.user_obj  # get_user_by_email(the_user(self.request))
        user_type = usera.user_type  # get_user_type(user)
        if user_type != 3 or exp_id is None:
            messages.error(
                page.request,
                'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        exp = Experiments.objects.get(id=exp_id)
        max_duration = exp.max_duration
        start_time = None
        end_time = None

        if exp.server_type == "omf":
            start_time = exp.reservation_ref.start_time
            end_time = exp.reservation_ref.end_time
        elif exp.server_type == "sim":
            start_time = exp.sim_reservation_ref.start_time
            end_time = exp.sim_reservation_ref.end_time

        s = None

        if method == 'POST':
            self.errors = []

            request_date = timezone.now(
            )  # request.POST.get('request_date', '')
            authority_hrn = get_authority_by_user(usera.username)

            purpose = request.POST.get('ex_detail', '')
            # date
            start_date = request.POST.get('req_time_date1', '')
            start_date = parser.parse(start_date)
            end_date = request.POST.get('req_time_date2', '')
            end_date = parser.parse(end_date)
            # time
            start_time = request.POST.get('req_time_time1', '')
            end_time = request.POST.get('req_time_time2', '')

            h1 = int(parser.parse(start_time).strftime('%H'))
            h2 = int(parser.parse(end_time).strftime('%H'))
            m1 = int(parser.parse(start_time).strftime('%M'))
            m2 = int(parser.parse(end_time).strftime('%M'))

            start_datetime = start_date + timedelta(hours=h1, minutes=m1)
            end_datetime = end_date + timedelta(hours=h2, minutes=m2)

            diff = end_datetime - start_datetime
            dur = diff.seconds / 60 / 60
            slice_duration = request.POST.get('max_duration', dur)

            if request_date is None or request_date == '':
                self.errors.append(
                    'Please, determine the request date and time')
            if purpose is None or purpose == '':
                self.errors.append('Purpose is mandatory')

            if not self.errors:
                exp = Experiments.objects.get(id=exp_id)
                if exp.server_type == "omf":
                    s = Reservation(
                        user_ref=user,
                        username=usera.session_username,
                        f_start_time=start_datetime,
                        f_end_time=end_datetime,
                        slice_name=exp.reservation_ref.slice_name,
                        slice_duration=slice_duration,  # approve_date
                        request_date=request_date,
                        authority_hrn=authority_hrn,
                        request_type=exp.reservation_ref.request_type,
                        base_image_ref=exp.reservation_ref.
                        base_image_ref,  # ref
                        purpose=purpose,
                        status=ReservationStatus.get_pending(),
                    )
                    s.save()
                    resources = ReservationDetail.objects.filter(
                        reservation_ref=exp.reservation_ref)
                    for i in resources:
                        p = ReservationDetail(
                            reservation_ref=s,
                            node_ref=i.node_ref,
                            image_ref=i.image_ref,
                        )
                        p.save()
                    freq_group = ReservationFrequency.objects.filter(
                        reservation_ref=exp.reservation_ref)
                    for i in freq_group:
                        p = ReservationFrequency(reservation_ref=s,
                                                 frequency_ref=i.frequency_ref)
                        p.save()

                    # TODO: @qursaan
                    if not schedule_auto_online(
                            s.id, "omf", use_bulk=True, reserve_type="R"):
                        self.errors.append('Sorry, Time slot is not free')
                        s.delete()

                elif exp.server_type == "sim":
                    s = SimReservation(
                        user_ref=user,
                        username=usera.session_username,
                        slice_name=exp.sim_reservation_ref.slice_name,
                        slice_duration=slice_duration,  # approve_date
                        request_date=request_date,
                        f_start_time=start_datetime,
                        f_end_time=end_datetime,
                        authority_hrn=authority_hrn,
                        request_type=exp.sim_reservation_ref.request_type,
                        image_ref=exp.sim_reservation_ref.image_ref,  # ref
                        node_ref=exp.sim_reservation_ref.node_ref,  # ref
                        purpose=purpose,
                        status=ReservationStatus.get_pending(),
                        n_processor=exp.sim_reservation_ref.sim_no_proc,
                        n_ram=exp.sim_reservation_ref.sim_ram_size,
                    )
                    s.save()
                    # TODO: @qursaan
                    if not schedule_auto_online(
                            s.id, "sim", use_bulk=True, reserve_type="R"):
                        self.errors.append('Sorry, Time slot is not free')
                        s.delete()

            if not self.errors:
                # save experiment
                se = StudentsExperiment(
                    students_ref=user,
                    experiment_ref=exp,
                    start_time=start_datetime,
                    end_time=end_datetime,
                    status=0,
                )
                if exp.server_type == "omf":
                    se.reservation_ref = s
                elif exp.server_type == "sim":
                    se.sim_reservation_ref = s
                se.save()

                template_env = {
                    'topmenu_items': topmenu_items('Request Slice', request),
                    'username': usera.username,
                    'title': 'Request',
                }
                template_env.update(page.prelude_env())
                return render(request, 'slice-request-ack-view.html',
                              template_env)  # Redirect after POST

        template_name = "std-experiments-add.html"
        template_env = {
            'topmenu_items': topmenu_items('Reserve Experiment', page.request),
            'username': usera.username,
            'ex_title': exp.title,
            'exp_id': exp_id,
            'max_duration': max_duration,
            'start_date': start_time,
            'end_date': end_time,
            'title': 'Reserve Experiment',
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #22
0
    def get_or_post(self, request, method, course_id):
        usera = UserAccessProfile(request)
        self.user_email = usera.username  #the_user(request)
        page = Page(request)

        course_title = ''
        course_key = ''
        course_detail = ''
        course_max = ''
        course_code = ''
        course_emails = ''

        if method == 'GET' and course_id:
            c = Course.objects.get(id=course_id)
            if c:
                course_title = c.title
                course_key = c.key
                course_detail = c.description
                course_max = c.max_students
                course_code = c.code
                course_emails = c.email_list

        if method == 'POST':
            self.errors = []

            course_title = request.POST.get('course_title', '')
            course_key = request.POST.get('course_key', '')
            course_detail = request.POST.get('course_detail', '')
            course_max = request.POST.get('course_max', '')
            course_code = request.POST.get('course_code', '')
            course_emails = request.POST.get('course_emails', '')

            user = usera.user_obj  #get_user_by_email(the_user(self.request))
            user_type = usera.user_type  #get_user_type(user)
            if user_type != 2:
                messages.error(
                    page.request,
                    'Error: You have not permission to access this page.')
                return HttpResponseRedirect("/")

            if course_title is None or course_title == '':
                self.errors.append('Course title is mandatory')
            if course_key is None or course_key == '':
                self.errors.append('Course key is mandatory')

            if not self.errors:
                sv_course = False

                if not course_id:
                    c = Course(
                        instructor_ref=user,
                        title=course_title,
                        code=course_code,
                        key=course_key,
                        description=course_detail,
                        max_students=course_max,
                        email_list=course_emails,
                    )
                    sv_course = c.save()
                else:
                    c = Course.objects.get(id=course_id)
                    if c:
                        c.title = course_title
                        c.code = course_code
                        c.key = course_key
                        c.description = course_detail
                        c.max_students = course_max
                        c.email_list = course_emails
                        sv_course = c.save()
                #if sv_course:
                # look for add student already register
                    s_email = [x.strip() for x in course_emails.split(',')]
                    for se in s_email:
                        add_course_by_email(c, se)

                messages.error(page.request, 'Success: Add new course')
                return HttpResponseRedirect("/lab/courses")
                # template_env = {
                #    'topmenu_items': topmenu_items('Add a course', page.request),
                #    'username': the_user(request),
                #    'title': "Add New Course",
                # }
                # template_env.update(page.prelude_env())
                # return render(request, 'courses-add.html', template_env)  # Redirect after POST

        template_env = {
            'topmenu_items': topmenu_items('Add a course', page.request),
            'username': usera.username,  #the_user(request),
            'errors': self.errors,
            'course_title': course_title,
            'course_key': course_key,
            'course_code': course_code,
            'course_detail': course_detail,
            'course_max': course_max,
            'course_emails': course_emails,
            'title': "Add New Course"
        }
        template_env.update(page.prelude_env())
        return render(request, 'ins-courses-add.html', template_env)
예제 #23
0
    def get_or_post(self, request, method):
        template_name = "slice-control-view.html"
        page = Page(self.request)

        page.add_js_files([
            "js/jquery-1.11.1.js", "js/my_account.register.js",
            "js/my_account.edit_profile.js"
        ])
        page.add_css_files(["css/plugin.css"])  # "css/onelab.css"

        image_list = None
        current_slice = None
        user_image_list = []
        node_list = []
        freq_list = []
        allow_ssh = True
        allow_crt = True
        allow_img = True
        supp_file = None
        show_lab = False
        lab_ref = None
        lab_param_list = []
        # vnc_link_access = None
        # vnc = False
        usera = UserAccessProfile(self.request)
        user = usera.user_obj  # get_user_by_email(the_user(self.request))
        if usera.access_all is False:
            user_image_list = UserImage.objects.filter(
                user_ref=user, username=usera.session_username).all()
        elif user:
            user_image_list = UserImage.objects.filter(user_ref=user).all()

        user_type = usera.user_type  # get_user_type(user)

        slice_id = page.request.session.get('slice_id', None)
        stype = page.request.session.get('stype', None)
        t = ''

        if not slice_id or not slice_on_time(page.request, stype):
            # messages.error(page.request, 'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/portal/lab/current/")

        if slice_id:
            if stype == "omf":
                current_slice = Reservation.objects.get(id=slice_id)
                node_list = ReservationDetail.objects.filter(
                    reservation_ref=current_slice)
                freq_list = ReservationFrequency.objects.filter(
                    reservation_ref=current_slice)
                image_list = TestbedImage.objects.all()
                t = 'Testbeds Remote Control Panel'
            elif stype == "sim":
                current_slice = SimReservation.objects.get(id=slice_id)
                node_list = SimReservation.objects.filter(
                    id=slice_id)  # current_slice.vm_ref
                image_list = SimulationImage.objects.all()
                t = 'Simulation Remote Control Panel'
        # active_page = page.request.session.get('active_page','0')

        if not current_slice:
            return HttpResponseRedirect("/portal/lab/current/")

        if user_type == 3:
            allow_crt, allow_img, allow_ssh, supp_file, lab_ref, lab_param_list = get_control_options(
                stype, current_slice)
            if lab_ref:
                show_lab = True

        output_script = ''

        template_env = {
            'topmenu_items': topmenu_items('Control Panel', page.request),
            # 'errors': errors,
            'image_list': image_list,
            'slice_id': slice_id,
            'deadline': current_slice.end_time,
            'user_image_list': user_image_list,
            'node_list': node_list,
            'freq_list': freq_list,
            'output': output_script,
            'username': usera.username,  # the_user(self.request),
            'user_id': user.id,
            'title': t,
            'stype': stype,
            'allow_ssh': allow_ssh,
            'allow_crt': allow_crt,
            'allow_img': allow_img,
            'supp_file': supp_file,
            'show_lab': show_lab,
            'lab_ref': lab_ref,
            'lab_param_list': lab_param_list,
            'vnc_link_access': "http://" + BACKENDIP + ":6080/vnc.html",
            'terminal_ip': "https://" + BACKENDIP + ":4200/"
            # 'vnc' :vnc,
        }
        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #24
0
    def get_or_post(self, request, method, url):

        usera = UserAccessProfile(request)
        self.user_email = usera.username  # the_user(request)
        page = Page(request)
        reserve_type = None
        use_bulk = False
        maintenance = False

        if url == "reservation":
            reserve_type = "R"
        elif url == "reservation_a":
            reserve_type = "M"
            maintenance = True
        elif url == "bulk":
            reserve_type = "I"
            use_bulk = True

        user_hrn = usera.username  # the_user(request)
        usera = UserAccessProfile(request)
        user = usera.user_obj  # get_user_by_email(user_hrn)
        user_type = usera.user_type  # get_user_type(user)

        if user_type != 2 and reserve_type == "I":  # (user_type != 1 and reserve_type == "R")
            messages.error(
                page.request,
                'Error: You have not permission to access this page.')
            return HttpResponseRedirect("/")

        print("UT: ", reserve_type, "template: ", url)

        # Load System Parameters
        sim_max_duration = MAX_SIM_DURATION
        omf_max_duration = MAX_OMF_DURATION
        # bulk_max_duration = MAX_BUK_DURATION

        template_name = None
        courses_list = None
        slice_name = ''
        purpose = ''
        if reserve_type == "I":
            courses_list = Course.objects.filter(instructor_ref=user)
            labs_list = LabsTemplate.objects.all()
            template_name = "ins-experiments-add.html"
            omf_max_duration = sim_max_duration
        elif reserve_type == "R":
            template_name = "reservation-view.html"
        elif reserve_type == "M":
            template_name = "reservation-view.html"
            slice_name = "Maintenance"
            purpose = "HW Maintenance"
        s = None

        if method == 'POST':
            self.errors = []

            ex_title = None
            ex_course = None
            ex_due_date = None
            ex_detail = None
            # ex_reserve_type = None
            ex_max_duration = None
            ex_allow_shh = None
            ex_allow_crt = None
            ex_allow_img = None
            ex_file = None
            ex_use_labs = None
            ex_idx_lab = None
            ex_tmp_lab = None

            if reserve_type == "I":
                ex_title = request.POST.get('ex_title', '')
                ex_course = request.POST.get('ex_course', '')
                ex_due_date = request.POST.get('due_date', '')
                ex_detail = request.POST.get('ex_detail', '')
                # ex_reserve_type = request.POST.get('reserve_type', '')
                ex_max_duration = request.POST.get('max_duration', '')
                if len(request.FILES) > 0:
                    ex_file = request.FILES['ex_file']
                ex_allow_shh = request.POST.get('allow_ssh', False)
                ex_allow_crt = request.POST.get('allow_crt', False)
                ex_allow_img = request.POST.get('allow_img', False)
                ex_use_labs = request.POST.get('use_lab', False)
                ex_idx_lab = int(request.POST.get('pre_exp', '-1'))
                ex_tmp_lab = request.POST.getlist('t_lab', [])

                if ex_title is None or ex_title == '':
                    self.errors.append('Experiment Name is mandatory')
                if ex_due_date is None or ex_due_date == '':
                    self.errors.append('ex_due_date is mandatory')

            authority_hrn = get_authority_by_user(usera.username)
            slice_name = request.POST.get('slice_name', slice_name)
            server_type = request.POST.get('server_type', '')
            request_type = request.POST.get('request_type', '')

            request_date = timezone.now(
            )  # request.POST.get('request_date', '')
            resource_group = request.POST.getlist('resource_group', [])

            if server_type == "omf":
                omf_img = request.POST.get('omf_img', '')
                freq_group = request.POST.getlist('freq_group', [])
            elif server_type == "sim":
                sim_img = request.POST.get('sim_img', '')
                sim_vm = request.POST.get('sim_vm', '1')
                sim_no_proc = request.POST.get('sim_no_proc', '1')
                sim_ram_size = request.POST.get('sim_ram_size', '1024')

            purpose = request.POST.get('purpose', purpose)

            # date
            start_date = request.POST.get('req_time_date1', '')
            start_date = parser.parse(start_date)
            end_date = request.POST.get('req_time_date2', '')
            end_date = parser.parse(end_date)
            # time
            start_time = request.POST.get('req_time_time1', '')
            end_time = request.POST.get('req_time_time2', '')

            h1 = int(parser.parse(start_time).strftime('%H'))
            h2 = int(parser.parse(end_time).strftime('%H'))
            m1 = int(parser.parse(start_time).strftime('%M'))
            m2 = int(parser.parse(end_time).strftime('%M'))

            start_datetime = start_date + timedelta(hours=h1, minutes=m1)
            end_datetime = end_date + timedelta(hours=h2, minutes=m2)

            diff = end_datetime - start_datetime
            dur = diff.seconds / 60 / 60
            slice_duration = request.POST.get('slice_duration', dur)

            # in case of urgent reservation set duration with time range
            if request_type == 'lazy_t':
                slice_duration = dur

            email = self.user_email
            # cc_myself = True
            # request_date    = parser.parse(request_date)

            if request_date is None or request_date == '':
                self.errors.append(
                    'Please, determine the request date and time')
            if slice_name is None or slice_name == '':
                self.errors.append('Slice Name is mandatory')
            if purpose is None or purpose == '':
                self.errors.append('Purpose is mandatory')

            if not self.errors:
                if server_type == "omf":
                    s = Reservation(
                        user_ref=user,
                        username=usera.session_username,
                        f_start_time=start_datetime,
                        f_end_time=end_datetime,
                        slice_name=slice_name,
                        slice_duration=slice_duration,  # approve_date
                        request_date=request_date,
                        authority_hrn=authority_hrn,
                        request_type=request_type,  # ref
                        purpose=purpose,
                        status=ReservationStatus.get_pending(),
                    )
                    if omf_img:
                        s.base_image_ref = TestbedImage.objects.get(id=omf_img)
                    s.save()
                    for i in resource_group:
                        p = ReservationDetail(
                            reservation_ref=s,
                            node_ref=VirtualNode.objects.get(id=i),
                        )
                        if omf_img:
                            p.image_ref = TestbedImage.objects.get(id=omf_img)
                        p.save()

                    for i in freq_group:
                        p = ReservationFrequency(
                            reservation_ref=s,
                            frequency_ref=FrequencyRanges.objects.get(id=i),
                        )
                        p.save()

                    # TODO: @qursaan
                    if not schedule_auto_online(s.id, "omf", use_bulk,
                                                reserve_type):
                        self.errors.append('Sorry, Time slot is not free')
                        s.delete()

                elif server_type == "sim":
                    s = SimReservation(
                        user_ref=user,
                        username=usera.session_username,
                        slice_name=slice_name,
                        slice_duration=slice_duration,  # approve_date
                        request_date=request_date,
                        f_start_time=start_datetime,
                        f_end_time=end_datetime,
                        authority_hrn=authority_hrn,
                        request_type=request_type,
                        node_ref=SimulationVM.objects.get(id=sim_vm),  # ref
                        purpose=purpose,
                        status=ReservationStatus.get_pending(),
                        n_processor=sim_no_proc,
                        n_ram=sim_ram_size,
                    )
                    if sim_img:
                        s.image_ref = SimulationImage.objects.get(
                            id=sim_img)  # ref
                    s.save()
                    # TODO: @qursaan
                    if not schedule_auto_online(s.id, "sim", use_bulk,
                                                reserve_type):
                        self.errors.append('Sorry, Time slot is not free')
                        s.delete()

            if not self.errors:
                # save experiment
                if reserve_type == "I":
                    se = Experiments(
                        title=ex_title,
                        course_ref=Course.objects.get(id=ex_course),
                        due_date=parser.parse(ex_due_date),
                        description=ex_detail,
                        reservation_type=0,
                        max_duration=ex_max_duration,
                        server_type=server_type,
                        instructor_ref=user,
                        allow_ssh=ex_allow_shh,
                        allow_img=ex_allow_img,
                        allow_crt=ex_allow_crt,
                    )
                    if server_type == "omf":
                        se.reservation_ref = s
                    elif server_type == "sim":
                        se.sim_reservation_ref = s
                    se.save()

                    # Save file and update
                    if ex_file:
                        fs = FileSystemStorage()
                        new_filename = user.username + "_" + request_date.strftime(
                            '%d_%m_%Y') + "_" + ex_file.name
                        filename = fs.save(new_filename, ex_file)
                        uploaded_file_url = fs.url(filename)
                        se.sup_files = uploaded_file_url
                        se.save()

                    if ex_use_labs and len(ex_tmp_lab) > ex_idx_lab >= 0:
                        lab_temp_id = int(ex_tmp_lab[ex_idx_lab])
                        lab_temp_obj = LabsTemplate.objects.get(id=lab_temp_id)
                        if lab_temp_obj:
                            se.lab_template_ref = lab_temp_obj
                            se.save()

                # The recipients are the PI of the authority
                # TODO: @qursaan
                recipients = get_authority_emails(
                    authority_hrn
                )  # authority_get_pi_emails(request, authority_hrn)
                ctx = {
                    'email': email,
                    'slice_name': slice_name,
                    'authority_hrn': authority_hrn,
                    'server_type': server_type,
                    'request_type': request_type,
                    'slice_duration': slice_duration,
                    'purpose': purpose,
                    'request_date': request_date,
                }
                # if cc_myself:
                recipients.append(SUPPORT_EMAIL)
                msg = render_to_string('slice-request-email.txt', ctx)
                send_mail("CRC user %s requested a slice" % email, msg, email,
                          recipients)

                template_env = {
                    'topmenu_items': topmenu_items('test_page', request),
                    'username': usera.username,
                    'title': 'Request',
                }
                template_env.update(page.prelude_env())
                return render(request, 'slice-request-ack-view.html',
                              template_env)  # Redirect after POST

        # Resources
        if usera.access_all:
            node_list = PhysicalNode.objects.filter(type=0)
            sim_vm_list = SimulationVM.objects.all()
            freq_list = FrequencyRanges.objects.all()
        else:
            # profile_list = ResourceProfile.objects.filter(shared=True)
            shared_Only = True
            node_list = PhysicalNode.objects.filter(shared=shared_Only, type=0)
            sim_vm_list = None
            freq_list = None

        resources_list = VirtualNode.objects.filter(node_ref__id__in=node_list)
        resources_info = ResourcesInfo.objects.all()

        # Images
        sim_img_list = SimulationImage.objects.all()
        omf_img_list = TestbedImage.objects.all()

        user_used, user_size = check_user_reserve(usera.user_obj)

        template_env = {
            'topmenu_items': topmenu_items('Request a slice', page.request),
            'username': usera.username,
            'errors': self.errors,
            'slice_name': request.POST.get('slice_name', slice_name),
            'server_type': request.POST.get('server_type', ''),
            'request_type': request.POST.get('request_type', ''),
            'freq_list': freq_list,
            'freq_group': request.POST.getlist('freq_group', []),
            'node_list': node_list,
            'resource_list': resources_list,
            'resource_info': resources_info,
            'resource_group': request.POST.getlist('resource_group', []),
            'sim_vm_list': sim_vm_list,
            'sim_vm': request.POST.get('sim_vm', ''),
            'sim_no_proc': request.POST.get('sim_no_proc', '1'),
            'sim_ram_size': request.POST.get('sim_ram_size', '1024'),
            'sim_enable': SIM_RESERVATION,
            'sim_max_duration': sim_max_duration,
            'omf_max_duration': omf_max_duration,
            # 'buk_max_duration': bulk_max_duration,
            'sim_img_list': sim_img_list,
            'omf_img_list': omf_img_list,
            'sim_img': request.POST.get('sim_img', ''),
            'slice_duration': request.POST.get('slice_duration', ''),
            'number_of_nodes': request.POST.get('number_of_nodes', ''),
            'purpose': request.POST.get('purpose', ''),
            'email': self.user_email,
            'user_hrn': user_hrn,
            'user_size': user_size,
            'user_used': user_used,
            'user_free': user_size - user_used,

            # 'login'         : user.username,
            # 'cc_myself'     : True,
            'time_now': timezone.now(),
            'title': "Reservation System",

            # General
            'reserve_type': reserve_type,
            'maintenance': maintenance,
        }

        if reserve_type == "I":
            if not courses_list:
                messages.success(request, 'Success: Add a Course First!')
                return HttpResponseRedirect("/lab/courses/")

            template_env['ex_title'] = request.POST.get('ex_title', '')
            template_env['ex_course'] = request.POST.get('ex_course', '')
            template_env['due_date'] = request.POST.get('ex_due_date', '')
            template_env['ex_detail'] = request.POST.get('ex_detail', '')
            template_env['reserve_type'] = request.POST.get(
                'ex_reserve_type', '')
            template_env['max_duration'] = request.POST.get(
                'ex_max_duration', '')
            template_env['ex_courses_list'] = courses_list
            template_env['labs_list'] = labs_list
            template_env['title'] = "Add New Experiment"

        template_env.update(page.prelude_env())
        return render(request, template_name, template_env)
예제 #25
0
    def get_or_post(self, request, method):
        # Using cache manifold-tables to get the list of authorities faster
        # @qursaan: comment and change
        # authorities_query = Query.get('authority').select('name', 'authority_hrn')
        # authorities = Authority.objects.all() #execute_admin_query(request, authorities_query)
        # if authorities is not None:
        #    authorities = sorted(authorities)

        # user_query = User.objects.get()
        #        user_query  = Query().get('local:user').select('email')
        #        user_email = execute_query(self.request, user_query)
        usera = UserAccessProfile(request)
        self.user_email = usera.username  # user_email[0].get('email')

        #        account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
        #        account_details = execute_query(self.request, account_query)

        #        platform_query  = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled')
        #        platform_details = execute_query(self.request, platform_query)

        # getting user_hrn from local:account
        #        for account_detail in account_details:
        #            for platform_detail in platform_details:
        #                if platform_detail['platform_id'] == account_detail['platform_id']:
        #                    # taking user_hrn only from myslice account
        #                    # NOTE: we should later handle accounts filter_by auth_type= managed OR user
        #                    if 'myslice' in platform_detail['platform']:
        #                        account_config = json.loads(account_detail['config'])
        #                        user_hrn = account_config.get('user_hrn','N/A')

        # user_query  = Query().get('user').select('user_hrn').filter_by('user_hrn','==','$user_hrn')
        # @qursaan: must change
        user_hrn = usera.username  # execute_query(self.request, user_query)

        # self.user_hrn = user_hrn[0].get('user_hrn')
        total_nodes = PhysicalNode.objects.count()
        node_list = PhysicalNode.objects.all()
        # for i in range(int(total_nodes)):
        #    node_list.append(i+1)

        # total_resources = NodeResource.objects.count()
        resources_list = VirtualNode.objects.all(
        )  # [[range(total_resources)] for x in range(total_nodes)]
        resources_info = ResourcesInfo.objects.all()

        duration_list = []
        for i in range(1, 25, 1):
            duration_list.append(i)

        sim_os_list = SimulationImage.objects.all()

        page = Page(request)
        # page.add_css_files(["http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"])

        if method == 'POST':
            self.errors = []

            # The form has been submitted
            slice_name = request.POST.get('slice_name', '')
            authority_hrn = get_authority_by_user(
                usera.username)  # request.POST.get('authority_hrn', '')
            request_date = request.POST.get('request_date', '')
            server_type = request.POST.get('server_type', '')
            request_type = request.POST.get('request_type', '')
            resource_group = request.POST.getlist('resource_group', [])
            # number_of_nodes = request.POST.get('number_of_nodes', '')
            purpose = request.POST.get('purpose', '')
            slice_duration = request.POST.get('sim_duration', '1')
            sim_os_image = request.POST.get('sim_os', '1')
            email = self.user_email
            # user_hrn = user_hrn
            # cc_myself = True
            # print request_date
            # 10/01/2015 12:00 PM
            request_date = parser.parse(request_date)
            print(request_date)

            # if (authority_hrn is None or authority_hrn == ''):
            #    self.errors.append('Please, select an authority')
            if request_date is None or request_date == '':
                self.errors.append(
                    'Please, determine the request date and time')
            # What kind of slice name is valid?
            if slice_name is None or slice_name == '':
                self.errors.append('Slice Name is mandatory')
            if purpose is None or purpose == '':
                self.errors.append('Purpose is mandatory')

            if not self.errors:
                ctx = {
                    'email': email,
                    'slice_name': slice_name,
                    'authority_hrn': authority_hrn,
                    'server_type': server_type,
                    'request_type': request_type,
                    # 'number_of_nodes': number_of_nodes,
                    'slice_duration': slice_duration,
                    'purpose': purpose,
                    'request_date': request_date,
                }
                s = PendingSlice(
                    slice_name=slice_name,
                    user_hrn=user_hrn,
                    request_date=request_date,
                    authority_hrn=authority_hrn,
                    server_type=server_type,
                    request_type=request_type,
                    base_image=sim_os_image,
                    slice_duration=slice_duration,
                    # number_of_nodes = number_of_nodes,
                    purpose=purpose,
                    status=ReservationStatus.get_pending(),
                )
                s.save()
                # for i in resource_group:
                #   duration_list.append(i)
                #  p = PendingReservationDetail(
                #     slice_id=s,
                #    node_resource_id=NodeResource.objects.get(id=i),
                # )
                # p.save()

                # schedule_slice(s.id)

                # The recipients are the PI of the authority
                recipients = get_authority_emails(
                    authority_hrn
                )  # authority_get_pi_emails(request, authority_hrn)

                # if cc_myself:
                recipients.append(SUPPORT_EMAIL)
                msg = render_to_string('slice-request-email.txt', ctx)
                # print "email, msg, email, recipients", email , msg, email, recipients
                send_mail("CRC user %s requested a slice" % email, msg, email,
                          recipients)

                template_env = {
                    'topmenu_items': topmenu_items('test_page', request),
                    'username': usera.username,
                    'title': 'Request',
                }
                template_env.update(page.prelude_env())
                return render(request, 'slice-request-ack-view.html',
                              template_env)  # Redirect after POST

        template_env = {
            #'topmenu_items': topmenu_items('Request a slice', page.request),
            'username': usera.username,
            'errors': self.errors,
            'slice_name': request.POST.get('slice_name', ''),
            # 'authority_hrn': request.POST.get('authority_hrn', ''),
            'node_list': node_list,
            'resource_list': resources_list,
            'resource_info': resources_info,
            'duration_list': duration_list,
            'sim_os_list': sim_os_list,
            'sim_os': request.POST.get('sim_os', ''),
            'resource_group': request.POST.getlist('resource_group', []),
            'server_type': request.POST.get('server_type', ''),
            'request_type': request.POST.get('request_type', ''),
            'sim_duration': request.POST.get('slice_duration', ''),
            'number_of_nodes': request.POST.get('number_of_nodes', ''),
            'purpose': request.POST.get('purpose', ''),
            'email': self.user_email,
            'user_hrn': user_hrn,
            'cc_myself': True,
            'time_now': timezone.now(),
            # 'authorities': authorities,
            'title': "Request a Slice"
        }
        template_env.update(page.prelude_env())
        return render(request, 'slicerequest-view.html', template_env)