Add ratings for transmitters in satellite view
parent
9c6285af56
commit
0cbc5eb4c9
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
.satellite-info {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#SatelliteModal li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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> </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>
|
||||
|
|
Loading…
Reference in New Issue