@@ -1,139 +1,138 | |||||
1 | #!/usr/bin/python |
|
1 | #!/usr/bin/python | |
2 | # -*- coding: UTF-8 -*- |
|
2 | # -*- coding: UTF-8 -*- | |
3 | import os |
|
3 | import os | |
4 | import json |
|
4 | import json | |
5 | import simplejson |
|
5 | import simplejson | |
6 | from datetime import datetime, timedelta |
|
6 | from datetime import datetime, timedelta | |
7 | import numpy |
|
7 | import numpy | |
8 | from pymongo import MongoClient |
|
8 | from pymongo import MongoClient | |
9 | # import mongoengine |
|
9 | # import mongoengine | |
10 | from asgiref.sync import async_to_sync |
|
10 | from asgiref.sync import async_to_sync | |
11 | from channels.generic.websocket import WebsocketConsumer |
|
11 | from channels.generic.websocket import WebsocketConsumer | |
12 |
|
12 | |||
13 | # from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData |
|
13 | # from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData | |
14 |
|
14 | |||
15 | # Here we create the db named "dbplots" |
|
15 | # Here we create the db named "dbplots" | |
16 | host = os.environ.get('HOST_MONGO', 'localhost') |
|
16 | host = os.environ.get('HOST_MONGO', 'localhost') | |
17 | # mongoengine.connect('dbplots', host=host, port=27017) |
|
17 | # mongoengine.connect('dbplots', host=host, port=27017) | |
18 |
|
18 | |||
19 | CLIENT = MongoClient('{}:27017'.format(host)) |
|
19 | CLIENT = MongoClient('{}:27017'.format(host)) | |
20 | DB = CLIENT['dbplots'] |
|
20 | DB = CLIENT['dbplots'] | |
21 |
|
21 | |||
22 | class MainConsumer(WebsocketConsumer): |
|
22 | class MainConsumer(WebsocketConsumer): | |
23 |
|
23 | |||
24 | def connect(self): |
|
24 | def connect(self): | |
25 | self.group_name = 'main' |
|
25 | self.group_name = 'main' | |
26 | async_to_sync(self.channel_layer.group_add)( |
|
26 | async_to_sync(self.channel_layer.group_add)( | |
27 | self.group_name, |
|
27 | self.group_name, | |
28 | self.channel_name |
|
28 | self.channel_name | |
29 | ) |
|
29 | ) | |
30 | self.accept() |
|
30 | self.accept() | |
31 |
|
31 | |||
32 | def disconnect(self, close_code): |
|
32 | def disconnect(self, close_code): | |
33 | async_to_sync(self.channel_layer.group_discard)( |
|
33 | async_to_sync(self.channel_layer.group_discard)( | |
34 | self.group_name, |
|
34 | self.group_name, | |
35 | self.channel_name |
|
35 | self.channel_name | |
36 | ) |
|
36 | ) | |
37 |
|
37 | |||
38 | def receive(self, text_data): |
|
38 | def receive(self, text_data): | |
39 | pass |
|
39 | pass | |
40 |
|
40 | |||
41 | def zmq_message(self, event): |
|
41 | def zmq_message(self, event): | |
42 | # Send message to WebSocket |
|
42 | # Send message to WebSocket | |
43 | self.send(text_data=event['message']) |
|
43 | self.send(text_data=event['message']) | |
44 |
|
44 | |||
45 | class PlotConsumer(WebsocketConsumer): |
|
45 | class PlotConsumer(WebsocketConsumer): | |
46 |
|
46 | |||
47 | def connect(self): |
|
47 | def connect(self): | |
48 |
|
48 | |||
49 | if 'realtime' in self.scope['path']: |
|
49 | if 'realtime' in self.scope['path']: | |
50 | self.realtime = True |
|
50 | self.realtime = True | |
51 | self.group_name = '{}_{}'.format( |
|
51 | self.group_name = '{}_{}'.format( | |
52 | self.scope['url_route']['kwargs']['code'], |
|
52 | self.scope['url_route']['kwargs']['code'], | |
53 | self.scope['url_route']['kwargs']['plot'], |
|
53 | self.scope['url_route']['kwargs']['plot'], | |
54 | ) |
|
54 | ) | |
55 |
|
55 | |||
56 | async_to_sync(self.channel_layer.group_add)( |
|
56 | async_to_sync(self.channel_layer.group_add)( | |
57 | self.group_name, |
|
57 | self.group_name, | |
58 | self.channel_name |
|
58 | self.channel_name | |
59 | ) |
|
59 | ) | |
60 | else: |
|
60 | else: | |
61 | self.realtime = False |
|
61 | self.realtime = False | |
62 | self.accept() |
|
62 | self.accept() | |
63 |
|
63 | |||
64 | def disconnect(self, close_code): |
|
64 | def disconnect(self, close_code): | |
65 |
|
65 | |||
66 | if self.realtime: |
|
66 | if self.realtime: | |
67 | async_to_sync(self.channel_layer.group_discard)( |
|
67 | async_to_sync(self.channel_layer.group_discard)( | |
68 | self.group_name, |
|
68 | self.group_name, | |
69 | self.channel_name |
|
69 | self.channel_name | |
70 | ) |
|
70 | ) | |
71 |
|
71 | |||
72 | def receive(self, text_data): |
|
72 | def receive(self, text_data): | |
73 | ret = {} |
|
73 | ret = {} | |
74 | dt = datetime.strptime(text_data, '%d-%m-%Y') |
|
74 | dt = datetime.strptime(text_data, '%d-%m-%Y') | |
75 | code = self.scope['url_route']['kwargs']['code'] |
|
75 | code = self.scope['url_route']['kwargs']['code'] | |
76 | plot = self.scope['url_route']['kwargs']['plot'] |
|
76 | plot = self.scope['url_route']['kwargs']['plot'] | |
77 | exp = DB.experiment.find_one({'code': int(code)}) |
|
77 | exp = DB.experiment.find_one({'code': int(code)}) | |
78 | det0 = DB.exp_detail.find_one({ |
|
78 | det0 = DB.exp_detail.find_one({ | |
79 | 'experiment': exp['_id'], |
|
79 | 'experiment': exp['_id'], | |
80 | 'date': dt-timedelta(days=1) |
|
80 | 'date': dt-timedelta(days=1) | |
81 | }) |
|
81 | }) | |
82 | det1 = DB.exp_detail.find_one({ |
|
82 | det1 = DB.exp_detail.find_one({ | |
83 | 'experiment': exp['_id'], |
|
83 | 'experiment': exp['_id'], | |
84 | 'date': dt |
|
84 | 'date': dt | |
85 | }) |
|
85 | }) | |
86 |
|
86 | |||
87 | if det1: |
|
87 | if det1: | |
88 | meta1 = DB.plot_meta.find_one({ |
|
88 | meta1 = DB.plot_meta.find_one({ | |
89 | 'exp_detail': det1['_id'], |
|
89 | 'exp_detail': det1['_id'], | |
90 | 'plot': plot |
|
90 | 'plot': plot | |
91 | }) |
|
91 | }) | |
92 | if meta1: |
|
92 | if meta1: | |
93 | if meta1['metadata']['type'] in ('pcolor', 'image', 'scatter', 'scattermap'): |
|
93 | if meta1['metadata']['type'] in ('pcolor', 'image', 'scatter', 'scattermap'): | |
94 | datas = DB.plot_data.find( |
|
94 | datas = DB.plot_data.find( | |
95 | {'plot': meta1['_id']}, |
|
95 | {'plot': meta1['_id']}, | |
96 | ['time', 'data'], |
|
96 | ['time', 'data'], | |
97 | sort=[('time', -1)], |
|
97 | sort=[('time', -1)], | |
98 | limit=1)[0] |
|
98 | limit=1)[0] | |
99 | ret['time'] = [datas['time']] |
|
99 | ret['time'] = [datas['time']] | |
100 | ret['data'] = datas['data'] |
|
100 | ret['data'] = datas['data'] | |
101 | ret['metadata'] = meta1['metadata'] |
|
101 | ret['metadata'] = meta1['metadata'] | |
102 | else: |
|
102 | else: | |
103 | last = det1['last_time'] |
|
103 | last = det1['last_time'] | |
104 | metas = [meta1['_id']] |
|
104 | metas = [meta1['_id']] | |
105 | if det0: |
|
105 | if det0: | |
106 | meta0 = DB.plot_meta.find_one({ |
|
106 | meta0 = DB.plot_meta.find_one({ | |
107 | 'exp_detail': det0['_id'], |
|
107 | 'exp_detail': det0['_id'], | |
108 | 'plot': plot |
|
108 | 'plot': plot | |
109 | }) |
|
109 | }) | |
110 | if meta0: |
|
110 | if meta0: | |
111 | metas.append(meta0['_id']) |
|
111 | metas.append(meta0['_id']) | |
112 | total = DB.plot_data.count_documents({ |
|
112 | total = DB.plot_data.count_documents({ | |
113 | 'plot': {'$in': metas}, |
|
113 | 'plot': {'$in': metas}, | |
114 | 'time': {'$gt': last-12*60*60} |
|
114 | 'time': {'$gt': last-12*60*60} | |
115 | }) |
|
115 | }) | |
116 | skip = 0 if total-720<0 else total-720 |
|
116 | skip = 0 if total-720<0 else total-720 | |
117 | datas = DB.plot_data.find({ |
|
117 | datas = DB.plot_data.find({ | |
118 | 'plot': {'$in': metas}, |
|
118 | 'plot': {'$in': metas}, | |
119 | 'time': {'$gt': last-12*60*60} |
|
119 | 'time': {'$gt': last-12*60*60} | |
120 | }, ['time', 'data'], sort=[('time', 1)], limit=720, skip=skip) |
|
120 | }, ['time', 'data'], sort=[('time', 1)], limit=720, skip=skip) | |
121 |
|
121 | |||
122 | dum = [(d['time'], d['data']) for d in datas] |
|
122 | dum = [(d['time'], d['data']) for d in datas] | |
123 | ret['time'] = [d[0] for d in dum] |
|
123 | ret['time'] = [d[0] for d in dum] | |
124 | dum = numpy.array([d[1] for d in dum]) |
|
124 | dum = numpy.array([d[1] for d in dum]) | |
125 |
|
125 | |||
126 | #if len(dum[0][0])==1: |
|
126 | #if len(dum[0][0])==1: | |
127 | # ret['data'] = dum.T[0].tolist() |
|
127 | # ret['data'] = dum.T[0].tolist() | |
128 | #else: |
|
128 | #else: | |
129 | ret['data'] = [t for t in map(list, list(zip(*dum.tolist())))] |
|
129 | ret['data'] = [t for t in map(list, list(zip(*dum.tolist())))] | |
130 | print(ret['data']) |
|
|||
131 | ret['metadata'] = meta1['metadata'] |
|
130 | ret['metadata'] = meta1['metadata'] | |
132 |
|
131 | |||
133 | self.send(simplejson.dumps(ret, ignore_nan=True)) |
|
132 | self.send(simplejson.dumps(ret, ignore_nan=True)) | |
134 | else: |
|
133 | else: | |
135 | self.send(json.dumps({'interval': 0})) |
|
134 | self.send(json.dumps({'interval': 0})) | |
136 |
|
135 | |||
137 | def zmq_message(self, event): |
|
136 | def zmq_message(self, event): | |
138 | # Send message to WebSocket |
|
137 | # Send message to WebSocket | |
139 | self.send(text_data=event['message']) |
|
138 | self.send(text_data=event['message']) |
@@ -1,37 +1,37 | |||||
1 | {% load static %} {% load bootstrap4 %} |
|
1 | {% load static %} {% load bootstrap4 %} | |
2 | <footer> |
|
2 | <footer> | |
3 | <div class="container"> |
|
3 | <div class="container"> | |
4 |
|
|
4 | <div class="row"> | |
5 | <div class="col-12 col-lg-6"> |
|
5 | <div class="col-12 col-lg-6"> | |
6 | <div class="footer-tittle">RADIO OBSERVATORIO DE JICAMARCA</div> |
|
6 | <div class="footer-tittle">RADIO OBSERVATORIO DE JICAMARCA</div> | |
7 | <ul class="footer-contact"> |
|
7 | <ul class="footer-contact"> | |
8 | <li>Lunes a Jueves de 7:50 a 17:50</li> |
|
8 | <li>Lunes a Jueves de 7:50 a 17:50</li> | |
9 | <li>Lurigancho-Chosica S/N, Lima 15464 β PerΓΊ</li> |
|
9 | <li>Lurigancho-Chosica S/N, Lima 15464 β PerΓΊ</li> | |
10 | <li>roj@igp.gob.pe</li> |
|
10 | <li>roj@igp.gob.pe</li> | |
11 | <li>+51 1317-2313</li> |
|
11 | <li>+51 1317-2313</li> | |
12 | </ul> |
|
12 | </ul> | |
13 | </div> |
|
13 | </div> | |
14 |
<div class="col-12 col-lg- |
|
14 | <div class="col-12 col-lg-6"> | |
15 | <div class="footer-tittle">SOCIAL</div> |
|
15 | <div class="footer-tittle">SOCIAL</div> | |
16 | <div class="row"> |
|
16 | <div class="row"> | |
17 | <div class="col-6"> |
|
17 | <div class="col-6"> | |
18 | <ul class="footer-social"> |
|
18 | <ul class="footer-social"> | |
19 | <li><a href="https://www.facebook.com/igp.peru" target="_blank"><i class="fab fa-facebook-square fa-lg" aria-hidden="true"></i> Facebook</a></li> |
|
19 | <li><a href="https://www.facebook.com/igp.peru" target="_blank"><i class="fab fa-facebook-square fa-lg" aria-hidden="true"></i> Facebook</a></li> | |
20 | <li><a href="https://twitter.com/igp_peru" target="_blank"><i class="fab fa-twitter-square fa-lg" aria-hidden="true"></i> Twitter</a></li> |
|
20 | <li><a href="https://twitter.com/igp_peru" target="_blank"><i class="fab fa-twitter-square fa-lg" aria-hidden="true"></i> Twitter</a></li> | |
21 | <li><a href="https://www.instagram.com/igp.peru" target="_blank"><i class="fab fa-instagram fa-lg" aria-hidden="true"></i> Instagram</a></li> |
|
21 | <li><a href="https://www.instagram.com/igp.peru" target="_blank"><i class="fab fa-instagram fa-lg" aria-hidden="true"></i> Instagram</a></li> | |
22 | </ul> |
|
22 | </ul> | |
23 | </div> |
|
23 | </div> | |
24 | <div class="col-6"> |
|
24 | <div class="col-6"> | |
25 | <ul class="footer-social"> |
|
25 | <ul class="footer-social"> | |
26 | <li><a href="https://www.youtube.com/igp_videos" target="_blank"><i class="fab fa-youtube-square fa-lg" aria-hidden="true"></i> YouTube</a></li> |
|
26 | <li><a href="https://www.youtube.com/igp_videos" target="_blank"><i class="fab fa-youtube-square fa-lg" aria-hidden="true"></i> YouTube</a></li> | |
27 | <li><a href="https://www.linkedin.com/company/igpperu/" target="_blank"><i class="fab fa-linkedin fa-lg" aria-hidden="true"></i> Linkedin</a></li> |
|
27 | <li><a href="https://www.linkedin.com/company/igpperu/" target="_blank"><i class="fab fa-linkedin fa-lg" aria-hidden="true"></i> Linkedin</a></li> | |
28 | </ul> |
|
28 | </ul> | |
29 | </div> |
|
29 | </div> | |
30 | </div> |
|
30 | </div> | |
31 | </div> |
|
31 | </div> | |
32 | <div class="col-12 col-lg-2"> |
|
32 | <!-- div class="col-12 col-lg-2"> | |
33 | <img src="{% static 'images/siempre-con-el-pueblo-bn-small.png' %}" class="img-fluid"> |
|
33 | <img src="{% static 'images/siempre-con-el-pueblo-bn-small.png' %}" class="img-fluid"> | |
34 | </div> |
|
34 | </div --> | |
35 |
|
|
35 | </div> | |
36 | </div> |
|
36 | </div> | |
37 | </footer> |
|
37 | </footer> |
@@ -1,423 +1,423 | |||||
1 | #!/usr/bin/python |
|
1 | #!/usr/bin/python | |
2 | # -*- coding: UTF-8 -*- |
|
2 | # -*- coding: UTF-8 -*- | |
3 |
|
3 | |||
4 |
|
4 | |||
5 | import os |
|
5 | import os | |
6 | import time |
|
6 | import time | |
7 | from datetime import datetime, timedelta |
|
7 | from datetime import datetime, timedelta | |
8 |
|
8 | |||
9 | from django import forms |
|
9 | from django import forms | |
10 | from django.contrib import messages |
|
10 | from django.contrib import messages | |
11 | from django.utils.safestring import mark_safe |
|
11 | from django.utils.safestring import mark_safe | |
12 | from django.shortcuts import render |
|
12 | from django.shortcuts import render | |
13 | from django.http import HttpResponse |
|
13 | from django.http import HttpResponse | |
14 | from django.db.models import Q |
|
14 | from django.db.models import Q | |
15 | from django.contrib.auth.decorators import login_required |
|
15 | from django.contrib.auth.decorators import login_required | |
16 |
|
16 | |||
17 | import mongoengine |
|
17 | import mongoengine | |
18 | from pymongo import MongoClient |
|
18 | from pymongo import MongoClient | |
19 |
|
19 | |||
20 | from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData, JROReport, JROExperiment |
|
20 | from plotter.models import Experiment, ExpDetail, PlotMeta, PlotData, JROReport, JROExperiment | |
21 |
|
21 | |||
22 | from utils.plots import skynoise_plot, overjro_plot, antennacuts_plot, muf_plot, get_options_MUF |
|
22 | from utils.plots import skynoise_plot, overjro_plot, antennacuts_plot, muf_plot, get_options_MUF | |
23 |
|
23 | |||
24 | host = os.environ.get('HOST_MONGO', 'localhost') |
|
24 | host = os.environ.get('HOST_MONGO', 'localhost') | |
25 | mongoengine.connect('dbplots', host=host, port=27017) |
|
25 | mongoengine.connect('dbplots', host=host, port=27017) | |
26 |
|
26 | |||
27 | CLIENT = MongoClient('{}:27017'.format(host)) |
|
27 | CLIENT = MongoClient('{}:27017'.format(host)) | |
28 | DB = CLIENT['dbplots'] |
|
28 | DB = CLIENT['dbplots'] | |
29 |
|
29 | |||
30 |
|
30 | |||
31 | # Forms |
|
31 | # Forms | |
32 | class SearchForm(forms.Form): |
|
32 | class SearchForm(forms.Form): | |
33 |
|
33 | |||
34 | experiment = forms.ChoiceField() |
|
34 | experiment = forms.ChoiceField() | |
35 | plot = forms.ChoiceField() |
|
35 | plot = forms.ChoiceField() | |
36 |
|
36 | |||
37 | def __init__(self, *args, **kwargs): |
|
37 | def __init__(self, *args, **kwargs): | |
38 |
|
38 | |||
39 | exp_choices = kwargs.pop('exp_choices', []) |
|
39 | exp_choices = kwargs.pop('exp_choices', []) | |
40 | plt_choices = kwargs.pop('plt_choices', []) |
|
40 | plt_choices = kwargs.pop('plt_choices', []) | |
41 | super(SearchForm, self).__init__(*args, **kwargs) |
|
41 | super(SearchForm, self).__init__(*args, **kwargs) | |
42 | self.fields['experiment'].choices = [(0, 'Select Experiment')] + exp_choices |
|
42 | self.fields['experiment'].choices = [(0, 'Select Experiment')] + exp_choices | |
43 | self.fields['plot'].choices = [(0, 'Select Plot')] + plt_choices |
|
43 | self.fields['plot'].choices = [(0, 'Select Plot')] + plt_choices | |
44 | # we use this class to change the parameter in Scatter plot using the function plotly.restyle in jroplot.js |
|
44 | # we use this class to change the parameter in Scatter plot using the function plotly.restyle in jroplot.js | |
45 | class ScatterSetupForm(forms.Form): |
|
45 | class ScatterSetupForm(forms.Form): | |
46 |
|
46 | |||
47 | plotdiv = forms.CharField(widget=forms.HiddenInput()) |
|
47 | plotdiv = forms.CharField(widget=forms.HiddenInput()) | |
48 | ymax = forms.CharField(initial=30) |
|
48 | ymax = forms.CharField(initial=30) | |
49 | ymin = forms.CharField(initial=10) |
|
49 | ymin = forms.CharField(initial=10) | |
50 |
|
50 | |||
51 | # we use this class to change the parameter in RTI plot using the function plotly.restyle in jroplot.js |
|
51 | # we use this class to change the parameter in RTI plot using the function plotly.restyle in jroplot.js | |
52 | class RTISetupForm(forms.Form): |
|
52 | class RTISetupForm(forms.Form): | |
53 |
|
53 | |||
54 | plotdiv = forms.CharField(widget=forms.HiddenInput()) |
|
54 | plotdiv = forms.CharField(widget=forms.HiddenInput()) | |
55 | colormap = forms.ChoiceField(choices=[('Jet', 'Jet'), ('Viridis', 'Viridis'), ('RdBu', 'RdBu')]) |
|
55 | colormap = forms.ChoiceField(choices=[('Jet', 'Jet'), ('Viridis', 'Viridis'), ('RdBu', 'RdBu')]) | |
56 | zmax = forms.CharField(initial=30) |
|
56 | zmax = forms.CharField(initial=30) | |
57 | zmin = forms.CharField(initial=10) |
|
57 | zmin = forms.CharField(initial=10) | |
58 | ymax = forms.CharField(initial=180) |
|
58 | ymax = forms.CharField(initial=180) | |
59 | ymin = forms.CharField(initial=80) |
|
59 | ymin = forms.CharField(initial=80) | |
60 |
|
60 | |||
61 | # we use this class to change the parameter in SPC plot using the function plotly.restyle in jroplot.js |
|
61 | # we use this class to change the parameter in SPC plot using the function plotly.restyle in jroplot.js | |
62 | class SPCSetupForm(forms.Form): |
|
62 | class SPCSetupForm(forms.Form): | |
63 |
|
63 | |||
64 | plotdiv = forms.CharField(widget=forms.HiddenInput()) |
|
64 | plotdiv = forms.CharField(widget=forms.HiddenInput()) | |
65 | colormap = forms.ChoiceField(choices=[('Jet', 'Jet'), ('Viridis', 'Viridis'), ('RdBu', 'RdBu')]) |
|
65 | colormap = forms.ChoiceField(choices=[('Jet', 'Jet'), ('Viridis', 'Viridis'), ('RdBu', 'RdBu')]) | |
66 | #como es un perfil xmin y xmax deben ser iguales a zmin y zmax |
|
66 | #como es un perfil xmin y xmax deben ser iguales a zmin y zmax | |
67 | xmax = forms.CharField(initial=30) |
|
67 | xmax = forms.CharField(initial=30) | |
68 | xmin = forms.CharField(initial=10) |
|
68 | xmin = forms.CharField(initial=10) | |
69 | #x2max = forms.CharField(initial=30) |
|
69 | #x2max = forms.CharField(initial=30) | |
70 | #x2min = forms.CharField(initial=10) |
|
70 | #x2min = forms.CharField(initial=10) | |
71 | ymax = forms.CharField(initial=180) |
|
71 | ymax = forms.CharField(initial=180) | |
72 | ymin = forms.CharField(initial=80) |
|
72 | ymin = forms.CharField(initial=80) | |
73 | zmax = forms.CharField(initial=30) |
|
73 | zmax = forms.CharField(initial=30) | |
74 | zmin = forms.CharField(initial=10) |
|
74 | zmin = forms.CharField(initial=10) | |
75 |
|
75 | |||
76 | # Create your views here. |
|
76 | # Create your views here. | |
77 | def main(request, tag=None): |
|
77 | def main(request, tag=None): | |
78 |
|
78 | |||
79 | kwargs = {} |
|
79 | kwargs = {} | |
80 | date = request.GET.get('date', datetime.now().strftime('%d-%m-%Y')) |
|
80 | date = request.GET.get('date', datetime.now().strftime('%d-%m-%Y')) | |
81 | exps = ExpDetail.objects(date=datetime.strptime(date, '%d-%m-%Y')).order_by('tag') |
|
81 | exps = ExpDetail.objects(date=datetime.strptime(date, '%d-%m-%Y')).order_by('tag') | |
82 |
|
82 | |||
83 | tmp = {} |
|
83 | tmp = {} | |
84 | for exp in exps: |
|
84 | for exp in exps: | |
85 | label = exp.tag.lower().strip() if exp.tag else 'other' |
|
85 | label = exp.tag.lower().strip() if exp.tag else 'other' | |
86 | if label in tmp: |
|
86 | if label in tmp: | |
87 | tmp[label] += 1 |
|
87 | tmp[label] += 1 | |
88 | else: |
|
88 | else: | |
89 | tmp[label] = 1 |
|
89 | tmp[label] = 1 | |
90 | tags = [] |
|
90 | tags = [] | |
91 |
|
91 | |||
92 | for key, value in tmp.items(): |
|
92 | for key, value in tmp.items(): | |
93 | if tag == key: |
|
93 | if tag == key: | |
94 | tags.append({'name': key, 'n': tmp[key], 'active': 'primary'}) |
|
94 | tags.append({'name': key, 'n': tmp[key], 'active': 'primary'}) | |
95 | else: |
|
95 | else: | |
96 | tags.append({'name': key, 'n': tmp[key], 'active': 'secondary'}) |
|
96 | tags.append({'name': key, 'n': tmp[key], 'active': 'secondary'}) | |
97 |
|
97 | |||
98 | tags.sort(key= lambda x: x['name']) |
|
98 | tags.sort(key= lambda x: x['name']) | |
99 | kwargs['tags'] = tags |
|
99 | kwargs['tags'] = tags | |
100 |
|
100 | |||
101 | if tags and tag is None: |
|
101 | if tags and tag is None: | |
102 | if 'jicamarca' in [t['name'] for t in tags]: |
|
102 | if 'jicamarca' in [t['name'] for t in tags]: | |
103 | tag = 'jicamarca' |
|
103 | tag = 'jicamarca' | |
104 | elif 'julia' in [t['name'] for t in tags]: |
|
104 | elif 'julia' in [t['name'] for t in tags]: | |
105 | tag = 'julia' |
|
105 | tag = 'julia' | |
106 | else: |
|
106 | else: | |
107 | tag = tags[0]['name'] |
|
107 | tag = tags[0]['name'] | |
108 |
|
108 | |||
109 | for t in tags: |
|
109 | for t in tags: | |
110 | if tag == t['name']: |
|
110 | if tag == t['name']: | |
111 | t['active'] = 'primary' |
|
111 | t['active'] = 'primary' | |
112 |
|
112 | |||
113 | experiments = [] |
|
113 | experiments = [] | |
114 |
|
114 | |||
115 | if tag: |
|
115 | if tag: | |
116 | for exp in exps: |
|
116 | for exp in exps: | |
117 | label = exp.tag.lower().strip() if exp.tag else 'other' |
|
117 | label = exp.tag.lower().strip() if exp.tag else 'other' | |
118 | if label != tag: |
|
118 | if label != tag: | |
119 | continue |
|
119 | continue | |
120 | dum = {} |
|
120 | dum = {} | |
121 | dum['code'] = exp.experiment.code |
|
121 | dum['code'] = exp.experiment.code | |
122 | dum['plots'] = [] |
|
122 | dum['plots'] = [] | |
123 | dum['name'] = exp.experiment.name |
|
123 | dum['name'] = exp.experiment.name | |
124 |
|
124 | |||
125 | t = time.time() |
|
125 | t = time.time() | |
126 |
|
126 | |||
127 | if (t-exp['last_time']) > 6*exp['interval']: |
|
127 | if (t-exp['last_time']) > 6*exp['interval']: | |
128 | status = 'Offline' |
|
128 | status = 'Offline' | |
129 | clase = 'alertas-offline' |
|
129 | clase = 'alertas-offline' | |
130 | style = 'danger' |
|
130 | style = 'danger' | |
131 | elif (t-exp['last_time']) > 3*exp['interval']: |
|
131 | elif (t-exp['last_time']) > 3*exp['interval']: | |
132 | status = 'Delayed' |
|
132 | status = 'Delayed' | |
133 | clase = 'alertas-delayed' |
|
133 | clase = 'alertas-delayed' | |
134 | style = 'warning' |
|
134 | style = 'warning' | |
135 | else: |
|
135 | else: | |
136 | status = 'Online' |
|
136 | status = 'Online' | |
137 | clase = 'alertas-online' |
|
137 | clase = 'alertas-online' | |
138 | style = 'success' |
|
138 | style = 'success' | |
139 |
|
139 | |||
140 | dum['status'] = status |
|
140 | dum['status'] = status | |
141 | dum['class'] = clase |
|
141 | dum['class'] = clase | |
142 | dum['style']= style |
|
142 | dum['style']= style | |
143 | dum['date']= datetime.fromtimestamp(exp['last_time']) |
|
143 | dum['date']= datetime.fromtimestamp(exp['last_time']) | |
144 | for plot in exp.plots(): |
|
144 | for plot in exp.plots(): | |
145 | dum['plots'].append({'plot': plot.plot, 'name': plot.plot.replace('_', ' ').title(), 'id':plot.id}) |
|
145 | dum['plots'].append({'plot': plot.plot, 'name': plot.plot.replace('_', ' ').title(), 'id':plot.id}) | |
146 | experiments.append(dum) |
|
146 | experiments.append(dum) | |
147 |
|
147 | |||
148 | kwargs['experiments'] = experiments |
|
148 | kwargs['experiments'] = experiments | |
149 | kwargs['tag'] = tag |
|
149 | kwargs['tag'] = tag | |
150 |
|
150 | |||
151 | kwargs['date'] = date |
|
151 | kwargs['date'] = date | |
152 | kwargs['title'] = 'Experiments' |
|
152 | kwargs['title'] = 'Experiments' | |
153 | kwargs['slide'] = 'slide-experiments.jpg' |
|
153 | kwargs['slide'] = 'slide-experiments.jpg' | |
154 | kwargs['info'] = 'On this page you can view the Radar Status and some Display of the current experiment' |
|
154 | kwargs['info'] = 'On this page you can view the Radar Status and some Display of the current experiment' | |
155 | if experiments: |
|
155 | if experiments: | |
156 | kwargs['sidebar'] = 'ok' |
|
156 | kwargs['sidebar'] = 'ok' | |
157 |
|
157 | |||
158 |
|
158 | |||
159 |
|
159 | |||
160 | return render(request, 'home.html', kwargs) |
|
160 | return render(request, 'home.html', kwargs) | |
161 |
|
161 | |||
162 | def about(request): |
|
162 | def about(request): | |
163 | ''' |
|
163 | ''' | |
164 | ''' |
|
164 | ''' | |
165 | kwargs = { |
|
165 | kwargs = { | |
166 | 'title': 'About', |
|
166 | 'title': 'About', | |
167 | 'slide': 'slide-about.png', |
|
167 | 'slide': 'slide-about.png', | |
168 | } |
|
168 | } | |
169 | return render(request, 'about.html', kwargs) |
|
169 | return render(request, 'about.html', kwargs) | |
170 |
|
170 | |||
171 |
|
171 | |||
172 | def tools(request): |
|
172 | def tools(request): | |
173 | ''' |
|
173 | ''' | |
174 | ''' |
|
174 | ''' | |
175 | kwargs = { |
|
175 | kwargs = { | |
176 | 'title': 'Tools', |
|
176 | 'title': 'Tools', | |
177 | 'doy': (datetime.today().date()-datetime.today().date().replace(month=1, day=1)).days + 1, |
|
177 | 'doy': (datetime.today().date()-datetime.today().date().replace(month=1, day=1)).days + 1, | |
178 | 'slide': 'slide-tools.png', |
|
178 | 'slide': 'slide-tools.png', | |
179 | 'info' : 'A list of useful programs for the Jicamarca Radio Observatory researchers' |
|
179 | 'info' : 'A list of useful programs for the Jicamarca Radio Observatory researchers' | |
180 | } |
|
180 | } | |
181 | return render(request, 'tools.html', kwargs) |
|
181 | return render(request, 'tools.html', kwargs) | |
182 |
|
182 | |||
183 | def reports(request): |
|
183 | def reports(request): | |
184 | ''' |
|
184 | ''' | |
185 | ''' |
|
185 | ''' | |
186 |
|
186 | |||
187 | q = request.GET.get('q', None) |
|
187 | q = request.GET.get('q', None) | |
188 | reports = JROReport.objects.all() |
|
188 | reports = JROReport.objects.all() | |
189 | years = reports.values_list('date__year').distinct() |
|
189 | years = reports.values_list('date__year').distinct() | |
190 |
|
190 | |||
191 | if q is not None: |
|
191 | if q is not None: | |
192 | if q == 'all': |
|
192 | if q == 'all': | |
193 | reports = reports.order_by('date') |
|
193 | reports = reports.order_by('date') | |
194 | else: |
|
194 | else: | |
195 | reports = reports.filter(Q(title__contains=q) | Q(description__contains=q)).order_by('date') |
|
195 | reports = reports.filter(Q(title__contains=q) | Q(description__contains=q)).order_by('date') | |
196 | else: |
|
196 | else: | |
197 | reports = reports.filter(date__year=datetime.now().year).order_by('date') |
|
197 | reports = reports.filter(date__year=datetime.now().year).order_by('date') | |
198 | q = str(datetime.now().year) |
|
198 | q = str(datetime.now().year) | |
199 |
|
199 | |||
200 | kwargs = { |
|
200 | kwargs = { | |
201 | 'title': 'Reports', |
|
201 | 'title': 'Reports', | |
202 | 'reports': reports, |
|
202 | 'reports': reports, | |
203 | 'slide': 'slide-reports.png', |
|
203 | 'slide': 'slide-reports.png', | |
204 | 'years': [str(y[0]) for y in years], |
|
204 | 'years': [str(y[0]) for y in years], | |
205 | 'q' : q, |
|
205 | 'q' : q, | |
206 | 'info' : 'Monthly reports of the status of the equatorial ionosphere.' |
|
206 | 'info' : 'Monthly reports of the status of the equatorial ionosphere.' | |
207 | } |
|
207 | } | |
208 |
|
208 | |||
209 | return render(request, 'reports.html', kwargs) |
|
209 | return render(request, 'reports.html', kwargs) | |
210 |
|
210 | |||
211 | def codes(request): |
|
211 | def codes(request): | |
212 | ''' |
|
212 | ''' | |
213 | ''' |
|
213 | ''' | |
214 |
|
214 | |||
215 | codes = JROExperiment.objects.all().order_by('code') |
|
215 | codes = JROExperiment.objects.all().order_by('code') | |
216 |
|
216 | |||
217 | kwargs = { |
|
217 | kwargs = { | |
218 | 'title': 'Codes', |
|
218 | 'title': 'Codes', | |
219 | 'codes': codes, |
|
219 | 'codes': codes, | |
220 | 'info' : 'Monthly reports of the status of the equatorial ionosphere.' |
|
220 | 'info' : 'Monthly reports of the status of the equatorial ionosphere.' | |
221 | } |
|
221 | } | |
222 |
|
222 | |||
223 | return render(request, 'codes.html', kwargs) |
|
223 | return render(request, 'codes.html', kwargs) | |
224 |
|
224 | |||
225 | def update_codes(request): |
|
225 | def update_codes(request): | |
226 | ''' |
|
226 | ''' | |
227 | ''' |
|
227 | ''' | |
228 |
|
228 | |||
229 | codes = JROExperiment.objects.all().order_by('code') |
|
229 | codes = JROExperiment.objects.all().order_by('code') | |
230 | for code in codes: |
|
230 | for code in codes: | |
231 |
|
231 | |||
232 | exp = Experiment.objects(code=code.code).modify( |
|
232 | exp = Experiment.objects(code=code.code).modify( | |
233 | upsert=True, # To add a new row |
|
233 | upsert=True, # To add a new row | |
234 | new=True, |
|
234 | new=True, | |
235 | set__code=code.code, |
|
235 | set__code=code.code, | |
236 | set__name=code.name, |
|
236 | set__name=code.name, | |
237 | ) |
|
237 | ) | |
238 | exp.save() |
|
238 | exp.save() | |
239 |
|
239 | |||
240 | return render(request, 'home.html', {}) |
|
240 | return render(request, 'home.html', {}) | |
241 |
|
241 | |||
242 | @login_required |
|
242 | @login_required | |
243 | def delete_data(request): |
|
243 | def delete_data(request): | |
244 | ''' |
|
244 | ''' | |
245 | ''' |
|
245 | ''' | |
246 |
|
246 | |||
247 | date = request.GET.get('date', None) |
|
247 | date = request.GET.get('date', None) | |
248 | code = request.GET.get('code', None) |
|
248 | code = request.GET.get('code', None) | |
249 |
|
249 | |||
250 | detail = ExpDetail.objects() |
|
250 | detail = ExpDetail.objects() | |
251 |
|
251 | |||
252 | if code is not None and date is not None: |
|
252 | if code is not None and date is not None: | |
253 | exp = Experiment.objects.get(code=int(code)) |
|
253 | exp = Experiment.objects.get(code=int(code)) | |
254 | detail = detail.filter(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y')) |
|
254 | detail = detail.filter(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y')) | |
255 | elif code is not None: |
|
255 | elif code is not None: | |
256 | exp = Experiment.objects.get(code=int(code)) |
|
256 | exp = Experiment.objects.get(code=int(code)) | |
257 | detail = detail.filter(experiment=exp) |
|
257 | detail = detail.filter(experiment=exp) | |
258 | elif date is not None: |
|
258 | elif date is not None: | |
259 | detail = detail.filter(date=datetime.strptime(date, '%d-%m-%Y')) |
|
259 | detail = detail.filter(date=datetime.strptime(date, '%d-%m-%Y')) | |
260 | else: |
|
260 | else: | |
261 |
detail = detail.filter(date__lt=datetime.today().date()-timedelta(days= |
|
261 | detail = detail.filter(date__lt=datetime.today().date()-timedelta(days=1)) | |
262 | metas = PlotMeta.objects(exp_detail__in=[x.pk for x in detail]) |
|
262 | metas = PlotMeta.objects(exp_detail__in=[x.pk for x in detail]) | |
263 | datas = PlotData.objects(plot__in=[x.pk for x in metas]) |
|
263 | datas = PlotData.objects(plot__in=[x.pk for x in metas]) | |
264 | d=datas.delete() |
|
264 | d=datas.delete() | |
265 | m=metas.delete() |
|
265 | m=metas.delete() | |
266 | t=detail.delete() |
|
266 | t=detail.delete() | |
267 |
|
267 | |||
268 | messages.error(request, 'Delete: {} data, {} meta, {} details'.format(d, m, t)) |
|
268 | messages.error(request, 'Delete: {} data, {} meta, {} details'.format(d, m, t)) | |
269 |
|
269 | |||
270 | return render(request, 'home.html', {}) |
|
270 | return render(request, 'home.html', {}) | |
271 |
|
271 | |||
272 |
|
272 | |||
273 | def plot(request, code=None, plot=None): |
|
273 | def plot(request, code=None, plot=None): | |
274 | ''' |
|
274 | ''' | |
275 | ''' |
|
275 | ''' | |
276 |
|
276 | |||
277 | realtime = False |
|
277 | realtime = False | |
278 | date = request.GET.get('date', None) |
|
278 | date = request.GET.get('date', None) | |
279 | if date is None: |
|
279 | if date is None: | |
280 | date = datetime.now().strftime('%d-%m-%Y') |
|
280 | date = datetime.now().strftime('%d-%m-%Y') | |
281 | realtime = True |
|
281 | realtime = True | |
282 | exp = Experiment.objects.get(code=int(code)) |
|
282 | exp = Experiment.objects.get(code=int(code)) | |
283 | detail = ExpDetail.objects.get(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y')) |
|
283 | detail = ExpDetail.objects.get(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y')) | |
284 | meta = PlotMeta.objects.get(exp_detail=detail, plot=plot) |
|
284 | meta = PlotMeta.objects.get(exp_detail=detail, plot=plot) | |
285 | tag = detail.tag.lower().strip() if detail.tag else 'other' |
|
285 | tag = detail.tag.lower().strip() if detail.tag else 'other' | |
286 |
|
286 | |||
287 | kwargs = { |
|
287 | kwargs = { | |
288 | 'code': code, |
|
288 | 'code': code, | |
289 | 'plot': plot, |
|
289 | 'plot': plot, | |
290 | 'meta':meta, |
|
290 | 'meta':meta, | |
291 | 'date': date, |
|
291 | 'date': date, | |
292 | 'id': meta.pk, |
|
292 | 'id': meta.pk, | |
293 | 'realtime': realtime, |
|
293 | 'realtime': realtime, | |
294 | 'title': 'Experiments', |
|
294 | 'title': 'Experiments', | |
295 | 'name' : exp.name, |
|
295 | 'name' : exp.name, | |
296 | 'sidebar': True, |
|
296 | 'sidebar': True, | |
297 | 'tag' : tag, |
|
297 | 'tag' : tag, | |
298 | 'plots': [], |
|
298 | 'plots': [], | |
299 | 'slide': 'slide-plot.jpg', |
|
299 | 'slide': 'slide-plot.jpg', | |
300 | } |
|
300 | } | |
301 |
|
301 | |||
302 | for plt in detail.plots(): |
|
302 | for plt in detail.plots(): | |
303 | kwargs['plots'].append({'plot': plt.plot, 'name': plt.plot.replace('_', ' ').title()}) |
|
303 | kwargs['plots'].append({'plot': plt.plot, 'name': plt.plot.replace('_', ' ').title()}) | |
304 |
|
304 | |||
305 | # Logic to show my views |
|
305 | # Logic to show my views | |
306 | if meta.metadata['type'] == 'pcolorbuffer': |
|
306 | if meta.metadata['type'] == 'pcolorbuffer': | |
307 | kwargs['setup_form'] = RTISetupForm() |
|
307 | kwargs['setup_form'] = RTISetupForm() | |
308 | kwargs['fn_plot'] = 'PcolorBuffer' |
|
308 | kwargs['fn_plot'] = 'PcolorBuffer' | |
309 | return render(request, 'plot.html', kwargs) |
|
309 | return render(request, 'plot.html', kwargs) | |
310 | elif meta.metadata['type'] == 'pcolor': |
|
310 | elif meta.metadata['type'] == 'pcolor': | |
311 | kwargs['setup_form'] = SPCSetupForm() |
|
311 | kwargs['setup_form'] = SPCSetupForm() | |
312 | kwargs['fn_plot'] = 'Pcolor' |
|
312 | kwargs['fn_plot'] = 'Pcolor' | |
313 | return render(request, 'plot.html', kwargs) |
|
313 | return render(request, 'plot.html', kwargs) | |
314 | elif meta.metadata['type'] == 'scatterbuffer': |
|
314 | elif meta.metadata['type'] == 'scatterbuffer': | |
315 | kwargs['setup_form'] = ScatterSetupForm() |
|
315 | kwargs['setup_form'] = ScatterSetupForm() | |
316 | kwargs['fn_plot'] = 'ScatterBuffer' |
|
316 | kwargs['fn_plot'] = 'ScatterBuffer' | |
317 | return render(request, 'plot.html', kwargs) |
|
317 | return render(request, 'plot.html', kwargs) | |
318 | elif meta.metadata['type'] == 'scatter': |
|
318 | elif meta.metadata['type'] == 'scatter': | |
319 | kwargs['setup_form'] = ScatterSetupForm() |
|
319 | kwargs['setup_form'] = ScatterSetupForm() | |
320 | kwargs['fn_plot'] = 'Scatter' |
|
320 | kwargs['fn_plot'] = 'Scatter' | |
321 | return render(request, 'plot.html', kwargs) |
|
321 | return render(request, 'plot.html', kwargs) | |
322 | elif meta.metadata['type'] == 'scattermap': |
|
322 | elif meta.metadata['type'] == 'scattermap': | |
323 | kwargs['setup_form'] = ScatterSetupForm() |
|
323 | kwargs['setup_form'] = ScatterSetupForm() | |
324 | kwargs['fn_plot'] = 'ScatterMap' |
|
324 | kwargs['fn_plot'] = 'ScatterMap' | |
325 | return render(request, 'plot.html', kwargs) |
|
325 | return render(request, 'plot.html', kwargs) | |
326 | elif meta.metadata['type'] == 'image': |
|
326 | elif meta.metadata['type'] == 'image': | |
327 | kwargs['image'] = True |
|
327 | kwargs['image'] = True | |
328 | kwargs['fn_plot'] = 'StaticPlot' |
|
328 | kwargs['fn_plot'] = 'StaticPlot' | |
329 | return render(request, 'plot.html', kwargs) |
|
329 | return render(request, 'plot.html', kwargs) | |
330 | else: |
|
330 | else: | |
331 | return render(request, 'home.html', {}) |
|
331 | return render(request, 'home.html', {}) | |
332 |
|
332 | |||
333 | def plot_skynoise(request): |
|
333 | def plot_skynoise(request): | |
334 |
|
334 | |||
335 | date = request.GET.get('date', None) |
|
335 | date = request.GET.get('date', None) | |
336 | if date is None: |
|
336 | if date is None: | |
337 | date = datetime.now() |
|
337 | date = datetime.now() | |
338 | else: |
|
338 | else: | |
339 | date = datetime.strptime(date, '%Y-%m-%d') |
|
339 | date = datetime.strptime(date, '%Y-%m-%d') | |
340 |
|
340 | |||
341 | data = skynoise_plot(date.year, date.month, date.day) |
|
341 | data = skynoise_plot(date.year, date.month, date.day) | |
342 | response = HttpResponse(data.getvalue(), content_type='image/png') |
|
342 | response = HttpResponse(data.getvalue(), content_type='image/png') | |
343 |
|
343 | |||
344 | return response |
|
344 | return response | |
345 |
|
345 | |||
346 | def plot_overjro(request): |
|
346 | def plot_overjro(request): | |
347 |
|
347 | |||
348 | date = request.GET.get('date', None) |
|
348 | date = request.GET.get('date', None) | |
349 | if date is None: |
|
349 | if date is None: | |
350 | date = datetime.now() |
|
350 | date = datetime.now() | |
351 | else: |
|
351 | else: | |
352 | date = datetime.strptime(date, '%Y-%m-%d') |
|
352 | date = datetime.strptime(date, '%Y-%m-%d') | |
353 |
|
353 | |||
354 | pattern = int(request.GET.get('experiment', '1')) |
|
354 | pattern = int(request.GET.get('experiment', '1')) | |
355 | angle = float(request.GET.get('angle', '5')) |
|
355 | angle = float(request.GET.get('angle', '5')) | |
356 | height = [float(h) for h in request.GET.get('height', '100').split(',')] |
|
356 | height = [float(h) for h in request.GET.get('height', '100').split(',')] | |
357 | bodys = (request.GET.get('bodys', '')).split(',') |
|
357 | bodys = (request.GET.get('bodys', '')).split(',') | |
358 |
|
358 | |||
359 | data = overjro_plot(pattern, date, angle, height, bodys) |
|
359 | data = overjro_plot(pattern, date, angle, height, bodys) | |
360 | response = HttpResponse(data.getvalue(), content_type='image/png') |
|
360 | response = HttpResponse(data.getvalue(), content_type='image/png') | |
361 |
|
361 | |||
362 | return response |
|
362 | return response | |
363 |
|
363 | |||
364 | def plot_antennacuts(request): |
|
364 | def plot_antennacuts(request): | |
365 |
|
365 | |||
366 | date = request.GET.get('date', None) |
|
366 | date = request.GET.get('date', None) | |
367 | if date is None: |
|
367 | if date is None: | |
368 | date = datetime.now() |
|
368 | date = datetime.now() | |
369 | else: |
|
369 | else: | |
370 | date = datetime.strptime(date, '%Y-%m-%d') |
|
370 | date = datetime.strptime(date, '%Y-%m-%d') | |
371 |
|
371 | |||
372 | pattern = int(request.GET.get('experiment', '1')) |
|
372 | pattern = int(request.GET.get('experiment', '1')) | |
373 | angle = float(request.GET.get('angle', '5')) |
|
373 | angle = float(request.GET.get('angle', '5')) | |
374 | height = [float(h) for h in request.GET.get('height', '100').split(',')] |
|
374 | height = [float(h) for h in request.GET.get('height', '100').split(',')] | |
375 | bodys = (request.GET.get('bodys', '')).split(',') |
|
375 | bodys = (request.GET.get('bodys', '')).split(',') | |
376 |
|
376 | |||
377 | data = antennacuts_plot(pattern, date, angle, height, bodys) |
|
377 | data = antennacuts_plot(pattern, date, angle, height, bodys) | |
378 | response = HttpResponse(data.getvalue(), content_type='image/png') |
|
378 | response = HttpResponse(data.getvalue(), content_type='image/png') | |
379 |
|
379 | |||
380 | return response |
|
380 | return response | |
381 |
|
381 | |||
382 |
|
382 | |||
383 |
|
383 | |||
384 |
|
384 | |||
385 | def plot_MUF(request): |
|
385 | def plot_MUF(request): | |
386 | #Version IRI disponibles: 2007,2012,2016 |
|
386 | #Version IRI disponibles: 2007,2012,2016 | |
387 | #Por defecto 2016 |
|
387 | #Por defecto 2016 | |
388 | version_IRI=2016 |
|
388 | version_IRI=2016 | |
389 | date=request.GET.get("date",None) |
|
389 | date=request.GET.get("date",None) | |
390 |
|
390 | |||
391 |
|
391 | |||
392 | if date is None: |
|
392 | if date is None: | |
393 |
|
393 | |||
394 | date=None |
|
394 | date=None | |
395 |
|
395 | |||
396 | else: |
|
396 | else: | |
397 | try: |
|
397 | try: | |
398 | date= datetime.strptime(date,"%Y-%m-%d") |
|
398 | date= datetime.strptime(date,"%Y-%m-%d") | |
399 | except ValueError: |
|
399 | except ValueError: | |
400 | date=None |
|
400 | date=None | |
401 |
|
401 | |||
402 | valueoption=int(request.GET.get("valueoption","17") ) |
|
402 | valueoption=int(request.GET.get("valueoption","17") ) | |
403 |
|
403 | |||
404 |
|
404 | |||
405 | if (valueoption>0): |
|
405 | if (valueoption>0): | |
406 | latitude,longitude = get_options_MUF(valueoption) |
|
406 | latitude,longitude = get_options_MUF(valueoption) | |
407 |
|
407 | |||
408 |
|
408 | |||
409 | elif (valueoption!=-1): |
|
409 | elif (valueoption!=-1): | |
410 | latitude=float(request.GET.get("latitude","-10")) |
|
410 | latitude=float(request.GET.get("latitude","-10")) | |
411 | latitude=round(latitude,2) |
|
411 | latitude=round(latitude,2) | |
412 |
|
412 | |||
413 | longitude=float(request.GET.get("longitude","-78")) |
|
413 | longitude=float(request.GET.get("longitude","-78")) | |
414 | longitude=round(longitude,2) |
|
414 | longitude=round(longitude,2) | |
415 |
|
415 | |||
416 |
|
416 | |||
417 | data=muf_plot(latitude,longitude,version_IRI,date) |
|
417 | data=muf_plot(latitude,longitude,version_IRI,date) | |
418 |
|
418 | |||
419 |
|
419 | |||
420 | response = HttpResponse(data.getvalue(), content_type='image/png') |
|
420 | response = HttpResponse(data.getvalue(), content_type='image/png') | |
421 |
|
421 | |||
422 |
|
422 | |||
423 | return response |
|
423 | return response |
General Comments 0
You need to be logged in to leave comments.
Login now