1
0
Fork 0

Add ratings for transmitters in satellite view

merge-requests/569/head
Alfredos-Panagiotis Damkalis 2018-08-28 22:23:43 +03:00
parent 9c6285af56
commit 0cbc5eb4c9
6 changed files with 153 additions and 36 deletions

View File

@ -302,7 +302,7 @@ class Satellite(models.Model):
@property
def data_count(self):
return Observation.objects.filter(satellite=self).count()
return Observation.objects.filter(satellite=self).exclude(vetted_status='failed').count()
@property
def good_count(self):
@ -375,6 +375,46 @@ class Transmitter(models.Model):
satellite = models.ForeignKey(Satellite, related_name='transmitters',
on_delete=models.CASCADE, null=True, blank=True)
@property
def data_count(self):
return Observation.objects.filter(transmitter=self).exclude(vetted_status='failed').count()
@property
def good_count(self):
data = Observation.objects.filter(transmitter=self)
return data.filter(vetted_status='good').count()
@property
def bad_count(self):
data = Observation.objects.filter(transmitter=self)
return data.filter(vetted_status='bad').count()
@property
def unknown_count(self):
data = Observation.objects.filter(transmitter=self)
return data.filter(vetted_status='unknown').count()
@property
def success_rate(self):
try:
return int(100 * (float(self.good_count) / float(self.data_count)))
except (ZeroDivisionError, TypeError):
return 0
@property
def bad_rate(self):
try:
return int(100 * (float(self.bad_count) / float(self.data_count)))
except (ZeroDivisionError, TypeError):
return 0
@property
def unknown_rate(self):
try:
return int(100 * (float(self.unknown_count) / float(self.data_count)))
except (ZeroDivisionError, TypeError):
return 0
def __unicode__(self):
return self.description

View File

@ -839,6 +839,19 @@ def station_delete(request, id):
return redirect(reverse('users:view_user', kwargs={'username': me}))
class TransmittersSerializer(serializers.ModelSerializer):
mode = serializers.SerializerMethodField()
class Meta:
model = Transmitter
fields = ('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
def satellite_view(request, id):
try:
sat = Satellite.objects.get(norad_cat_id=id)
@ -848,6 +861,8 @@ def satellite_view(request, id):
}
return JsonResponse(data, safe=False)
transmitters = Transmitter.objects.filter(satellite=sat)
data = {
'id': id,
'name': sat.name,
@ -858,6 +873,7 @@ def satellite_view(request, id):
'bad_count': sat.bad_count,
'unknown_count': sat.unknown_count,
'data_count': sat.data_count,
'transmitters': TransmittersSerializer(transmitters, many=True).data,
}
return JsonResponse(data, safe=False)

View File

@ -4,6 +4,16 @@
display: flow-root;
}
.front-data-big {
float: right;
width: 300px;
display: flow-root;
.progress {
width: 250px;
}
}
.front-line {
margin-top: 12px;
margin-bottom: 12px;

View File

@ -1,7 +1,3 @@
.satellite-info {
margin-bottom: 20px;
}
#SatelliteModal li {
margin-bottom: 5px;
}

View File

