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> › 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))
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 += " › <a href='%s'>%s</a>" % (reverse('report:instrument_summary', args=[instrument]), instrument) breadcrumbs += " › 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)
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 += " › <a href='%s'>%s</a>" % (reverse('report:instrument_summary', args=[instrument]), instrument) breadcrumbs += " › %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)
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> › 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)
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> › %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)