1
0
Fork 0

Add period on export frames

* Add a new panel for telemetry frames
merge-requests/182/head
Nikos Roussos 2017-05-28 22:23:17 +03:00
parent 26a06bf205
commit 48fe087c4c
No known key found for this signature in database
GPG Key ID: BADFF1767BA7C8E1
7 changed files with 73 additions and 23 deletions

View File

@ -3,7 +3,7 @@
"description": "Satellite Transmitter Suggestions App",
"version": "0.1.0",
"homepage": "https://github.com/satnogs/satnogs-db",
"license": "AGPLv3",
"license": "AGPL-3.0",
"dependencies": {
"jquery": "2.1.x",
"bootstrap": "3.3.x",

View File

@ -1,4 +1,5 @@
import csv
from datetime import datetime, timedelta
from celery.task import task
from orbit import satellite
@ -34,21 +35,35 @@ def update_all_tle():
@task
def export_frames(norad, email, uid):
def export_frames(norad, email, uid, period=None):
"""Task to export satellite frames in csv."""
frames = DemodData.objects.filter(satellite__norad_cat_id=norad)
filename = '{0}-{1}.csv'.format(norad, uid)
now = datetime.utcnow()
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)
with open(filepath, 'w') as f:
writer = csv.writer(f)
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
subject = '[satnogs] Your request for exported frames is ready!'
template = 'emails/exported_frames.txt'
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
}
message = render_to_string(template, {'data': data})

View File

@ -8,7 +8,10 @@ base_urlpatterns = ([
url(r'^about/$', views.about, name='about'),
url(r'^faq/$', views.faq, name='faq'),
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,
name='satellite_position'),
url(r'^suggestion/$', views.suggestion, name='suggestion'),

View File

@ -111,9 +111,9 @@ def satellite(request, norad):
@login_required
def request_export(request, norad):
def request_export(request, norad, period=None):
"""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. '
'You will get an email when it\'s ready'))
return redirect(reverse('satellite', kwargs={'norad': norad}))

View File

@ -22,6 +22,7 @@ THIRD_PARTY_APPS = (
'avatar',
'rest_framework',
'rest_framework.authtoken',
'django_filters',
'allauth',
'allauth.account',
'crispy_forms',

View File

@ -272,13 +272,13 @@
</div>
</div>
<!-- Telemetry Section -->
<!-- Telemetry Decoded Section -->
<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="panel panel-default panel-satellite">
<div class="panel-heading">
<div class="satellite-title" id="telemetry-block" data-satid="{{ satellite.norad_cat_id }}">
Telemetry
Telemetry (decoded)
</div>
</div>
<div class="row panel-body">
@ -296,25 +296,55 @@
</div>
</div>
<div class="panel-footer">
<span class="badge">Frames: {{ satellite.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>
<span class="badge">Decoded: {{ telemetry_data_count }}</span>
</div>
</div>
</div>
</div>
<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>
<!-- 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 -->
<div class="modal fade" id="NewSuggestionModal" tabindex="-1" role="dialog" aria-labelledby="NewSuggestionModalLabel" aria-hidden="true">
<div class="modal-dialog">

View File

@ -15,7 +15,8 @@ celery:
- db
- redis
environment:
- DJANGO_SETTINGS_MODULE=db.settings.docker
- ENVIRONMENT=stage
- DEBUG=True
- DATABASE_URL=mysql://satnogsdb:satnogsdb@db/satnogsdb
command:
./docker/run-celery.sh