Bulk insert once per second

pull/68/head
Konstantin Gründger 2017-12-13 20:19:11 +01:00
rodzic 6aa99bd18f
commit 61939913b5
1 zmienionych plików z 17 dodań i 2 usunięć

Wyświetl plik

@ -3,6 +3,7 @@ import logging
from ogn.commands.dbutils import session from ogn.commands.dbutils import session
from ogn.model import AircraftBeacon, ReceiverBeacon, Location from ogn.model import AircraftBeacon, ReceiverBeacon, Location
from ogn.parser import parse, ParseError from ogn.parser import parse, ParseError
from datetime import datetime, timedelta
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -42,10 +43,24 @@ def message_to_beacon(raw_message, reference_date):
return beacon return beacon
beacons = list()
last_commit = datetime.utcnow()
def process_beacon(raw_message, reference_date=None): def process_beacon(raw_message, reference_date=None):
global beacons
global last_commit
beacon = message_to_beacon(raw_message, reference_date) beacon = message_to_beacon(raw_message, reference_date)
if beacon is not None: if beacon is not None:
session.add(beacon) beacons.append(beacon)
session.commit()
logger.debug('Received message: {}'.format(raw_message)) logger.debug('Received message: {}'.format(raw_message))
current_time = datetime.utcnow()
elapsed_time = current_time - last_commit
if elapsed_time >= timedelta(seconds=1):
session.bulk_save_objects(beacons)
session.commit()
logger.debug('Commited beacons')
beacons = list()
last_commit = current_time