##// END OF EJS Templates
Fix bugs, change footer
jespinoza -
r74:0baa2a7cadef
parent child
Show More
@@ -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 <div class="row">
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-4">
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 </div>
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=2))
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