views.py
238 lines
| 7.2 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. | |||
|
r39 | def main(request, tag=None): | ||
r0 | ||||
r4 | kwargs = {} | |||
r45 | date = request.GET.get('date', datetime.now().strftime('%d-%m-%Y')) | |||
|
r22 | exps = ExpDetail.objects(date=datetime.strptime(date, '%d-%m-%Y')) | ||
|
r11 | |||
|
r39 | tmp = {} | ||
|
r11 | for exp in exps: | ||
|
r39 | label = exp.tag.lower().strip() if exp.tag else 'other' | ||
if label in tmp: | ||||
tmp[label] += 1 | ||||
else: | ||||
tmp[label] = 1 | ||||
tags = [] | ||||
for key, value in tmp.items(): | ||||
if tag == key: | ||||
tags.append({'name': key, 'n': tmp[key], 'active': 'active'}) | ||||
|
r11 | else: | ||
|
r39 | tags.append({'name': key, 'n': tmp[key]}) | ||
kwargs['tags'] = tags | ||||
r4 | ||||
|
r39 | if tag: | ||
experiments = [] | ||||
for exp in exps: | ||||
label = exp.tag.lower().strip() if exp.tag else 'other' | ||||
if label != tag: | ||||
continue | ||||
dum = {} | ||||
dum['code'] = exp.experiment.code | ||||
dum['plots'] = [] | ||||
dum['name'] = exp.experiment.name | ||||
|
r44 | |||
t = time.time() | ||||
|
r39 | |||
if (t-exp['last_time']) > 6*exp['interval']: | ||||
status = 'Offline' | ||||
clase = 'alertas-offline' | ||||
style = 'danger' | ||||
elif (t-exp['last_time']) > 3*exp['interval']: | ||||
status = 'Delayed' | ||||
clase = 'alertas-delayed' | ||||
style = 'warning' | ||||
else: | ||||
status = 'Online' | ||||
clase = 'alertas-online' | ||||
style = 'success' | ||||
dum['status'] = status | ||||
dum['class'] = clase | ||||
dum['style']= style | ||||
|
r44 | dum['date']= datetime.fromtimestamp(exp['last_time']) | ||
|
r39 | for plot in exp.plots(): | ||
dum['plots'].append({'plot': plot.plot, 'name': plot.plot.replace('_', ' ').title(), 'id':plot.id}) | ||||
experiments.append(dum) | ||||
kwargs['experiments'] = experiments | ||||
|
r43 | kwargs['tag'] = tag | ||
|
r39 | |||
|
r41 | kwargs['date'] = date | ||
kwargs['title'] = 'Home' | ||||
|
r39 | kwargs['sidebar'] = True | ||
|
r11 | |||
return render(request, 'home.html', kwargs) | ||||
|
r35 | def about(request): | ||
''' | ||||
''' | ||||
kwargs = { | ||||
'title': 'About' | ||||
} | ||||
|
r36 | return render(request, 'about.html', kwargs) | ||
|
r35 | |||
|
r25 | def tools(request): | ||
''' | ||||
''' | ||||
kwargs = { | ||||
|
r44 | 'title': 'Tools', | ||
'doy': (datetime.today().date()-datetime.today().date().replace(month=1, day=1)).days + 1 | ||||
|
r25 | } | ||
return render(request, 'tools.html', kwargs) | ||||
def reports(request): | ||||
''' | ||||
''' | ||||
kwargs = { | ||||
|
r35 | 'title': 'Reports', | ||
|
r25 | } | ||
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: | ||||
r45 | 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) | ||||
|
r43 | tag = detail.tag.lower().strip() if detail.tag else 'other' | ||
|
r11 | kwargs = { | ||
'code': code, | ||||
'plot': plot, | ||||
|
r27 | 'meta':meta, | ||
|
r11 | 'date': date, | ||
|
r22 | 'id': meta.pk, | ||
|
r21 | 'realtime': realtime, | ||
|
r41 | 'title': 'Home', | ||
|
r39 | 'name' : exp.name, | ||
'sidebar': True, | ||||
|
r43 | 'tag' : tag, | ||
|
r39 | 'plots': [] | ||
|
r11 | } | ||
|
r39 | |||
for plt in detail.plots(): | ||||
kwargs['plots'].append({'plot': plt.plot, 'name': plt.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) | ||
|
r36 | elif meta.metadata['type'] == 'image': | ||
kwargs['image'] = True | ||||
kwargs['fn_plot'] = 'StaticPlot' | ||||
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: | ||||
|
r39 | date = datetime.strptime(date, '%Y-%m-%d') | ||
|
r30 | |||
data = skynoise_plot(date.year, date.month, date.day) | ||||
response = HttpResponse(data.getvalue(), content_type='image/png') | ||||
|
r31 | |||
|
r30 | return response | ||
|
r39 | |||
def plot_overjro(request): | ||||
date = request.GET.get('date', None) | ||||
if date is None: | ||||
date = datetime.now() | ||||
else: | ||||
date = datetime.strptime(date, '%Y-%m-%d') | ||||
data = skynoise_plot(date.year, date.month, date.day) | ||||
response = HttpResponse(data.getvalue(), content_type='image/png') | ||||
r45 | return response | |||