From 5deabd561c6112e9744d27c4e91125d2be18675a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Fri, 4 Dec 2020 23:37:56 +0100 Subject: [PATCH] Added longtime_rank to ReceiverRanking --- app/model/receiver_ranking.py | 4 ++ app/tasks/sql_tasks.py | 48 +++++++++++++++++++ app/templates/receiver_ranking.html | 13 +++-- ..._added_longtime_rank_to_receiverranking.py | 34 +++++++++++++ 4 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 migrations/versions/310027ddeea9_added_longtime_rank_to_receiverranking.py diff --git a/app/model/receiver_ranking.py b/app/model/receiver_ranking.py index ee43627..30aeb58 100644 --- a/app/model/receiver_ranking.py +++ b/app/model/receiver_ranking.py @@ -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)) diff --git a/app/tasks/sql_tasks.py b/app/tasks/sql_tasks.py index b4e3857..769a51e 100644 --- a/app/tasks/sql_tasks.py +++ b/app/tasks/sql_tasks.py @@ -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() diff --git a/app/templates/receiver_ranking.html b/app/templates/receiver_ranking.html index a0acbb7..4e28b85 100644 --- a/app/templates/receiver_ranking.html +++ b/app/templates/receiver_ranking.html @@ -28,8 +28,8 @@ Counter - Local - Global + Total + Today Name Airport Distance [km] @@ -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 %} - {{ entry.local_rank }} - {{ entry.global_rank }} + {{ longtime_rank }} ({% if longtime_rank_delta is none or longtime_rank_delta == 0%}±0{% elif longtime_rank_delta > 0 %}+{{ longtime_rank_delta }}{% else %}{{ longtime_rank_delta }}{% endif %}) + {{ rank }} {{ entry.receiver.country.iso2 }} {{ entry.receiver|to_html_link|safe }} {{ entry.receiver.airport|to_html_link|safe }} {{ '%0.1f' | format(entry.max_distance/1000.0) }} diff --git a/migrations/versions/310027ddeea9_added_longtime_rank_to_receiverranking.py b/migrations/versions/310027ddeea9_added_longtime_rank_to_receiverranking.py new file mode 100644 index 0000000..8e9e441 --- /dev/null +++ b/migrations/versions/310027ddeea9_added_longtime_rank_to_receiverranking.py @@ -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 ###