views.py
155 lines
| 5.0 KiB
| text/x-python
|
PythonLexer
/ plotter / views.py
|
r11 | #!/usr/bin/python | |
# -*- coding: UTF-8 -*- | |||
|
r22 | ||
r0 | |||
|
r1 | import os | |
|
r11 | import time | |
r0 | from datetime import datetime | ||
from django import forms | |||
from django.contrib import messages | |||
from django.utils.safestring import mark_safe | |||
from django.shortcuts import render | |||
r2 | import mongoengine | ||
r0 | |||
|
r22 | from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData | |
|
r1 | ||
r2 | host = os.environ.get('HOST_MONGO', 'localhost') | ||
mongoengine.connect('dbplots', host=host, port=27017) | |||
r0 | |||
|
r11 | ||
r0 | # Forms | ||
class SearchForm(forms.Form): | |||
experiment = forms.ChoiceField() | |||
r4 | plot = forms.ChoiceField() | ||
r0 | |||
def __init__(self, *args, **kwargs): | |||
exp_choices = kwargs.pop('exp_choices', []) | |||
r4 | plt_choices = kwargs.pop('plt_choices', []) | ||
r0 | super(SearchForm, self).__init__(*args, **kwargs) | ||
self.fields['experiment'].choices = [(0, 'Select Experiment')] + exp_choices | |||
r4 | self.fields['plot'].choices = [(0, 'Select Plot')] + plt_choices | ||
|
r11 | # we use this class to change the parameter in Scatter plot using the function plotly.restyle in jroplot.js | |
r5 | class ScatterSetupForm(forms.Form): | ||
plotdiv = forms.CharField(widget=forms.HiddenInput()) | |||
ymax = forms.CharField(initial=30) | |||
ymin = forms.CharField(initial=10) | |||
|
r11 | # we use this class to change the parameter in RTI plot using the function plotly.restyle in jroplot.js | |
r5 | class RTISetupForm(forms.Form): | ||
plotdiv = forms.CharField(widget=forms.HiddenInput()) | |||
colormap = forms.ChoiceField(choices=[('Jet', 'Jet'), ('Viridis', 'Viridis'), ('RdBu', 'RdBu')]) | |||
zmax = forms.CharField(initial=30) | |||
zmin = forms.CharField(initial=10) | |||
ymax = forms.CharField(initial=180) | |||
ymin = forms.CharField(initial=80) | |||
|
r11 | # we use this class to change the parameter in SPC plot using the function plotly.restyle in jroplot.js | |
r5 | class SPCSetupForm(forms.Form): | ||
plotdiv = forms.CharField(widget=forms.HiddenInput()) | |||
colormap = forms.ChoiceField(choices=[('Jet', 'Jet'), ('Viridis', 'Viridis'), ('RdBu', 'RdBu')]) | |||
|
r11 | #como es un perfil xmin y xmax deben ser iguales a zmin y zmax | |
r5 | xmax = forms.CharField(initial=30) | ||
xmin = forms.CharField(initial=10) | |||
|
r11 | #x2max = forms.CharField(initial=30) | |
#x2min = forms.CharField(initial=10) | |||
r5 | ymax = forms.CharField(initial=180) | ||
ymin = forms.CharField(initial=80) | |||
zmax = forms.CharField(initial=30) | |||
zmin = forms.CharField(initial=10) | |||
r0 | # Create your views here. | ||
|
r11 | def main(request): | |
r0 | |||
r4 | kwargs = {} | ||
|
r22 | date = request.GET.get('date', datetime.now().strftime('%d-%m-%Y')) | |
exps = ExpDetail.objects(date=datetime.strptime(date, '%d-%m-%Y')) | |||
|
r11 | experiments = [] | |
for exp in exps: | |||
dum = {} | |||
|
r22 | dum['code'] = exp.experiment.code | |
dum['plots'] = [plot.plot for plot in exp.plots()] | |||
dum['name'] = exp.experiment.name | |||
|
r11 | dt = datetime.now() | |
t = time.mktime(dt.timetuple()) | |||
|
r22 | if exp.plots()[0]['metadata']['localtime'] == True: #Ask which type of time is coming: LT o UTC | |
|
r11 | t -= 5*60*60 | |
# COnditionals to know which state are my clients | |||
|
r22 | if (t-exp['last_time']) > 10*60: | |
|
r11 | status = 'Offline' | |
clase = 'alertas-offline' | |||
|
r21 | style = 'danger' | |
|
r22 | lastDataDate = exp['last_time'] | |
elif (t-exp['last_time']) > 5*60: | |||
|
r11 | status = 'Delayed' | |
clase = 'alertas-delayed' | |||
|
r21 | style = 'warning' | |
|
r22 | lastDataDate = exp['last_time'] | |
|
r11 | else: | |
status = 'Online' | |||
clase = 'alertas-online' | |||
|
r21 | style = 'success' | |
|
r22 | lastDataDate = exp['last_time'] | |
|
r11 | ||
dum['status'] = status | |||
dum['class'] = clase | |||
|
r21 | dum['style']= style | |
dum['date']= datetime.utcfromtimestamp(lastDataDate) | |||
|
r11 | ||
experiments.append(dum) | |||
r4 | |||
kwargs['date'] = date | |||
|
r11 | kwargs['experiments'] = experiments | |
return render(request, 'home.html', kwargs) | |||
r0 | |||
|
r11 | def plot(request, code=None, plot=None): | |
''' | |||
''' | |||
|
r21 | ||
realtime = False | |||
date = request.GET.get('date', None) | |||
if date is None: | |||
|
r22 | date = datetime.now().strftime('%d-%m-%Y') | |
|
r21 | realtime = True | |
exp = Experiment.objects.get(code=int(code)) | |||
|
r22 | detail = ExpDetail.objects.get(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y')) | |
meta = PlotMeta.objects.get(exp_detail=detail, plot=plot) | |||
|
r11 | ||
kwargs = { | |||
'code': code, | |||
'plot': plot, | |||
'date': date, | |||
|
r22 | 'id': meta.pk, | |
|
r21 | 'realtime': realtime, | |
'title': exp.name, | |||
|
r11 | } | |
# Logic to show my views | |||
r0 | if plot == 'rti': | ||
r5 | kwargs['setup_form'] = RTISetupForm() | ||
|
r21 | kwargs['fn_plot'] = 'PcolorBuffer' | |
kwargs['subtitle'] = 'RTI plot' | |||
return render(request, 'plot.html', kwargs) | |||
r0 | elif plot == 'spc': | ||
r5 | kwargs['setup_form'] = SPCSetupForm() | ||
|
r21 | kwargs['fn_plot'] = 'Pcolor' | |
kwargs['subtitle'] = 'Spectra plot' | |||
return render(request, 'plot.html', kwargs) | |||
r0 | elif plot == 'noise': | ||
r5 | kwargs['setup_form'] = ScatterSetupForm() | ||
|
r21 | kwargs['fn_plot'] = 'Scatter' | |
kwargs['subtitle'] = 'Noise plot' | |||
return render(request, 'plot.html', kwargs) | |||
r0 | else: | ||
|
r11 | return render(request, 'home.html', {}) | |