Example #1
0
def get_deserialized_filter(dp_id):
    """Cached, deserialized version.
    """
    logger.debug("Getting filters")
    key = 'clk-pkl-{}'.format(dp_id)
    r = connect_to_redis(read_only=True)

    # Check if this dp_id is already saved in redis?
    if r.exists(key):
        logger.debug("returning filters from cache")
        return pickle.loads(r.get(key))
    else:
        logger.debug("Looking up popcounts and filename from database")
        db = database.connect_db()
        mc = connect_to_object_store()
        serialized_filters_file = database.get_filter_metadata(db, dp_id)

        logger.debug("Getting filters from object store")

        # Note this uses already calculated popcounts unlike
        # serialization.deserialize_filters()
        raw_data_response = mc.get_object(config.MINIO_BUCKET,
                                          serialized_filters_file)
        python_filters = serialization.binary_unpack_filters(raw_data_response)

        set_deserialized_filter(dp_id, python_filters)
        return python_filters
Example #2
0
def calculate_comparison_rate():
    dbinstance = connect_db()
    logger.info("Calculating global comparison rate")

    total_comparisons = 0
    total_time = timedelta(0)
    for run in get_elapsed_run_times(dbinstance):

        comparisons = get_total_comparisons_for_project(
            dbinstance, run['project_id'])

        if comparisons != 'NA':
            total_comparisons += comparisons
        else:
            logger.debug("Skipping run as it hasn't completed")
        total_time += run['elapsed']

    if total_time.total_seconds() > 0:
        rate = total_comparisons / total_time.total_seconds()
        logger.info("Total comparisons: {}".format(total_comparisons))
        logger.info("Total time:        {}".format(total_time.total_seconds()))
        logger.info("Comparison rate:   {}".format(rate))

        with dbinstance.cursor() as cur:
            insert_comparison_rate(cur, rate)

        dbinstance.commit()
    else:
        logger.warning("Can't compute comparison rate yet")
Example #3
0
def get_db():
    """Opens a new database connection if there is none yet for the
    current flask application context.
    """
    conn = getattr(g, 'db', None)
    if conn is None:
        logger.debug("Caching a new database connection in application context")
        conn = g.db = database.connect_db()
    return conn
Example #4
0
def clks_uploaded_to_project(project_id, check_data_ready=False):
    """ See if the given project has had all parties contribute data.
    """
    logger.info("Counting contributing parties")
    conn = connect_db()
    if check_data_ready:
        parties_contributed = get_number_parties_ready(conn, project_id)
        logger.info("Parties where data is ready: {}".format(parties_contributed))
    else:
        parties_contributed = get_number_parties_uploaded(conn, project_id)
        logger.info("Parties where data is uploaded: {}".format(parties_contributed))
    number_parties = get_project_column(conn, project_id, 'parties')
    logger.info("{}/{} parties have contributed clks".format(parties_contributed, number_parties))
    return parties_contributed == number_parties
def remove_project(project_id):
    """

    """
    log = logger.bind(pid=project_id)
    log.debug("Remove all project resources")

    conn = db.connect_db()
    log.debug("Deleting project resourced from database")
    db.delete_project_data(conn, project_id)
    log.debug(
        "Getting object store files associated with project from database")
    object_store_files = db.get_all_objects_for_project(conn, project_id)
    log.debug(
        f"Removing {len(object_store_files)} object store files associated with project."
    )
    delete_minio_objects.delay(object_store_files, project_id)
    log.info("Project resources removed")