pull/68/head
Konstantin Gründger 2017-12-10 20:07:37 +01:00
rodzic 28a25048f6
commit 3956a11aa5
2 zmienionych plików z 40 dodań i 6 usunięć

Wyświetl plik

@ -5,7 +5,7 @@ from sqlalchemy.sql import func, null
from sqlalchemy.sql.expression import true, false from sqlalchemy.sql.expression import true, false
from ogn.collect.celery import app from ogn.collect.celery import app
from ogn.model import TakeoffLanding, Logbook from ogn.model import TakeoffLanding, Logbook, AircraftBeacon
logger = get_task_logger(__name__) logger = get_task_logger(__name__)
@ -157,3 +157,35 @@ def update_logbook(session=None):
logger.debug("New logbook entries: {}".format(insert_counter)) logger.debug("New logbook entries: {}".format(insert_counter))
return "{}/{}".format(update_counter, insert_counter) return "{}/{}".format(update_counter, insert_counter)
@app.task
def update_max_altitude(session=None):
logger.info("Update logbook max altitude.")
if session is None:
session = app.session
logbook_entries = session.query(Logbook.id) \
.filter(and_(Logbook.takeoff_timestamp != null(), Logbook.landing_timestamp != null(), Logbook.max_altitude == null())) \
.limit(1000) \
.subquery()
max_altitudes = session.query(Logbook.id, func.max(AircraftBeacon.altitude).label('max_altitude')) \
.filter(Logbook.id == logbook_entries.c.id) \
.filter(and_(AircraftBeacon.device_id == Logbook.device_id,
AircraftBeacon.timestamp >= Logbook.takeoff_timestamp,
AircraftBeacon.timestamp <= Logbook.landing_timestamp)) \
.group_by(Logbook.id) \
.subquery()
update_logbook = app.session.query(Logbook) \
.filter(Logbook.id == max_altitudes.c.id) \
.update({
Logbook.max_altitude: max_altitudes.c.max_altitude},
synchronize_session='fetch')
session.commit()
logger.info("Logbook: {} entries updated.".format(update_logbook))
return update_logbook

Wyświetl plik

@ -42,6 +42,12 @@ def update_takeoff_landing(session=None):
AircraftBeacon.receiver_id) AircraftBeacon.receiver_id)
# make a query with current, previous and next position # make a query with current, previous and next position
beacon_selection = session.query(AircraftBeacon.id) \
.filter(AircraftBeacon.status == null()) \
.order_by(AircraftBeacon.timestamp) \
.limit(1000000) \
.subquery()
sq = session.query( sq = session.query(
AircraftBeacon.id, AircraftBeacon.id,
func.lag(AircraftBeacon.id).over(order_by=wo).label('id_prev'), func.lag(AircraftBeacon.id).over(order_by=wo).label('id_prev'),
@ -49,8 +55,7 @@ def update_takeoff_landing(session=None):
AircraftBeacon.device_id, AircraftBeacon.device_id,
func.lag(AircraftBeacon.device_id).over(order_by=wo).label('device_id_prev'), func.lag(AircraftBeacon.device_id).over(order_by=wo).label('device_id_prev'),
func.lead(AircraftBeacon.device_id).over(order_by=wo).label('device_id_next')) \ func.lead(AircraftBeacon.device_id).over(order_by=wo).label('device_id_next')) \
.filter(AircraftBeacon.status == null()) \ .filter(AircraftBeacon.id == beacon_selection.c.id) \
.filter(and_(AircraftBeacon.timestamp >= '2017-12-09 11:00:00', AircraftBeacon.timestamp <= '2017-12-09 18:00:00')) \
.subquery() .subquery()
# consider only positions with the same device id # consider only positions with the same device id
@ -58,9 +63,6 @@ def update_takeoff_landing(session=None):
.filter(sq.c.device_id_prev == sq.c.device_id == sq.c.device_id_next) \ .filter(sq.c.device_id_prev == sq.c.device_id == sq.c.device_id_next) \
.subquery() .subquery()
print(sq2)
return
# Get timestamps, locations, tracks, ground_speeds and altitudes # Get timestamps, locations, tracks, ground_speeds and altitudes
prev_ab = aliased(AircraftBeacon, name="prev_ab") prev_ab = aliased(AircraftBeacon, name="prev_ab")
lead_ab = aliased(AircraftBeacon, name="lead_ab") lead_ab = aliased(AircraftBeacon, name="lead_ab")