Add success rate info per satellite
parent
2cccac06fb
commit
c230e03c18
|
@ -170,6 +170,46 @@ class Satellite(models.Model):
|
|||
except:
|
||||
return False
|
||||
|
||||
@property
|
||||
def data_count(self):
|
||||
return Data.objects.filter(observation__satellite=self).count()
|
||||
|
||||
@property
|
||||
def verified_count(self):
|
||||
data = Data.objects.filter(observation__satellite=self)
|
||||
return data.filter(vetted_status='verified').count()
|
||||
|
||||
@property
|
||||
def empty_count(self):
|
||||
data = Data.objects.filter(observation__satellite=self)
|
||||
return data.filter(vetted_status='no_data').count()
|
||||
|
||||
@property
|
||||
def unknown_count(self):
|
||||
data = Data.objects.filter(observation__satellite=self)
|
||||
return data.filter(vetted_status='unknown').count()
|
||||
|
||||
@property
|
||||
def success_rate(self):
|
||||
try:
|
||||
return int(100 * (float(self.verified_count) / float(self.data_count)))
|
||||
except:
|
||||
return 0
|
||||
|
||||
@property
|
||||
def empty_rate(self):
|
||||
try:
|
||||
return int(100 * (float(self.empty_count) / float(self.data_count)))
|
||||
except:
|
||||
return 0
|
||||
|
||||
@property
|
||||
def unknown_rate(self):
|
||||
try:
|
||||
return int(100 * (float(self.unknown_count) / float(self.data_count)))
|
||||
except:
|
||||
return 0
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
|
|
@ -616,6 +616,13 @@ def station_view(request, id):
|
|||
'debug': observer.next_pass(sat_ephem),
|
||||
'name': str(satellite.name),
|
||||
'id': str(satellite.id),
|
||||
'success_rate': str(satellite.success_rate),
|
||||
'unknown_rate': str(satellite.unknown_rate),
|
||||
'empty_rate': str(satellite.empty_rate),
|
||||
'data_count': str(satellite.data_count),
|
||||
'verified_count': str(satellite.verified_count),
|
||||
'empty_count': str(satellite.empty_count),
|
||||
'unknown_count': str(satellite.unknown_count),
|
||||
'norad_cat_id': str(satellite.norad_cat_id),
|
||||
'tr': tr.datetime(), # Rise time
|
||||
'azr': azimuth_r, # Rise Azimuth
|
||||
|
@ -689,6 +696,11 @@ def satellite_view(request, id):
|
|||
'name': sat.name,
|
||||
'names': sat.names,
|
||||
'image': sat.image,
|
||||
'success_rate': sat.success_rate,
|
||||
'verified_count': sat.verified_count,
|
||||
'empty_count': sat.empty_count,
|
||||
'unknown_count': sat.unknown_count,
|
||||
'data_count': sat.data_count,
|
||||
}
|
||||
|
||||
return JsonResponse(data, safe=False)
|
||||
|
|
|
@ -216,6 +216,10 @@ CSP_IMG_SRC = (
|
|||
'https://*.satnogs.org',
|
||||
'https://*.google-analytics.com',
|
||||
)
|
||||
CSP_STYLE_SRC = (
|
||||
"'self'",
|
||||
"'unsafe-inline'",
|
||||
)
|
||||
|
||||
|
||||
# Database
|
||||
|
|
|
@ -420,7 +420,7 @@ span.datetime-time {
|
|||
==================== */
|
||||
|
||||
.satellite-info {
|
||||
margin-bottom: 40px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#SatelliteModal li {
|
||||
|
@ -456,3 +456,8 @@ span.datetime-time {
|
|||
visibility: visible;
|
||||
position: initial;
|
||||
}
|
||||
|
||||
.satellite-success {
|
||||
width: 100px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
|
|
@ -12,10 +12,14 @@ $(document).ready(function() {
|
|||
modal.find('.satellite-title').text(data.name);
|
||||
modal.find('.satellite-names').text(data.names);
|
||||
modal.find('#SatelliteModalTitle').text(data.name);
|
||||
modal.find('.satellite-id').text('Norad ID ' + satlink.data('id'));
|
||||
modal.find('.satellite-id').text(satlink.data('id'));
|
||||
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('.satellite-verified').text(data.verified_count);
|
||||
modal.find('.satellite-unknown').text(data.unknown_count);
|
||||
modal.find('.satellite-empty').text(data.empty_count);
|
||||
if (data.image) {
|
||||
modal.find('.satellite-img-full').attr('src', data.image);
|
||||
} else {
|
||||
|
|
|
@ -4,10 +4,10 @@ $(document).ready(function() {
|
|||
'use strict';
|
||||
|
||||
// Render Station success rate
|
||||
var success_rate = $('.progress-bar-success').data('success-rate');
|
||||
var percentagerest = $('.progress-bar-danger').data('percentagerest');
|
||||
$('.progress-bar-success').css('width', success_rate + '%');
|
||||
$('.progress-bar-danger').css('width', percentagerest + '%');
|
||||
var success_rate = $('.gs.progress-bar-success').data('success-rate');
|
||||
var percentagerest = $('.gs.progress-bar-danger').data('percentagerest');
|
||||
$('.gs.progress-bar-success').css('width', success_rate + '%');
|
||||
$('.gs.progress-bar-danger').css('width', percentagerest + '%');
|
||||
|
||||
// Reading data for station
|
||||
var station_info = $('#station-info').data();
|
||||
|
|
|
@ -97,10 +97,10 @@
|
|||
<span class="label label-default">Success Rate</span>
|
||||
<span class="gs-front-data">
|
||||
<div class="progress" title="{{ station.success_rate }}%">
|
||||
<div class="progress-bar progress-bar-success" data-success-rate="{{ station.success_rate }}">
|
||||
<div class="gs progress-bar progress-bar-success" data-success-rate="{{ station.success_rate }}">
|
||||
<span class="sr-only">{{ station.success_rate }}% Complete (success)</span>
|
||||
</div>
|
||||
<div class="progress-bar progress-bar-danger" data-percentagerest="{{ station.success_rate|percentagerest }}">
|
||||
<div class="gs progress-bar progress-bar-danger" data-percentagerest="{{ station.success_rate|percentagerest }}">
|
||||
<span class="sr-only">{{ station.success_rate|percentagerest }}% Complete (danger)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -178,7 +178,7 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
{% regroup station.data_set.all by observation as observations %}
|
||||
{% for observation in observations %}
|
||||
{% for observation in observations|slice:":30" %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{% url 'base:observation_view' id=observation.grouper.id %}">
|
||||
|
@ -258,6 +258,20 @@
|
|||
<a href="#" data-toggle="modal" data-target="#SatelliteModal" data-id="{{ nextpass.norad_cat_id }}">
|
||||
{{ nextpass.norad_cat_id }} - {{ nextpass.name }}
|
||||
</a>
|
||||
<div class="progress satellite-success">
|
||||
<div class="progress-bar progress-bar-success" style="width: {{ nextpass.success_rate }}%"
|
||||
data-toggle="tooltip" data-placement="bottom" title="{{ nextpass.success_rate }}% ({{ nextpass.verified_count }}) Verified">
|
||||
<span class="sr-only">{{ nextpass.success_rate }}% Verified</span>
|
||||
</div>
|
||||
<div class="progress-bar progress-bar-warning" style="width: {{ nextpass.unknown_rate }}%"
|
||||
data-toggle="tooltip" data-placement="bottom" title="{{ nextpass.unknown_rate }}% ({{ nextpass.unknown_count }}) Unknown">
|
||||
<span class="sr-only">{{ nextpass.unknown_rate }}% Unknown</span>
|
||||
</div>
|
||||
<div class="progress-bar progress-bar-danger" style="width: {{ nextpass.empty_rate }}%"
|
||||
data-toggle="tooltip" data-placement="bottom" title="{{ nextpass.empty_rate }}% ({{ nextpass.empty_count }}) Empty">
|
||||
<span class="sr-only">{{ nextpass.empty_rate }}% Empty</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<span class="datetime-date">{{ nextpass.tr|date:"Y-m-d" }}</span>
|
||||
|
|
|
@ -18,23 +18,38 @@
|
|||
<span class="satellite-names"></span>
|
||||
</div>
|
||||
<div class="satellite-info">
|
||||
<span class="label label-default">NORAD ID</span>
|
||||
<span class="satellite-id"></span>
|
||||
</div>
|
||||
<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="satellite-info">
|
||||
<ul class="list-unstyled">
|
||||
<li>
|
||||
<span class="satellite-success"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label label-success satellite-verified" 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-empty" data-toggle="tooltip" data-placement="bottom" title="Empty observations"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue