Add period on export frames
* Add a new panel for telemetry framesmerge-requests/182/head
parent
26a06bf205
commit
48fe087c4c
|
@ -3,7 +3,7 @@
|
||||||
"description": "Satellite Transmitter Suggestions App",
|
"description": "Satellite Transmitter Suggestions App",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"homepage": "https://github.com/satnogs/satnogs-db",
|
"homepage": "https://github.com/satnogs/satnogs-db",
|
||||||
"license": "AGPLv3",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jquery": "2.1.x",
|
"jquery": "2.1.x",
|
||||||
"bootstrap": "3.3.x",
|
"bootstrap": "3.3.x",
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import csv
|
import csv
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from celery.task import task
|
from celery.task import task
|
||||||
from orbit import satellite
|
from orbit import satellite
|
||||||
|
@ -34,21 +35,35 @@ def update_all_tle():
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def export_frames(norad, email, uid):
|
def export_frames(norad, email, uid, period=None):
|
||||||
"""Task to export satellite frames in csv."""
|
"""Task to export satellite frames in csv."""
|
||||||
frames = DemodData.objects.filter(satellite__norad_cat_id=norad)
|
now = datetime.utcnow()
|
||||||
filename = '{0}-{1}.csv'.format(norad, uid)
|
if period:
|
||||||
|
if period == '1':
|
||||||
|
q = datetime.now() - timedelta(days=7)
|
||||||
|
suffix = 'week'
|
||||||
|
else:
|
||||||
|
q = datetime.now() - timedelta(days=30)
|
||||||
|
suffix = 'month'
|
||||||
|
frames = DemodData.objects.filter(satellite__norad_cat_id=norad,
|
||||||
|
timestamp__gte=q)
|
||||||
|
else:
|
||||||
|
frames = DemodData.objects.filter(satellite__norad_cat_id=norad)
|
||||||
|
suffix = 'all'
|
||||||
|
filename = '{0}-{1}-{2}-{3}.csv'.format(norad, uid, now.strftime('%Y%m%dT%H%M%SZ'), suffix)
|
||||||
filepath = '{0}/download/{1}'.format(settings.MEDIA_ROOT, filename)
|
filepath = '{0}/download/{1}'.format(settings.MEDIA_ROOT, filename)
|
||||||
with open(filepath, 'w') as f:
|
with open(filepath, 'w') as f:
|
||||||
writer = csv.writer(f)
|
writer = csv.writer(f)
|
||||||
for obj in frames:
|
for obj in frames:
|
||||||
writer.writerow([obj.timestamp, obj.display_frame()])
|
writer.writerow([obj.timestamp.strftime('%Y%m%dT%H:%M:%SZ'),
|
||||||
|
obj.observer, obj.display_frame()])
|
||||||
|
|
||||||
# Notify user
|
# Notify user
|
||||||
subject = '[satnogs] Your request for exported frames is ready!'
|
subject = '[satnogs] Your request for exported frames is ready!'
|
||||||
template = 'emails/exported_frames.txt'
|
template = 'emails/exported_frames.txt'
|
||||||
data = {
|
data = {
|
||||||
'url': '{0}{1}download/{2}'.format(settings.SITE_URL, settings.MEDIA_URL, filename),
|
'url': '{0}{1}download/{2}'.format(settings.SITE_URL,
|
||||||
|
settings.MEDIA_URL, filename),
|
||||||
'norad': norad
|
'norad': norad
|
||||||
}
|
}
|
||||||
message = render_to_string(template, {'data': data})
|
message = render_to_string(template, {'data': data})
|
||||||
|
|
|
@ -8,7 +8,10 @@ base_urlpatterns = ([
|
||||||
url(r'^about/$', views.about, name='about'),
|
url(r'^about/$', views.about, name='about'),
|
||||||
url(r'^faq/$', views.faq, name='faq'),
|
url(r'^faq/$', views.faq, name='faq'),
|
||||||
url(r'^satellite/(?P<norad>[0-9]+)/$', views.satellite, name='satellite'),
|
url(r'^satellite/(?P<norad>[0-9]+)/$', views.satellite, name='satellite'),
|
||||||
url(r'^frames/(?P<norad>[0-9]+)/$', views.request_export, name='request_export'),
|
url(r'^frames/(?P<norad>[0-9]+)/$', views.request_export,
|
||||||
|
name='request_export_all'),
|
||||||
|
url(r'^frames/(?P<norad>[0-9]+)/(?P<period>[0-9]+)/$', views.request_export,
|
||||||
|
name='request_export'),
|
||||||
url(r'^satellite_position/(?P<sat_id>[0-9]+)/$', views.satellite_position,
|
url(r'^satellite_position/(?P<sat_id>[0-9]+)/$', views.satellite_position,
|
||||||
name='satellite_position'),
|
name='satellite_position'),
|
||||||
url(r'^suggestion/$', views.suggestion, name='suggestion'),
|
url(r'^suggestion/$', views.suggestion, name='suggestion'),
|
||||||
|
|
|
@ -111,9 +111,9 @@ def satellite(request, norad):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def request_export(request, norad):
|
def request_export(request, norad, period=None):
|
||||||
"""View to request frames export download."""
|
"""View to request frames export download."""
|
||||||
export_frames.delay(norad, request.user.email, request.user.pk)
|
export_frames.delay(norad, request.user.email, request.user.pk, period)
|
||||||
messages.success(request, ('Your download request was received. '
|
messages.success(request, ('Your download request was received. '
|
||||||
'You will get an email when it\'s ready'))
|
'You will get an email when it\'s ready'))
|
||||||
return redirect(reverse('satellite', kwargs={'norad': norad}))
|
return redirect(reverse('satellite', kwargs={'norad': norad}))
|
||||||
|
|
|
@ -22,6 +22,7 @@ THIRD_PARTY_APPS = (
|
||||||
'avatar',
|
'avatar',
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
'rest_framework.authtoken',
|
'rest_framework.authtoken',
|
||||||
|
'django_filters',
|
||||||
'allauth',
|
'allauth',
|
||||||
'allauth.account',
|
'allauth.account',
|
||||||
'crispy_forms',
|
'crispy_forms',
|
||||||
|
|
|
@ -272,13 +272,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Telemetry Section -->
|
<!-- Telemetry Decoded Section -->
|
||||||
<div id="telemetry" class="row hidden-xs hidden-sm">
|
<div id="telemetry" class="row hidden-xs hidden-sm">
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 satellite-panels">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 satellite-panels">
|
||||||
<div class="panel panel-default panel-satellite">
|
<div class="panel panel-default panel-satellite">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<div class="satellite-title" id="telemetry-block" data-satid="{{ satellite.norad_cat_id }}">
|
<div class="satellite-title" id="telemetry-block" data-satid="{{ satellite.norad_cat_id }}">
|
||||||
Telemetry
|
Telemetry (decoded)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row panel-body">
|
<div class="row panel-body">
|
||||||
|
@ -296,25 +296,55 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
<div class="panel-footer">
|
||||||
<span class="badge">Frames: {{ satellite.telemetry_data.count }}</span>
|
<span class="badge">Decoded: {{ telemetry_data_count }}</span>
|
||||||
<span class="badge">Decoded: {{ telemetry_data_count }}</span>
|
|
||||||
{% if request.user.is_authenticated %}
|
|
||||||
<a href="{% url 'request_export' norad=satellite.norad_cat_id %}" class="btn btn-default btn-xs">
|
|
||||||
<span class="glyphicon glyphicon-download"></span> Frames
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
Latest frame submitted on {{ latest_frame.timestamp|date:'Y-m-d H:i:s' }} by
|
|
||||||
{{ latest_frame.observer }}
|
|
||||||
</body>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script id="telemetryDescriptorsTemplate" type="text/template">
|
<script id="telemetryDescriptorsTemplate" type="text/template">
|
||||||
<li class="list-group-item telemetry-key" data-key="<%- key %>" data-unit="<%- unit %>"><%- description %></li>
|
<li class="list-group-item telemetry-key" data-key="<%- key %>" data-unit="<%- unit %>"><%- description %></li>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- Telemetry Frames Section -->
|
||||||
|
{% comment %}
|
||||||
|
{% if satellite.telemetry_data.count %}
|
||||||
|
{% endcomment %}
|
||||||
|
<div class="row hidden-xs hidden-sm">
|
||||||
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 satellite-panels">
|
||||||
|
<div class="panel panel-default panel-satellite">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<div class="satellite-title" id="telemetry-block" data-satid="{{ satellite.norad_cat_id }}">
|
||||||
|
Telemetry (frames)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row panel-body">
|
||||||
|
<div class="panel-satellite chart">
|
||||||
|
<div class="col-md-3 panel-satellite">
|
||||||
|
{% if request.user.is_authenticated %}
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="glyphicon glyphicon-download"></span> Download <span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="{% url 'request_export_all' norad=satellite.norad_cat_id %}">Everything</a></li>
|
||||||
|
<li><a href="{% url 'request_export' norad=satellite.norad_cat_id period=1 %}">Last week</a></li>
|
||||||
|
<li><a href="{% url 'request_export' norad=satellite.norad_cat_id period=2 %}">Last month</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<span class="badge">Frames: {{ satellite.telemetry_data.count }}</span>
|
||||||
|
Latest frame submitted on {{ latest_frame.timestamp|date:'Y-m-d H:i:s' }} by
|
||||||
|
{{ latest_frame.observer }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Suggestion Modal -->
|
<!-- Suggestion Modal -->
|
||||||
<div class="modal fade" id="NewSuggestionModal" tabindex="-1" role="dialog" aria-labelledby="NewSuggestionModalLabel" aria-hidden="true">
|
<div class="modal fade" id="NewSuggestionModal" tabindex="-1" role="dialog" aria-labelledby="NewSuggestionModalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
|
|
|
@ -15,7 +15,8 @@ celery:
|
||||||
- db
|
- db
|
||||||
- redis
|
- redis
|
||||||
environment:
|
environment:
|
||||||
- DJANGO_SETTINGS_MODULE=db.settings.docker
|
- ENVIRONMENT=stage
|
||||||
|
- DEBUG=True
|
||||||
- DATABASE_URL=mysql://satnogsdb:satnogsdb@db/satnogsdb
|
- DATABASE_URL=mysql://satnogsdb:satnogsdb@db/satnogsdb
|
||||||
command:
|
command:
|
||||||
./docker/run-celery.sh
|
./docker/run-celery.sh
|
||||||
|
|
Loading…
Reference in New Issue