2019-02-10 17:39:06 +00:00
from flask . cli import AppGroup
import click
from datetime import datetime
from tqdm import tqdm
2019-08-31 08:14:41 +00:00
from app . commands . database import get_database_days
2019-02-10 17:39:06 +00:00
2019-08-31 08:14:41 +00:00
from app . collect . stats import (
create_device_stats ,
create_receiver_stats ,
create_relation_stats ,
create_country_stats ,
update_qualities ,
update_receivers as update_receivers_command ,
update_devices as update_devices_command ,
update_device_stats_jumps ,
)
2019-02-10 17:39:06 +00:00
2019-08-31 08:14:41 +00:00
from app . collect . ognrange import update_entries as update_receiver_coverages
2019-09-14 06:27:35 +00:00
from app . model import Device
2019-02-10 17:39:06 +00:00
2019-08-31 08:14:41 +00:00
from app import db
2019-02-10 17:39:06 +00:00
2019-08-31 08:14:41 +00:00
user_cli = AppGroup ( " stats " )
2019-02-10 17:39:06 +00:00
user_cli . help = " Handling of statistical data. "
2019-08-31 08:14:41 +00:00
@user_cli.command ( " create " )
@click.argument ( " start " )
@click.argument ( " end " )
2019-02-10 17:39:06 +00:00
def create ( start , end ) :
""" Create DeviceStats, ReceiverStats and RelationStats. """
days = get_database_days ( start , end )
pbar = tqdm ( days )
for single_date in pbar :
2019-08-31 08:14:41 +00:00
pbar . set_description ( datetime . strftime ( single_date , " % Y- % m- %d " ) )
2019-02-10 17:39:06 +00:00
result = create_device_stats ( session = db . session , date = single_date )
result = update_device_stats_jumps ( session = db . session , date = single_date )
result = create_receiver_stats ( session = db . session , date = single_date )
result = create_relation_stats ( session = db . session , date = single_date )
result = update_qualities ( session = db . session , date = single_date )
2019-08-31 08:14:41 +00:00
@user_cli.command ( " create_country " )
@click.argument ( " start " )
@click.argument ( " end " )
2019-03-06 20:11:46 +00:00
def create_country ( start , end ) :
""" Create CountryStats. """
days = get_database_days ( start , end )
pbar = tqdm ( days )
for single_date in pbar :
2019-08-31 08:14:41 +00:00
pbar . set_description ( datetime . strftime ( single_date , " % Y- % m- %d " ) )
2019-03-06 20:11:46 +00:00
result = create_country_stats ( session = db . session , date = single_date )
2019-08-31 08:14:41 +00:00
@user_cli.command ( " update_devices_name " )
2019-03-06 20:11:46 +00:00
def update_devices_name ( ) :
""" Update Devices name. """
device_ids = db . session . query ( Device . id ) . all ( )
for device_id in tqdm ( device_ids ) :
2019-08-31 08:14:41 +00:00
db . session . execute (
" update devices d set name = sq.name from ( select * from aircraft_beacons ab where ab.device_id = {} limit 1) sq where d.id = sq.device_id and d.name is null or d.name = ' ICA3D3CC4 ' ; " . format (
device_id [ 0 ]
)
)
2019-03-06 20:11:46 +00:00
db . session . commit ( )
2019-02-10 17:39:06 +00:00
2019-08-31 08:14:41 +00:00
@user_cli.command ( " update_receivers " )
2019-02-10 17:39:06 +00:00
def update_receivers ( ) :
""" Update receivers with data from stats. """
result = update_receivers_command ( session = db . session )
print ( result )
2019-08-31 08:14:41 +00:00
@user_cli.command ( " update_devices " )
2019-02-10 17:39:06 +00:00
def update_devices ( ) :
""" Update devices with data from stats. """
result = update_devices_command ( session = db . session )
print ( result )
2019-08-31 08:14:41 +00:00
@user_cli.command ( " update_mgrs " )
@click.argument ( " start " )
@click.argument ( " end " )
2019-03-06 20:11:46 +00:00
def update_mgrs ( start , end ) :
""" Create location_mgrs_short. """
days = get_database_days ( start , end )
pbar = tqdm ( days )
for single_date in pbar :
2019-08-31 08:14:41 +00:00
datestr = datetime . strftime ( single_date , " % Y- % m- %d " )
2019-03-06 20:11:46 +00:00
pbar . set_description ( datestr )
for pbar2 in tqdm ( [ " {:02d} : {:02d} " . format ( hh , mm ) for hh in range ( 0 , 24 ) for mm in range ( 0 , 60 ) ] ) :
sql = """
UPDATE aircraft_beacons
SET location_mgrs_short = left ( location_mgrs , 5 ) | | substring ( location_mgrs , 6 , 2 ) | | substring ( location_mgrs , 11 , 2 )
WHERE timestamp BETWEEN ' {0} {1} :00 ' and ' {0} {1} :59 ' AND location_mgrs_short IS NULL ;
2019-08-31 08:14:41 +00:00
""" .format(
datestr , pbar2
)
2019-03-06 20:11:46 +00:00
2019-08-31 08:14:41 +00:00
# print(sql)
2019-03-06 20:11:46 +00:00
db . session . execute ( sql )
db . session . commit ( )
2019-08-31 08:14:41 +00:00
@user_cli.command ( " create_ognrange " )
@click.argument ( " start " )
@click.argument ( " end " )
2019-02-10 17:39:06 +00:00
def create_ognrange ( start = None , end = None ) :
2019-04-14 20:07:52 +00:00
""" Create receiver coverage stats for Melissas ognrange. """
2019-02-10 17:39:06 +00:00
days = get_database_days ( start , end )
pbar = tqdm ( days )
for single_date in pbar :
2019-08-31 08:14:41 +00:00
pbar . set_description ( datetime . strftime ( single_date , " % Y- % m- %d " ) )
2019-04-14 20:07:52 +00:00
result = update_receiver_coverages ( session = db . session , date = single_date )