示例#1
0
def db_for_read_write(model, write=True):
    """
    :param model: Django model being queried
    :param write: Default to True since the DB for writes can also handle reads
    :return: Django DB alias to use for query
    """
    app_label = model._meta.app_label

    if app_label == SYNCLOGS_APP:
        return settings.SYNCLOGS_SQL_DB_ALIAS
    elif app_label == ICDS_REPORTS_APP:
        return connection_manager.get_django_db_alias(ICDS_UCR_CITUS_ENGINE_ID)
    elif app_label == AAA_APP:
        engine_id = AAA_DB_ENGINE_ID
        if not write:
            return connection_manager.get_load_balanced_read_db_alias(AAA_DB_ENGINE_ID)
        return connection_manager.get_django_db_alias(engine_id)

    if not settings.USE_PARTITIONED_DATABASE:
        return DEFAULT_DB_ALIAS

    if app_label == BLOB_DB_APP:
        if hasattr(model, 'partition_attr'):
            return partition_config.proxy_db
        return DEFAULT_DB_ALIAS
    if app_label == FORM_PROCESSOR_APP:
        return partition_config.proxy_db
    else:
        default_db = DEFAULT_DB_ALIAS
        if not write:
            return get_load_balanced_app_db(app_label, default_db)
        return default_db
示例#2
0
def db_for_read_write(model, write=True):
    """
    :param model: Django model being queried
    :param write: Default to True since the DB for writes can also handle reads
    :return: Django DB alias to use for query
    """
    app_label = model._meta.app_label

    if app_label == WAREHOUSE_APP:
        return settings.WAREHOUSE_DATABASE_ALIAS
    elif app_label == SYNCLOGS_APP:
        return settings.SYNCLOGS_SQL_DB_ALIAS

    if not settings.USE_PARTITIONED_DATABASE:
        return 'default'

    if app_label == FORM_PROCESSOR_APP:
        return partition_config.get_proxy_db()
    elif app_label in (ICDS_MODEL, ICDS_REPORTS_APP):
        engine_id = ICDS_UCR_ENGINE_ID
        if not write:
            engine_id = connection_manager.get_load_balanced_read_db_alais(ICDS_UCR_ENGINE_ID)
        return connection_manager.get_django_db_alias(engine_id)
    else:
        default_db = partition_config.get_main_db()
        if not write:
            return connection_manager.get_load_balanced_read_db_alais(app_label, default_db)
        return default_db
示例#3
0
def db_for_read_write(model, write=True, hints=None):
    """
    :param model: Django model being queried
    :param write: Default to True since the DB for writes can also handle reads
    :return: Django DB alias to use for query
    """
    hints = hints or {}
    app_label = model._meta.app_label

    if app_label == SYNCLOGS_APP:
        return settings.SYNCLOGS_SQL_DB_ALIAS

    if app_label in settings.CUSTOM_DB_ROUTING:
        db_alias = settings.CUSTOM_DB_ROUTING[app_label]
        if db_alias not in settings.DATABASES:
            db_alias = connection_manager.get_django_db_alias(db_alias)
        return db_alias

    if not settings.USE_PARTITIONED_DATABASE:
        return DEFAULT_DB_ALIAS

    if app_label == BLOB_DB_APP:
        if hasattr(model, 'partition_attr'):
            return get_read_write_db_for_partitioned_model(model, hints, write)
        return DEFAULT_DB_ALIAS
    if app_label in (FORM_PROCESSOR_APP, SCHEDULING_PARTITIONED_APP):
        return get_read_write_db_for_partitioned_model(model, hints, write)
    else:
        default_db = DEFAULT_DB_ALIAS
        if not write:
            return get_load_balanced_app_db(app_label, default_db)
        return default_db
 def _get_table_size(config):
     table_name = get_table_name(config.domain, config.table_id)
     db_name = connection_manager.get_django_db_alias(config.engine_id)
     db_cursor = connections[db_name].cursor()
     with db_cursor as cursor:
         cursor.execute("SELECT pg_total_relation_size('\"%s\"')" % table_name, [])
         bytes = cursor.fetchone()[0]
         return bytes
 def _get_count(config):
     table_name = get_table_name(config.domain, config.table_id)
     db_name = connection_manager.get_django_db_alias(config.engine_id)
     return _get_count_from_explain_raw(
         db_name,
         'SELECT * FROM "%s"' % table_name,
         []
     )