@ -16,10 +16,59 @@ $(document).ready(function() {
modal.find('#db-link').attr('href', 'https://db.satnogs.org/satellite/' + satlink.data('id'));
modal.find('#new-obs-link').attr('href', '/observations/new/?norad=' + satlink.data('id'));
modal.find('#old-obs-link').attr('href', '/observations/?norad=' + satlink.data('id'));
modal.find('.satellite-success').text(data.success_rate + '% success on ' + data.data_count + ' observations');
modal.find('#good-sat-obs').attr('href', '/observations/?future=0&good=1&bad=0&unvetted=0&failed=0&norad=' + satlink.data('id'));
modal.find('#unknown-sat-obs').attr('href', '/observations/?future=0&good=0&bad=0&unvetted=1&failed=0&norad=' + satlink.data('id'));
modal.find('#bad-sat-obs').attr('href', '/observations/?future=0&good=0&bad=1&unvetted=0&failed=0&norad=' + satlink.data('id'));
modal.find('.satellite-success-rate').text(data.success_rate + '%');
modal.find('.satellite-total-obs').text(data.data_count);
modal.find('.satellite-good').text(data.good_count);
modal.find('.satellite-unknown').text(data.unknown_count);
modal.find('.satellite-bad').text(data.bad_count);
$.each(data.transmitters, function(i, transmitter){
var transmitter_status = '-danger';
if(transmitter.alive){
transmitter_status = '-success';
}
var good_percentage = 0;
var unknown_percentage = 0;
var bad_percentage = 0;
if(transmitter.data_count > 0){
good_percentage = Math.round((transmitter.good_count / transmitter.data_count) * 100);
unknown_percentage = Math.round((transmitter.unknown_count / transmitter.data_count) * 100);
bad_percentage = Math.round((transmitter.bad_count / transmitter.data_count) * 100);
}
modal.find('#transmitters').append(`
<div class="col-md-12 transmitter">
<div class="panel panel` + transmitter_status + `">
<div class="panel-heading">
<span class="transmitter-desc">` + transmitter.description + `</span>
</div>
<div class="panel-body">
<div class="front-line">
<span class="label label-default">Observations</span>
<span class="front-data-big">
<span class="transmitter-total-obs">` + transmitter.data_count + `</span>
<div class="progress pull-right">
<div class="progress-bar progress-bar-success transmitter-good"
data-toggle="tooltip" data-placement="bottom"
title="` + good_percentage + '% (' + transmitter.good_count + `) Good"
style="width:` + good_percentage + `%"></div>
<div class="progress-bar progress-bar-warning transmitter-unknown"
data-toggle="tooltip" data-placement="bottom"
title="` + unknown_percentage + '% (' + transmitter.unknown_count + `) Unknown"
style="width:` + unknown_percentage + `%"></div>
<div class="progress-bar progress-bar-danger transmitter-bad"
data-toggle="tooltip" data-placement="bottom"
title="` + bad_percentage + '% (' + transmitter.bad_count + `) Bad"
style="width:` + bad_percentage + `%"></div>
</div>
</span>
</div>
</div>
</div>
</div>`
);
});
if (data.image) {
modal.find('.satellite-img-full').attr('src', data.image);
} else {

View File

@ -13,43 +13,49 @@
</div>
</div>
<div class="col-md-8">
<div class="satellite-info">
<div class="front-line">
<span class="satellite-title"></span>
<span class="satellite-names"></span>
</div>
<div class="satellite-info">
<div class="front-line">
<span class="label label-default">NORAD ID</span>
<span class="satellite-id"></span>
<span class="front-data satellite-id"></span>
</div>
<div class="satellite-info">
<ul class="list-unstyled">
<li>
<span class="satellite-success"></span>
</li>
<li>
<span class="label label-success satellite-good" data-toggle="tooltip" data-placement="bottom" title="Successful observations"></span>
<span class="label label-warning satellite-unknown" data-toggle="tooltip" data-placement="bottom" title="Unknown observations"></span>
<span class="label label-danger satellite-bad" data-toggle="tooltip" data-placement="bottom" title="Bad observations"></span>
</li>
</ul>
<div class="front-line">
<span class="label label-default">Success Rate</span>
<span class="front-data satellite-success-rate"></span>
</div>
<div class="satellite-info">
<ul class="list-unstyled">
<li>
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
<a href="/observations/new/" id="new-obs-link">Schedule new Observation</a>
</li>
<li>
<span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span>
<a href="/observations/" id="old-obs-link">Past Observations</a>
</li>
<li>&nbsp;</li>
<li>
<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
<a href="https://db.satnogs.org/" target="_blank" id="db-link">SatNOGS DB Entry & Data</a>
</li>
</ul>
<div class="front-line">
<span class="label label-default">Observations</span>
<span class="front-data">
<span class="satellite-total-obs"></span>
<span class="pull-right">
<a href="/observations" id="good-sat-obs">
<button type="button" class="btn btn-xs btn-success satellite-good" data-toggle="tooltip" data-placement="bottom" title="Successful observations"></button>
</a>
<a href="/observations" id="unknown-sat-obs">
<button type="button" class="btn btn-xs btn-warning satellite-unknown" data-toggle="tooltip" data-placement="bottom" title="Unknown observations"></button>
</a>
<a href="/observations" id="bad-sat-obs">
<button type="button" class="btn btn-xs btn-bad satellite-bad" data-toggle="tooltip" data-placement="bottom" title="Bad observations"></button>
</a>
<a href="/observations/" id="old-obs-link">
<button type="button" class="btn btn-xs btn-info">View all</button>
</a>
</span>
</span>
</div>
<div class="front-line">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
<a href="/observations/new/" id="new-obs-link">Schedule new Observation</a>
</div>
<div class="front-line">
<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
<a href="https://db.satnogs.org/" target="_blank" id="db-link">SatNOGS DB Entry & Data</a>
</div>
</div>
<div class="col-md-12">
<div id="transmitters"></div>
</div>
</div>
</div>