views.py
239 lines
| 7.3 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 = {} | ||
|
r22 | date = request.GET.get('date', datetime.now().strftime('%d-%m-%Y')) | |
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 | |||
dt = datetime.now() | |||
t = time.mktime(dt.timetuple()) | |||
t -= 5*60*60 | |||
if (t-exp['last_time']) > 6*exp['interval']: | |||
status = 'Offline' | |||
clase = 'alertas-offline' | |||
style = 'danger' | |||
lastDataDate = exp['last_time'] | |||
elif (t-exp['last_time']) > 3*exp['interval']: | |||
status = 'Delayed' | |||
clase = 'alertas-delayed' | |||
style = 'warning' | |||
lastDataDate = exp['last_time'] | |||
else: | |||
status = 'Online' | |||
clase = 'alertas-online' | |||
style = 'success' | |||
lastDataDate = exp['last_time'] | |||
dum['status'] = status | |||
dum['class'] = clase | |||
dum['style']= style | |||
dum['date']= datetime.utcfromtimestamp(lastDataDate) | |||
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 | |||
r4 | kwargs['date'] = date | ||
|
r39 | ||
|
r36 | kwargs['title'] = 'Realtime Experiments at JRO' | |
|
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 = { | |||
|
r35 | 'title': 'Tools' | |
|
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: | |||
|
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) | |||
|
r39 | ||
|
r11 | kwargs = { | |
'code': code, | |||
'plot': plot, | |||
|
r27 | 'meta':meta, | |
|
r11 | 'date': date, | |
|
r22 | 'id': meta.pk, | |
|
r21 | 'realtime': realtime, | |
|
r39 | 'title': 'Realtime Experiments at JRO', | |
'name' : exp.name, | |||
'sidebar': True, | |||
'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') | |||
return response |