views.py
155 lines
| 5.1 KiB
| text/x-python
|
PythonLexer
/ plotter / views.py
|
r11 | #!/usr/bin/python | |
# -*- coding: UTF-8 -*- | |||
r0 | from __future__ import unicode_literals | ||
|
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 | |||
|
r11 | from plotter.models import Experiment, ExpMeta, ExpData | |
|
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 = {} | ||
|
r11 | date = request.GET.get('date', datetime.now().strftime('%d/%m/%Y')) | |
exps = ExpMeta.objects.filter(date=datetime.strptime(date, '%d/%m/%Y')) | |||
experiments = [] | |||
for exp in exps: | |||
dum = {} | |||
dum['code'] = exp.code | |||
dum['plots'] = exp.plots | |||
dum['name'] = Experiment.objects.get(code=exp.code).name | |||
dt = datetime.now() | |||
data = ExpData.objects(expmeta=exp).order_by('-time')[0] #Get the time from the last data | |||
t = time.mktime(dt.timetuple()) | |||
if exp['localtime'] == True: #Ask which type of time is coming: LT o UTC | |||
t -= 5*60*60 | |||
# COnditionals to know which state are my clients | |||
if (t-data['time']) > 6*exp['interval']: | |||
status = 'Offline' | |||
clase = 'alertas-offline' | |||
|
r21 | style = 'danger' | |
|
r11 | lastDataDate = data['time'] | |
elif (t-data['time']) > 3*exp['interval']: | |||
status = 'Delayed' | |||
clase = 'alertas-delayed' | |||
|
r21 | style = 'warning' | |
|
r11 | lastDataDate = data['time'] | |
else: | |||
status = 'Online' | |||
clase = 'alertas-online' | |||
|
r21 | style = 'success' | |
|
r11 | lastDataDate = data['time'] | |
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: | |||
date = datetime.now().strftime('%d/%m/%Y') | |||
realtime = True | |||
exp = Experiment.objects.get(code=int(code)) | |||
expmeta = ExpMeta.objects.get(code=int(code), date=datetime.strptime(date, '%d/%m/%Y')) | |||
|
r11 | ||
kwargs = { | |||
'code': code, | |||
'plot': plot, | |||
'date': date, | |||
|
r21 | 'id': expmeta.id, | |
'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', {}) | |