Source code for oct.results.stats_handler

import os
import ujson

from oct.utilities.configuration import get_db_uri
from oct.results.models import Result, Turret, set_database, db


[docs]def init_stats(output_dir, config): """Init all required ressources for stats handling :param str output_dir: the output directory for the results :param dict config: the project configuration """ try: os.makedirs(output_dir, 0o755) except OSError as e: print("ERROR: Can not create output directory: %s\n" % e) raise db_uri = get_db_uri(config, output_dir) set_database(db_uri, db, config) tables_to_create = [t for t in [Result, Turret] if not t.table_exists()] db.get_conn() db.create_tables(tables_to_create)
[docs]class StatsHandler(object): """This class will handle results and stats comming from the turrets""" def __init__(self, insert_limit=150): self.results = [] self.insert_limit = insert_limit
[docs] def write_result(self, data): """Write the results received to the database :param dict data: the data to save in database :return: None """ data['custom_timers'] = ujson.dumps(data['custom_timers']) self.results.append(data) if len(self.results) >= 150: # 150 rows for SQLite default limit with db.execution_context(): with db.atomic(): Result.insert_many(self.results).execute() del self.results[:]
[docs] def write_remaining(self): """Write the remaning stack content """ if not self.results: return with db.execution_context(): with db.atomic(): Result.insert_many(self.results).execute() del self.results[:]