示例#6
0
 def _get_count(config):
     table_name = get_table_name(config.domain, config.table_id)
     db_name = connection_manager.get_django_db_alias(config.engine_id)
     query = ('SELECT * FROM "%s"' % table_name, [])
     try:
         return estimate_row_count(query, db_name)
     except ProgrammingError:
         return "Table not found"
    def handle(self, engine_id, **options):
        db_alias = connection_manager.get_django_db_alias(engine_id)

        call_options = copy(options)
        call_options['database'] = db_alias
        call_command('migrate', **call_options)

        for ds in StaticDataSourceConfiguration.by_domain(DASHBOARD_DOMAIN):
            if engine_id == ds.engine_id or engine_id in ds.mirrored_engine_ids:
                adapter = IndicatorSqlAdapter(ds, engine_id=engine_id)
                adapter.build_table()
示例#8
0
def db_for_read_write(model, write=True):
    """
    :param model: Django model being queried
    :param write: Default to True since the DB for writes can also handle reads
    :return: Django DB alias to use for query
    """
    app_label = model._meta.app_label

    if app_label == WAREHOUSE_APP:
        return settings.WAREHOUSE_DATABASE_ALIAS
    elif app_label == SYNCLOGS_APP:
        return settings.SYNCLOGS_SQL_DB_ALIAS
    elif app_label == ICDS_REPORTS_APP:
        engine_id = ICDS_UCR_ENGINE_ID
        if not write:
            engine_id = connection_manager.get_load_balanced_read_db_alias(ICDS_UCR_ENGINE_ID)
        return connection_manager.get_django_db_alias(engine_id)
    elif app_label == AAA_APP:
        engine_id = AAA_DB_ENGINE_ID
        if not write:
            engine_id = connection_manager.get_load_balanced_read_db_alias(AAA_DB_ENGINE_ID)
        return connection_manager.get_django_db_alias(engine_id)

    if not settings.USE_PARTITIONED_DATABASE:
        return 'default'

    if app_label == BLOB_DB_APP:
        if hasattr(model, 'partition_attr'):
            return partition_config.get_proxy_db()
        return 'default'
    if app_label == FORM_PROCESSOR_APP:
        return partition_config.get_proxy_db()
    else:
        default_db = partition_config.get_main_db()
        if not write:
            return connection_manager.get_load_balanced_read_db_alias(app_label, default_db)
        return default_db
示例#9
0
def compute_awws_in_vhnd_timeframe(domain):
    """
    This computes awws with vhsnd_date_past_month less than 37 days.

    Result is cached in local memory, so that indvidual reminder tasks
    per AWW/LS dont hit the database each time
    """
    table = get_table_name(domain, 'static-vhnd_form')
    query = """
    SELECT DISTINCT awc_id
    FROM "{table}"
    WHERE vhsnd_date_past_month > %(37_days_ago)s
    """.format(table=table)
    cutoff = datetime.now(tz=pytz.timezone('Asia/Kolkata')).date()
    query_params = {"37_days_ago": cutoff - timedelta(days=37)}

    datasource_id = StaticDataSourceConfiguration.get_doc_id(domain, 'static-vhnd_form')
    data_source = StaticDataSourceConfiguration.by_id(datasource_id)
    django_db = connection_manager.get_django_db_alias(data_source.engine_id)
    with connections[django_db].cursor() as cursor:
        cursor.execute(query, query_params)
        return {row[0] for row in cursor.fetchall()}
示例#10
0
def db_for_read_write(model, write=True):
    """
    :param model: Django model being queried
    :param write: Default to True since the DB for writes can also handle reads
    :return: Django DB alias to use for query
    """
    if not settings.USE_PARTITIONED_DATABASE:
        return 'default'

    app_label = model._meta.app_label
    if app_label == FORM_PROCESSOR_APP:
        return partition_config.get_proxy_db()
    elif app_label == WAREHOUSE_APP:
        error_msg = 'Cannot read/write to warehouse db without warehouse database defined'
        assert hasattr(settings, "WAREHOUSE_DATABASE_ALIAS"), error_msg
        return settings.WAREHOUSE_DATABASE_ALIAS
    elif app_label == ICDS_MODEL:
        engine_id = ICDS_UCR_ENGINE_ID
        if not write:
            engine_id = connection_manager.get_load_balanced_read_engine_id(
                ICDS_UCR_ENGINE_ID)
        return connection_manager.get_django_db_alias(engine_id)
    else:
        return partition_config.get_main_db()
示例#11
0
 def _get_count(config):
     table_name = get_table_name(config.domain, config.table_id)
     db_name = connection_manager.get_django_db_alias(config.engine_id)
     query = ('SELECT * FROM "%s"' % table_name, [])
     return estimate_row_count(query, db_name)