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",
|
||||
"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",
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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}))
|
||||
|
|
|
@ -22,6 +22,7 @@ THIRD_PARTY_APPS = (
|
|||
'avatar',
|
||||
'rest_framework',
|
||||
'rest_framework.authtoken',
|
||||
'django_filters',
|
||||
'allauth',
|
||||
'allauth.account',
|
||||
'crispy_forms',
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue