1
0
Fork 0

Add dynamic transmitter fetching

environments/stage/deployments/194
Alfredos-Panagiotis Damkalis 2018-09-03 14:39:49 +03:00
parent 289edec195
commit 8322fedd8b
5 changed files with 72 additions and 53 deletions

View File

@ -40,4 +40,8 @@ base_urlpatterns = ([
url(r'^satellites/(?P<id>[0-9]+)/$', views.satellite_view, name='satellite_view'),
url(r'^satellite_position/(?P<sat_id>[0-9]+)/$', views.satellite_position,
name='satellite_position'),
# Transmitters
url(r'^transmitters/(?P<id>[0-9]+)/$', views.transmitters_view,
name='transmitters_view'),
], 'base')

View File

@ -845,8 +845,9 @@ class TransmittersSerializer(serializers.ModelSerializer):
class Meta:
model = Transmitter
fields = ('description', 'alive', 'downlink_low', 'mode', 'success_rate', 'bad_rate',
'unknown_rate', 'good_count', 'bad_count', 'unknown_count', 'data_count')
fields = ('uuid', 'description', 'alive', 'downlink_low', 'mode',
'success_rate', 'bad_rate', 'unknown_rate', 'good_count',
'bad_count', 'unknown_count', 'data_count')
def get_mode(self, obj):
return obj.mode.name
@ -877,3 +878,21 @@ def satellite_view(request, id):
}
return JsonResponse(data, safe=False)
def transmitters_view(request, id):
try:
sat = Satellite.objects.get(norad_cat_id=id)
except Satellite.DoesNotExist:
data = {
'error': 'Unable to find that satellite.'
}
return JsonResponse(data, safe=False)
transmitters = Transmitter.objects.filter(satellite=sat)
data = {
'transmitters': TransmittersSerializer(transmitters, many=True).data,
}
return JsonResponse(data, safe=False)

View File

@ -34,10 +34,13 @@
.transmitter-description {
margin: 0 5px 0 0;
overflow: hidden;
text-overflow: ellipsis;
}
.progress {
width: 50px;
min-width: 50px;
}
}

View File

@ -1,30 +1,51 @@
/* global moment, d3, Slider, calcPolarPlotSVG */
$(document).ready( function(){
function select_proper_transmitters(satellite) {
$('#transmitter-selection').prop('disabled', false);
$('#transmitter-selection option').prop('disabled', true);
function select_proper_transmitters(satellite){
$.ajax({
url: '/transmitters/' + satellite + '/'
}).done(function(data) {
var transmitters_options = '';
var max_good_count = 0;
var max_good_val = '';
$.each(data.transmitters, function (i, transmitter) {
if (max_good_count <= transmitter.good_count) {
max_good_count = transmitter.good_count;
max_good_val = transmitter.uuid;
}
transmitters_options += `
<option data-satellite="` + satellite + `"
value="` + transmitter.uuid + `"
data-success-rate="` + transmitter.success_rate + `"
data-content='<div class="transmitter-option">
<div class="transmitter-description">
` + transmitter.description + ' - ' + (transmitter.downlink_low/1e6).toFixed(3) + ' MHz - ' + transmitter.mode +
`</div>
<div class="progress">
<div class="progress-bar progress-bar-success transmitter-good"
data-toggle="tooltip" data-placement="bottom"
title="` + transmitter.success_rate + '% (' + transmitter.good_count + `) Good"
style="width:` + transmitter.success_rate + `%"></div>
<div class="progress-bar progress-bar-warning transmitter-unknown"
data-toggle="tooltip" data-placement="bottom"
title="` + transmitter.unknown_rate + '% (' + transmitter.unknown_count + `) Unknown"
style="width:` + transmitter.unknown_rate + `%"></div>
<div class="progress-bar progress-bar-danger transmitter-bad"
data-toggle="tooltip" data-placement="bottom"
title="` + transmitter.bad_rate + '% (' + transmitter.bad_count + `) Bad"
style="width:` + transmitter.bad_rate + `%"></div>
</div>
</div>'>
</option>
`;
});
$('#transmitter-selection').html(transmitters_options).prop('disabled', false);
$('#transmitter-selection').selectpicker('refresh');
$('#transmitter-selection').selectpicker('val', max_good_val);
var transmitter_options = $('#transmitter-selection option[data-satellite="' + satellite + '"]');
var max_success_rate = {
'rate': $(transmitter_options[0]).data('successRate'),
'val': $(transmitter_options[0]).val()
};
transmitter_options.each(function(){
var option = $(this);
option.prop('disabled', false);
if(option.data('successRate') > max_success_rate.rate){
max_success_rate.rate = option.data('successRate');
max_success_rate.val = option.val();
}
$('.tle').hide();
$('.tle[data-norad="' + satellite + '"]').show();
});
$('#transmitter-selection').selectpicker('refresh');
$('#transmitter-selection').selectpicker('val', max_success_rate.val);
$('.tle').hide();
$('.tle[data-norad="' + satellite + '"]').show();
}
var suggested_data = [];
@ -272,7 +293,7 @@ $(document).ready( function(){
d.tle1,
d.tle2);
const polarPlotAxes = `
<path fill="none" stroke="black" stroke-width="1" d="M 0 -95 v 190 M -95 0 h 190"/>
<path fill="none" stroke="black" stroke-width="1" d="M 0 -95 v 190 M -95 0 h 190"/>
<circle fill="none" stroke="black" cx="0" cy="0" r="30"/>
<circle fill="none" stroke="black" cx="0" cy="0" r="60"/>
<circle fill="none" stroke="black" cx="0" cy="0" r="90"/>

View File

@ -66,34 +66,6 @@
<select id="transmitter-selection" class="form-control selectpicker"
disabled data-hide-disabled="true" name="transmitter" autocomplete="off">
<option id="no-transmitter" value="" disabled selected>No transmitter available</option>
{% for transmitter in transmitters %}
{% with success_rate=transmitter.success_rate bad_rate=transmitter.bad_rate unknown_rate=transmitter.unknown_rate %}
<option data-satellite="{{ transmitter.satellite.norad_cat_id }}"
value="{{ transmitter.uuid }}"
data-success-rate="{{ success_rate }}"
data-content='<div class="transmitter-option">
<div class="transmitter-description">
{{ transmitter.description }} - {{ transmitter.downlink_low|frq }} - {{ transmitter.mode|default:"" }}
</div>
<div class="progress">
<div class="progress-bar progress-bar-success transmitter-good"
data-toggle="tooltip" data-placement="bottom"
title=" {{ success_rate }}% ({{ transmitter.good_count }}) Good"
style="width: {{ success_rate }}%"></div>
<div class="progress-bar progress-bar-warning transmitter-unknown"
data-toggle="tooltip" data-placement="bottom"
title=" {{ transmitter.unknown_rate }}% ({{ transmitter.unknown_count }}) Unknown"
style="width: {{ transmitter.unknown_rate }}%"></div>
<div class="progress-bar progress-bar-danger transmitter-bad"
data-toggle="tooltip" data-placement="bottom"
title=" {{ transmitter.bad_rate }}% ({{ transmitter.bad_count }}) Bad"
style="width: {{ transmitter.bad_rate }}%"></div>
</div>
</div>'>
{{ transmitter.description }} - {{ transmitter.downlink_low|frq }} - {{ transmitter.mode|default:"" }}
</option>
{% endwith %}
{% endfor %}
</select>
{% for satellite in satellites %}
<small class="tle" data-norad="{{ satellite.norad_cat_id }}">