Added longtime_rank to ReceiverRanking

pull/78/head
Konstantin Gründger 2020-12-04 23:37:56 +01:00
rodzic 6648311a4f
commit 5deabd561c
4 zmienionych plików z 95 dodań i 4 usunięć

Wyświetl plik

@ -9,6 +9,10 @@ class ReceiverRanking(db.Model):
date = db.Column(db.Date)
local_rank = db.Column(db.Integer)
global_rank = db.Column(db.Integer)
longtime_local_rank = db.Column(db.Integer)
longtime_local_rank_delta = db.Column(db.Integer)
longtime_global_rank = db.Column(db.Integer)
longtime_global_rank_delta = db.Column(db.Integer)
max_distance = db.Column(db.Float(precision=2))
max_normalized_quality = db.Column(db.Float(precision=2))

Wyświetl plik

@ -100,6 +100,54 @@ def update_statistics(date_str=None):
WHERE rs.date = '{date_str}' AND rs.is_trustworthy IS TRUE;
""")
db.session.execute(f"""
UPDATE receiver_rankings AS rr
SET
longtime_global_rank = sq3.longtime_global_rank,
longtime_local_rank = sq3.longtime_local_rank
FROM (
SELECT
sq2.receiver_id,
RANK() OVER (ORDER BY sq2.longtime_global_scores DESC) AS longtime_global_rank,
RANK() OVER (PARTITION BY sq2.country_id ORDER BY sq2.longtime_local_scores DESC) AS longtime_local_rank
FROM (
SELECT
sq.receiver_id,
sq.country_id,
SUM(sq.global_scores) AS longtime_global_scores,
SUM(sq.local_scores) AS longtime_local_scores
FROM (
SELECT
rr.receiver_id,
rr.country_id,
rr.date,
MAX(rr.global_rank) OVER (PARTITION BY rr.date) + 1 - rr.global_rank AS global_scores,
MAX(rr.local_rank) OVER (PARTITION BY rr.country_id, rr.date) + 1 - rr.local_rank AS local_scores
FROM receiver_rankings AS rr
) AS sq
WHERE sq.date BETWEEN DATE '{date_str}' - INTEGER '28' AND DATE '{date_str}'
GROUP BY sq.receiver_id, sq.country_id
) AS sq2
) AS sq3
WHERE rr.receiver_id = sq3.receiver_id AND rr.date = '{date_str}';
""")
db.session.execute(f"""
UPDATE receiver_rankings AS rr
SET
longtime_global_rank_delta = sq.longtime_global_rank_yesterday - rr.longtime_global_rank,
longtime_local_rank_delta = sq.longtime_local_rank_yesterday - rr.longtime_local_rank
FROM (
SELECT
rr.receiver_id,
rr.longtime_global_rank AS longtime_global_rank_yesterday,
rr.longtime_local_rank AS longtime_local_rank_yesterday
FROM receiver_rankings AS rr
WHERE rr.date = DATE '{date_str}' - INTEGER '1'
) AS sq
WHERE rr.receiver_id = sq.receiver_id;
""")
db.session.commit()

Wyświetl plik

@ -28,8 +28,8 @@
<th colspan="3">Counter</th>
</tr>
<tr>
<th class="text-right">Local</th>
<th class="text-right">Global</th>
<th class="text-right">Total</th>
<th class="text-right">Today</th>
<th>Name</th>
<th>Airport</th>
<th class="text-right">Distance [km]</th>
@ -41,9 +41,14 @@
{% for entry in ranking %}
{% if sel_country == '' %}
{% set rank = entry.global_rank %}{% set longtime_rank = entry.longtime_global_rank %}{% set longtime_rank_delta = entry.longtime_global_rank_delta %}
{% else %}
{% set rank = entry.local_rank %}{% set longtime_rank = entry.longtime_local_rank %}{% set longtime_rank_delta = entry.longtime_local_rank_delta %}
{% endif %}
<tr>
<td class="text-right">{{ entry.local_rank }}</td>
<td class="text-right">{{ entry.global_rank }}</td>
<td class="text-right">{{ longtime_rank }} ({% if longtime_rank_delta is none or longtime_rank_delta == 0%}±0{% elif longtime_rank_delta > 0 %}<span class="text-success">+{{ longtime_rank_delta }}</span>{% else %}<span class="text-danger">{{ longtime_rank_delta }}</span>{% endif %})</td>
<td class="text-right">{{ rank }}</td>
<td><img src="{{ url_for('static', filename='img/Transparent.gif') }}" class="flag flag-{{ entry.receiver.country.iso2|lower }}" alt="{{ entry.receiver.country.iso2 }}"/> {{ entry.receiver|to_html_link|safe }}</td>
<td>{{ entry.receiver.airport|to_html_link|safe }}</td>
<td class="text-right">{{ '%0.1f' | format(entry.max_distance/1000.0) }}</td>

Wyświetl plik

@ -0,0 +1,34 @@
"""Added longtime_rank to ReceiverRanking
Revision ID: 310027ddeea9
Revises: eb571174e4b2
Create Date: 2020-12-04 22:11:31.958278
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '310027ddeea9'
down_revision = 'eb571174e4b2'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('receiver_rankings', sa.Column('longtime_local_rank', sa.Integer(), nullable=True))
op.add_column('receiver_rankings', sa.Column('longtime_local_rank_delta', sa.Integer(), nullable=True))
op.add_column('receiver_rankings', sa.Column('longtime_global_rank', sa.Integer(), nullable=True))
op.add_column('receiver_rankings', sa.Column('longtime_global_rank_delta', sa.Integer(), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('receiver_rankings', 'longtime_global_rank_delta')
op.drop_column('receiver_rankings', 'longtime_global_rank')
op.drop_column('receiver_rankings', 'longtime_local_rank_delta')
op.drop_column('receiver_rankings', 'longtime_local_rank')
# ### end Alembic commands ###