views.py
185 lines
| 5.8 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 | ||||
|
r30 | from django.http import HttpResponse | ||
r0 | ||||
r2 | import mongoengine | |||
r0 | ||||
|
r22 | from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData | ||
|
r1 | |||
|
r30 | from utils.plots import skynoise_plot | ||
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 | ||
|
r27 | dum['plots'] = [] | ||
|
r22 | dum['name'] = exp.experiment.name | ||
|
r11 | dt = datetime.now() | ||
t = time.mktime(dt.timetuple()) | ||||
|
r27 | if exp.plots()[0]['metadata']['localtime'] == True: | ||
|
r11 | t -= 5*60*60 | ||
|
r27 | |||
|
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) | ||||
|
r27 | for plot in exp.plots(): | ||
dum['plots'].append({'plot': plot.plot, 'name': plot.plot.replace('_', ' ').title(), 'id':plot.id}) | ||||
|
r11 | experiments.append(dum) | ||
r4 | ||||
kwargs['date'] = date | ||||
|
r11 | kwargs['experiments'] = experiments | ||
|
r25 | kwargs['menu_list'] = ['Realtime'] | ||
|
r11 | |||
return render(request, 'home.html', kwargs) | ||||
|
r25 | def tools(request): | ||
''' | ||||
''' | ||||
kwargs = { | ||||
'menu_list': ['Tools'] | ||||
} | ||||
return render(request, 'tools.html', kwargs) | ||||
def reports(request): | ||||
''' | ||||
''' | ||||
kwargs = { | ||||
'menu_list': ['Reports'] | ||||
} | ||||
return render(request, 'reports.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, | ||||
|
r27 | 'meta':meta, | ||
|
r11 | 'date': date, | ||
|
r22 | 'id': meta.pk, | ||
|
r21 | 'realtime': realtime, | ||
|
r27 | 'menu_list': ['Realtime', exp.name, meta.plot.replace('_', ' ').title()] | ||
|
r11 | } | ||
# Logic to show my views | ||||
|
r27 | if meta.metadata['type'] == 'pcolorbuffer': | ||
r5 | kwargs['setup_form'] = RTISetupForm() | |||
|
r21 | kwargs['fn_plot'] = 'PcolorBuffer' | ||
return render(request, 'plot.html', kwargs) | ||||
|
r27 | elif meta.metadata['type'] == 'pcolor': | ||
r5 | kwargs['setup_form'] = SPCSetupForm() | |||
|
r21 | kwargs['fn_plot'] = 'Pcolor' | ||
return render(request, 'plot.html', kwargs) | ||||
|
r31 | elif meta.metadata['type'] == 'scatterbuffer': | ||
r5 | kwargs['setup_form'] = ScatterSetupForm() | |||
|
r31 | kwargs['fn_plot'] = 'ScatterBuffer' | ||
|
r21 | return render(request, 'plot.html', kwargs) | ||
r0 | else: | |||
|
r11 | return render(request, 'home.html', {}) | ||
|
r30 | def plot_skynoise(request): | ||
date = request.GET.get('date', None) | ||||
if date is None: | ||||
date = datetime.now() | ||||
else: | ||||
date = datetime.strptime(date, '%d-%m-%Y') | ||||
data = skynoise_plot(date.year, date.month, date.day) | ||||
response = HttpResponse(data.getvalue(), content_type='image/png') | ||||
|
r31 | |||
|
r30 | return response | ||