1
0
Fork 0

make large badge number human readable

Signed-off-by: Julien Flawinne <jf.satnogs at protonmail dot com>
spacecruft
deckbsd 2020-07-28 10:06:29 +02:00
parent cbd0ec096a
commit 05d4f8a705
3 changed files with 28 additions and 3 deletions

View File

@ -1,7 +1,9 @@
"""Miscellaneous functions for SatNOGS DB"""
import binascii
import logging
import math
from datetime import datetime, timedelta
from decimal import Decimal
from django.conf import settings
from django.core.cache import cache
@ -318,3 +320,25 @@ def cache_statistics():
latest_payload=Max('timestamp')) \
.order_by('-count')
cache.set('stats_observers', observers, 60 * 60 * 2)
def remove_exponent(converted_number):
"""Remove exponent."""
return converted_number.quantize(
Decimal(1)
) if converted_number == converted_number.to_integral() else converted_number.normalize()
def millify(number, precision=0):
"""Humanize number."""
millnames = ['', 'k', 'M', 'B', 'T', 'P', 'E', 'Z', 'Y']
number = float(number)
millidx = max(
0,
min(
len(millnames) - 1, int(math.floor(0 if number == 0 else math.log10(abs(number)) / 3))
)
)
result = '{:.{precision}f}'.format(number / 10**(3 * millidx), precision=precision)
result = remove_exponent(Decimal(result))
return '{0}{dx}'.format(result, dx=millnames[millidx])

View File

@ -26,7 +26,7 @@ from db.base.models import SERVICE_TYPE, TRANSMITTER_STATUS, \
TRANSMITTER_TYPE, DemodData, Mode, Satellite, Transmitter, \
TransmitterEntry, TransmitterSuggestion
from db.base.tasks import export_frames
from db.base.utils import cache_statistics
from db.base.utils import cache_statistics, millify
LOGGER = logging.getLogger('db')
@ -183,7 +183,8 @@ def satellite(request, norad):
'latest_frame': latest_frame,
'frame_count': frame_count,
'mapbox_token': settings.MAPBOX_TOKEN,
'recent_observers': recent_observers
'recent_observers': recent_observers,
'badge_telemetry_count': millify(satellite_obj.telemetry_data_count)
}
)

View File

@ -56,7 +56,7 @@
aria-selected="false">
<i class="nav-icon fas fa-chart-bar"></i>
{% if satellite.telemetry_data_count %}
<span class="badge badge-satnogs-primary navbar-badge">{{ satellite.telemetry_data_count }}</span>
<span class="badge badge-satnogs-primary navbar-badge">{{ badge_telemetry_count }}</span>
{% endif %}
<p class="d-none d-lg-inline-block">Data</p>
</a>