예제 #1
0
def perform_login(request):
    """
        Perform user authentication
    """
    user = None  
    login_failure = None
    if request.method == 'POST':
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(username=username, password=password)
        if user is not None and not user.is_anonymous():
            login(request,user)
        else:
            login_failure = "Invalid username or password"
    
    if request.user.is_authenticated():
        # If we came from a given page and just needed 
        # authentication, go back to that page.
        if "next" in request.GET:
            redirect_url = request.GET["next"]
            return redirect(redirect_url)        
        return redirect(reverse(settings.LANDING_VIEW))
    else:
        # Breadcrumbs
        breadcrumbs = "<a href='%s'>home</a> &rsaquo; login" % reverse(settings.LANDING_VIEW)
        
        template_values = {'breadcrumbs': breadcrumbs,
                           'login_failure': login_failure}
        template_values = fill_template_values(request, **template_values)
        return render_to_response('users/authenticate.html', template_values,
                              context_instance=RequestContext(request))
예제 #2
0
def live_errors(request, instrument):
    """
        Display the list of latest errors
    """
    # Get instrument
    instrument_id = get_object_or_404(Instrument, name=instrument.lower())

    #TODO: let the user pick the timeframe for the errors.
    # Pick 30 days for now.
    time_period = 30
    delta_time = datetime.timedelta(days=time_period)
    oldest_time = timezone.now() - delta_time
    error_query = Error.objects.filter(run_status_id__created_on__gte=oldest_time,
                                       run_status_id__run_id__instrument_id=instrument_id).order_by('id')
    last_error_id = 0
    if len(error_query) > 0:
        last_error_id = error_query[len(error_query) - 1].id
    error_list = []
    for err in error_query:
        localtime = timezone.localtime(err.run_status_id.created_on)
        df = dateformat.DateFormat(localtime)
        error_list.append({'experiment': str("<a href='%s'>%s</a>" % (reverse('report:ipts_summary',
                                                                              args=[instrument,
                                                                                    err.run_status_id.run_id.ipts_id.expt_name]),
                                                                      err.run_status_id.run_id.ipts_id.expt_name)),
                           'run': str("<a href='%s'>%s</a>" % (reverse('report:detail',
                                                                       args=[instrument,
                                                                             err.run_status_id.run_id.run_number]),
                                                               err.run_status_id.run_id.run_number)),
                           'info': str(err.description),
                           'timestamp': err.run_status_id.created_on.isoformat(),
                           'created_on': str(df.format(settings.DATETIME_FORMAT))})

    # Instrument reporting URL
    instrument_url = reverse('report:instrument_summary', args=[instrument])
    update_url = reverse('report:get_error_update', args=[instrument])

    # Breadcrumbs
    breadcrumbs = "<a href='%s'>home</a>" % reverse(settings.LANDING_VIEW)
    breadcrumbs += " &rsaquo; <a href='%s'>%s</a>" % (reverse('report:instrument_summary',
                                                              args=[instrument]), instrument)
    breadcrumbs += " &rsaquo; errors"

    template_values = {'instrument':instrument.upper(),
                       'error_list':error_list,
                       'last_error_id': last_error_id,
                       'breadcrumbs':breadcrumbs,
                       'instrument_url':instrument_url,
                       'update_url':update_url,
                       'time_period':time_period
                      }
    template_values = view_util.fill_template_values(request, **template_values)
    template_values = users.view_util.fill_template_values(request, **template_values)
    return render(request, 'report/live_errors.html', template_values)
예제 #3
0
def ipts_summary(request, instrument, ipts):
    """
        Experiment summary giving the list of runs
        @param instrument: instrument name
        @param ipts: experiment name
    """
    # Protect against lower-case requests
    ipts = ipts.upper()
    # Get instrument
    instrument_id = get_object_or_404(Instrument, name=instrument.lower())
    # Get experiment
    ipts_id = get_object_or_404(IPTS, expt_name=ipts, instruments=instrument_id)

    # Get IPTS URL
    ipts_url = reverse('report:ipts_summary', args=[instrument, ipts])
    update_url = reverse('report:get_experiment_update', args=[instrument, ipts])

    # Get the latest run and experiment so we can determine later
    # whether the user should refresh the page
    instrument_id = get_object_or_404(Instrument, name=instrument.lower())

    runs = DataRun.objects.filter(instrument_id=instrument_id,
                                  ipts_id=ipts_id).order_by('created_on')
    run_list = view_util.get_run_list_dict(runs)

    # Get the ID of the first displayed run so that we can update the
    # status of runs that are displayed
    first_run_id = 0
    if len(runs) > 0:
        first_run_id = runs[0].id

    # Breadcrumbs
    breadcrumbs = "<a href='%s'>home</a>" % reverse(settings.LANDING_VIEW)
    breadcrumbs += " &rsaquo; <a href='%s'>%s</a>" % (reverse('report:instrument_summary',
                                                              args=[instrument]), instrument)
    breadcrumbs += " &rsaquo; %s" % str(ipts_id).lower()

    template_values = {'instrument': instrument.upper(),
                       'ipts_number': ipts,
                       'run_list': run_list,
                       'breadcrumbs': breadcrumbs,
                       'ipts_url': ipts_url,
                       'update_url': update_url,
                       'first_run_id': first_run_id,
                      }
    template_values = view_util.fill_template_values(request, **template_values)
    template_values = users.view_util.fill_template_values(request, **template_values)
    return render(request, 'report/ipts_summary.html', template_values)
예제 #4
0
def perform_login(request):
    """
        Perform user authentication
    """
    user = None
    login_failure = None
    if request.method == 'POST':
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(username=username, password=password)
        # Handling of local testing
        if user is not None and settings.JOB_HANDLING_HOST == 'localhost':
            login_failure = ["You are running locally"]
            login(request, user)
        elif user is not None and not user.is_anonymous():
            try:
                copy_key_to_server(
                    username=username,
                    password=password,
                    hostname=settings.JOB_HANDLING_HOST,
                    port=settings.JOB_HANDLING_PORT,
                )
                login(request, user)
            except:
                login_failure = [
                    "Could not connect to computing resource: it may be unavailable"
                ]
        else:
            login_failure = ["Invalid username or password"]

    if request.user.is_authenticated():
        # If we came from a given page and just needed
        # authentication, go back to that page.
        if "next" in request.GET:
            redirect_url = request.GET["next"]
            return redirect(redirect_url)
        return redirect(reverse(settings.LANDING_VIEW))
    else:
        # Breadcrumbs
        breadcrumbs = "<a href='%s'>home</a> &rsaquo; login" % reverse(
            settings.LANDING_VIEW)

        template_values = {
            'breadcrumbs': breadcrumbs,
            'user_alert': login_failure
        }
        template_values = fill_template_values(request, **template_values)
        return render(request, 'users/authenticate.html', template_values)
예제 #5
0
def instrument_summary(request, instrument):
    """
        Instrument summary page
        @param instrument: instrument name
    """
    # Get instrument
    instrument_id = get_object_or_404(Instrument, name=instrument.lower())

    # Get list of IPTS
    ipts = IPTS.objects.filter(instruments=instrument_id).order_by('created_on').reverse()
    expt_list = []
    for expt in ipts:
        localtime = timezone.localtime(expt.created_on)
        df = dateformat.DateFormat(localtime)
        expt_list.append({'experiment': str("<a href='%s'>%s</a>" % (reverse('report:ipts_summary',
                                                                             args=[instrument, expt.expt_name]),
                                                                     expt.expt_name)),
                          'total': expt.number_of_runs(),
                          'timestamp': expt.created_on.isoformat(),
                          'created_on': str(df.format(settings.DATETIME_FORMAT))})

    # Instrument error URL
    error_url = reverse('report:live_errors', args=[instrument])

    # Update URL for live monitoring
    update_url = reverse('report:get_instrument_update', args=[instrument])

    # Get the last IPTS created so that we can properly do the live update
    if IPTS.objects.filter(instruments=instrument_id).count() > 0:
        last_expt_created = IPTS.objects.filter(instruments=instrument_id).latest('id')
    else:
        last_expt_created = None

    # Breadcrumbs
    breadcrumbs = "<a href='%s'>home</a> &rsaquo; %s" % (reverse(settings.LANDING_VIEW),
                                                         instrument.lower())

    template_values = {'instrument':instrument.upper(),
                       'expt_list': expt_list,
                       'breadcrumbs':breadcrumbs,
                       'error_url': error_url,
                       'update_url':update_url,
                       'last_expt_created':last_expt_created,
                      }
    template_values = view_util.fill_template_values(request, **template_values)
    template_values = users.view_util.fill_template_values(request, **template_values)
    return render(request, 'report/instrument.html', template_values)