##// END OF EJS Templates
Fix utc time handling
Juan C. Espinoza -
r44:74ffee4b5884
parent child
Show More
@@ -45,21 +45,18 class PcolorBuffer {
45 }
45 }
46 var t = values.time.map(function (x) {
46 var t = values.time.map(function (x) {
47 var a = new Date(x * 1000);
47 var a = new Date(x * 1000);
48 // This condition is used to change from UTC to LT
48 if (data.metadata.localtime == 0){
49 //if (data.metadata.localtime == true){
49 a.setTime( a.getTime() + a.getTimezoneOffset()*60*1000 );
50 a.setTime( a.getTime() + a.getTimezoneOffset()*60*1000 );
50 }
51 //}
52 return a;
51 return a;
53 });
52 });
54
53
55 var label;
54 var label;
56 //if (data.metadata.localtime == true){
55 if (data.metadata.localtime == 1){
57 label = "[LT]";
56 label = "[LT]";
58
57 }else{
59 //}
58 label = "[UTC]";
60 //else{
59 }
61 // label = "[UTC]";
62 //}
63
60
64 for (var i = 0; i < data['data'].length; i++) {
61 for (var i = 0; i < data['data'].length; i++) {
65 var layout = {
62 var layout = {
@@ -104,8 +101,9 class PcolorBuffer {
104 if (this.metadata.zmax) { trace.zmax = this.metadata.zmax }
101 if (this.metadata.zmax) { trace.zmax = this.metadata.zmax }
105
102
106 var tm = new Date(this.last * 1000);
103 var tm = new Date(this.last * 1000);
107 tm.setTime( tm.getTime() + tm.getTimezoneOffset()*60*1000 );
104 if (data.metadata.localtime == 0){
108
105 tm.setTime( tm.getTime() + tm.getTimezoneOffset()*60*1000 );
106 }
109 if ('titles' in this.metadata){
107 if ('titles' in this.metadata){
110 layout.title = this.metadata.titles[i] + ' - ' + tm.toLocaleString();
108 layout.title = this.metadata.titles[i] + ' - ' + tm.toLocaleString();
111 }else{
109 }else{
@@ -217,10 +215,9 class PcolorBuffer {
217 cnt += 1;
215 cnt += 1;
218 this.last += this.interval;
216 this.last += this.interval;
219 var newt = new Date((this.last) * 1000);
217 var newt = new Date((this.last) * 1000);
220 // This condition is used to change from UTC to LT
218 if (obj.metadata.localtime == 0){
221 // if (obj.metadata.localtime == true){
219 newt.setTime( newt.getTime() + newt.getTimezoneOffset()*60*1000 );
222 newt.setTime( newt.getTime() + newt.getTimezoneOffset()*60*1000 );
220 }
223 //}
224 this.xbuffer.push(newt);
221 this.xbuffer.push(newt);
225 for (var i = 0; i < obj['data'].length; i++) {
222 for (var i = 0; i < obj['data'].length; i++) {
226 this.zbuffer[i].push(this.empty);
223 this.zbuffer[i].push(this.empty);
@@ -232,10 +229,9 class PcolorBuffer {
232 // update buffers
229 // update buffers
233 this.last = parseFloat(obj.time[0]);
230 this.last = parseFloat(obj.time[0]);
234 var t = new Date(obj.time[0] * 1000);
231 var t = new Date(obj.time[0] * 1000);
235 // This condition is used to change from UTC to LT
232 if (obj.metadata.localtime == 0){
236 //if (obj.metadata.localtime == true){
233 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
237 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
234 }
238 //}
239 this.xbuffer.push(t);
235 this.xbuffer.push(t);
240 for (var i = 0; i < obj['data'].length; i++) {
236 for (var i = 0; i < obj['data'].length; i++) {
241 this.zbuffer[i].push(obj['data'][i]);
237 this.zbuffer[i].push(obj['data'][i]);
@@ -348,9 +344,9 class Pcolor {
348 }
344 }
349
345
350 var t = new Date(data.time * 1000);
346 var t = new Date(data.time * 1000);
351 //if (data.metadata.localtime == true){
347 if (data.metadata.localtime == 0){
352 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
348 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
353 //}
349 }
354 if ('titles' in data.metadata){
350 if ('titles' in data.metadata){
355 layout.title = data.metadata.titles[i] + ' ' + t.toLocaleString();
351 layout.title = data.metadata.titles[i] + ' ' + t.toLocaleString();
356 }else{
352 }else{
@@ -397,10 +393,9 class Pcolor {
397 // add new data to plots and empty buffers
393 // add new data to plots and empty buffers
398 // // // console.log('Plotting...');
394 // // // console.log('Plotting...');
399 var t = new Date(obj.time[0] * 1000);
395 var t = new Date(obj.time[0] * 1000);
400 // This condition is used to change from UTC to LT
396 if (obj.metadata.localtime == 0){
401 //if (obj.metadata.localtime == true){
397 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
402 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
398 }
403 //}
404 for (var i = 0; i < this.n; i++) {
399 for (var i = 0; i < this.n; i++) {
405 var div = document.getElementById(this.divs[i]);
400 var div = document.getElementById(this.divs[i]);
406
401
@@ -485,9 +480,9 class ScatterBuffer {
485 var t = values.time.map(function (x) {
480 var t = values.time.map(function (x) {
486 var a = new Date(x * 1000);
481 var a = new Date(x * 1000);
487 // This condition is used to change from UTC to LT
482 // This condition is used to change from UTC to LT
488 //if (data.metadata.localtime == true){
483 if (data.metadata.localtime == 0){
489 a.setTime( a.getTime() + a.getTimezoneOffset()*60*1000 );
484 a.setTime( a.getTime() + a.getTimezoneOffset()*60*1000 );
490 //}
485 }
491 return a;
486 return a;
492 });
487 });
493
488
@@ -508,7 +503,11 class ScatterBuffer {
508 }
503 }
509
504
510 var label;
505 var label;
511 label = "[LT]";
506 if (data.metadata.localtime == 1){
507 label = "[LT]";
508 }else{
509 label = "[UTC]";
510 }
512
511
513 var layout = {
512 var layout = {
514 height: 300,
513 height: 300,
@@ -642,10 +641,9 class ScatterBuffer {
642 cnt += 1;
641 cnt += 1;
643 this.last += this.interval;
642 this.last += this.interval;
644 var newt = new Date((this.last) * 1000);
643 var newt = new Date((this.last) * 1000);
645 // This condition is used to change from UTC to LT
644 if (obj.metadata.localtime == 0){
646 //if (obj.metadata.localtime == true){
645 newt.setTime( newt.getTime() + newt.getTimezoneOffset()*60*1000 );
647 newt.setTime( newt.getTime() + newt.getTimezoneOffset()*60*1000 );
646 }
648 //}
649 this.xbuffer.push(newt);
647 this.xbuffer.push(newt);
650 for (var i = 0; i < this.n; i++) {
648 for (var i = 0; i < this.n; i++) {
651 this.ybuffer[i].push(null);
649 this.ybuffer[i].push(null);
@@ -657,10 +655,9 class ScatterBuffer {
657 // update buffers
655 // update buffers
658 this.last = parseFloat(obj.time[0]);
656 this.last = parseFloat(obj.time[0]);
659 var t = new Date(obj.time[0] * 1000);
657 var t = new Date(obj.time[0] * 1000);
660 // This condition is used to change from UTC to LT
658 if (obj.metadata.localtime == 0){
661 //if (obj.metadata.localtime == true){
659 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
662 t.setTime( t.getTime() + t.getTimezoneOffset()*60*1000 );
660 }
663 //}
664 this.xbuffer.push(t);
661 this.xbuffer.push(t);
665 for (var i = 0; i < this.n; i++) {
662 for (var i = 0; i < this.n; i++) {
666 this.ybuffer[i].push(obj['data'][i][0]);
663 this.ybuffer[i].push(obj['data'][i][0]);
@@ -3,6 +3,21
3 {% block content %}
3 {% block content %}
4 <p>Useful tools and data from other partners/observatories.</p>
4 <p>Useful tools and data from other partners/observatories.</p>
5 <div class="card-columns p-2">
5 <div class="card-columns p-2">
6
7 <div class="card text-justify">
8 <div class="card-body">
9 <h5 class="card-title">DOY Calendar</h5>
10 <p class="card-text">The day of year (DOY) is the sequential day number starting with day 1 on January 1st</p>
11 <input type="date" class="form-control tools-date" id="doy-date" placeholder="yyyy-mm-dd"
12 aria-describedby="validationTooltipSkynoiseDate" value="{% now 'Y-m-d' %}" required>
13 <div class="invalid-tooltip">
14 Please enter a valid date.
15 </div>
16 <p id="pdoy" class="card-text text-center" style="padding-top: 0.5em; font-weight:500; font-size:1.5em; color:var(--secondary);">DOY: {{doy}}</p>
17 </div>
18 </div>
19
20
6 <div class="card text-justify">
21 <div class="card text-justify">
7 <img src="{% static 'images/skynoise.png' %}" class="card-img-top" alt="...">
22 <img src="{% static 'images/skynoise.png' %}" class="card-img-top" alt="...">
8 <div class="card-body">
23 <div class="card-body">
@@ -101,8 +116,6
101 </div>
116 </div>
102 </div>
117 </div>
103
118
104 </div>
105
106 <!-- Modal -->
119 <!-- Modal -->
107 <div class="modal fade" id="toolModal" tabindex="-1" role="dialog" aria-labelledby="toolModalTitle" aria-hidden="true">
120 <div class="modal fade" id="toolModal" tabindex="-1" role="dialog" aria-labelledby="toolModalTitle" aria-hidden="true">
108 <div class="modal-dialog modal-lg" role="document">
121 <div class="modal-dialog modal-lg" role="document">
@@ -124,6 +137,7
124
137
125 {% block script %}
138 {% block script %}
126 <script>
139 <script>
140
127 $('#toolModal').on('show.bs.modal', function (e) {
141 $('#toolModal').on('show.bs.modal', function (e) {
128
142
129 //get data attribute of the clicked element
143 //get data attribute of the clicked element
@@ -139,5 +153,18
139 $(e.currentTarget).find('h5').text(title);
153 $(e.currentTarget).find('h5').text(title);
140 $(e.currentTarget).find('img').attr('src', image);
154 $(e.currentTarget).find('img').attr('src', image);
141 });
155 });
156
157 $('#doy-date').change(function() {
158 var old = new Date($(this).val());
159 var now = new Date(old.getTime()+old.getTimezoneOffset()*60*1000);
160 var start = new Date(now.getFullYear(), 0, 0);
161 var diff = (now - start) // + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
162 var oneDay = 1000 * 60 * 60 * 24;
163 var doy = Math.floor(diff / oneDay);
164 $('#pdoy').text("DOY: " + doy);
165 console.log(now);
166 console.log(start);
167 });
168
142 </script>
169 </script>
143 {% endblock script %} No newline at end of file
170 {% endblock script %}
@@ -71,7 +71,7 class SPCSetupForm(forms.Form):
71 def main(request, tag=None):
71 def main(request, tag=None):
72
72
73 kwargs = {}
73 kwargs = {}
74 date = request.GET.get('date', datetime.now().strftime('%d-%m-%Y'))
74 date = request.GET.get('date', datetime.utcnow().strftime('%d-%m-%Y'))
75 exps = ExpDetail.objects(date=datetime.strptime(date, '%d-%m-%Y'))
75 exps = ExpDetail.objects(date=datetime.strptime(date, '%d-%m-%Y'))
76
76
77 tmp = {}
77 tmp = {}
@@ -101,31 +101,26 def main(request, tag=None):
101 dum['code'] = exp.experiment.code
101 dum['code'] = exp.experiment.code
102 dum['plots'] = []
102 dum['plots'] = []
103 dum['name'] = exp.experiment.name
103 dum['name'] = exp.experiment.name
104 dt = datetime.now()
104
105
105 t = time.time()
106 t = time.mktime(dt.timetuple())
107 t -= 5*60*60
108
106
109 if (t-exp['last_time']) > 6*exp['interval']:
107 if (t-exp['last_time']) > 6*exp['interval']:
110 status = 'Offline'
108 status = 'Offline'
111 clase = 'alertas-offline'
109 clase = 'alertas-offline'
112 style = 'danger'
110 style = 'danger'
113 lastDataDate = exp['last_time']
114 elif (t-exp['last_time']) > 3*exp['interval']:
111 elif (t-exp['last_time']) > 3*exp['interval']:
115 status = 'Delayed'
112 status = 'Delayed'
116 clase = 'alertas-delayed'
113 clase = 'alertas-delayed'
117 style = 'warning'
114 style = 'warning'
118 lastDataDate = exp['last_time']
119 else:
115 else:
120 status = 'Online'
116 status = 'Online'
121 clase = 'alertas-online'
117 clase = 'alertas-online'
122 style = 'success'
118 style = 'success'
123 lastDataDate = exp['last_time']
124
119
125 dum['status'] = status
120 dum['status'] = status
126 dum['class'] = clase
121 dum['class'] = clase
127 dum['style']= style
122 dum['style']= style
128 dum['date']= datetime.utcfromtimestamp(lastDataDate)
123 dum['date']= datetime.fromtimestamp(exp['last_time'])
129 for plot in exp.plots():
124 for plot in exp.plots():
130 dum['plots'].append({'plot': plot.plot, 'name': plot.plot.replace('_', ' ').title(), 'id':plot.id})
125 dum['plots'].append({'plot': plot.plot, 'name': plot.plot.replace('_', ' ').title(), 'id':plot.id})
131 experiments.append(dum)
126 experiments.append(dum)
@@ -152,7 +147,8 def tools(request):
152 '''
147 '''
153 '''
148 '''
154 kwargs = {
149 kwargs = {
155 'title': 'Tools'
150 'title': 'Tools',
151 'doy': (datetime.today().date()-datetime.today().date().replace(month=1, day=1)).days + 1
156 }
152 }
157 return render(request, 'tools.html', kwargs)
153 return render(request, 'tools.html', kwargs)
158
154
@@ -171,7 +167,7 def plot(request, code=None, plot=None):
171 realtime = False
167 realtime = False
172 date = request.GET.get('date', None)
168 date = request.GET.get('date', None)
173 if date is None:
169 if date is None:
174 date = datetime.now().strftime('%d-%m-%Y')
170 date = datetime.utcnow().strftime('%d-%m-%Y')
175 realtime = True
171 realtime = True
176 exp = Experiment.objects.get(code=int(code))
172 exp = Experiment.objects.get(code=int(code))
177 detail = ExpDetail.objects.get(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y'))
173 detail = ExpDetail.objects.get(experiment=exp, date=datetime.strptime(date, '%d-%m-%Y'))
@@ -91,14 +91,11 def check_times():
91 for detail in exps:
91 for detail in exps:
92 code = detail.experiment.code
92 code = detail.experiment.code
93 plot = detail.plots()[0]
93 plot = detail.plots()[0]
94 data_time = detail['last_time']
94 t = time.time()
95 t = time.mktime(dt.timetuple())
96 t -= 5*60*60
97 data_time = detail['last_time'] + 5*60*60
98
95
99 message = {
96 message = {
100 'code': code,
97 'code': code,
101 'time': data_time
98 'time': detail['last_time']
102 }
99 }
103
100
104 if (t-detail['last_time']) > 6*detail['interval']:
101 if (t-detail['last_time']) > 6*detail['interval']:
@@ -136,9 +133,6 def main():
136 if not isinstance(buffer, dict):
133 if not isinstance(buffer, dict):
137 print('Invalid data received: {}').format(str(buffer))
134 print('Invalid data received: {}').format(str(buffer))
138 continue
135 continue
139
140 if buffer['metadata']['localtime'] == True: # Ask which type of time is coming: LT o UTC
141 buffer['time'] -= 5*60*60
142
136
143 if not update(buffer):
137 if not update(buffer):
144 print('Updating {} for code {}'.format(
138 print('Updating {} for code {}'.format(
General Comments 0
You need to be logged in to leave comments. Login now