示例#1
0
    def _case_to_case_index_ratio(self):
        if not should_use_sql_backend(self.domain):
            self.stdout.write('\nUnable to get case to index ratio of Couch domain\n')
            return

        db_name = get_db_aliases_for_partitioned_query()[0]  # just query one shard DB
        case_query = CommCareCaseSQL.objects.using(db_name).filter(domain=self.domain)
        index_query = CommCareCaseIndexSQL.objects.using(db_name).filter(domain=self.domain)
        case_count = estimate_row_count(case_query, db_name)
        case_index_count = estimate_row_count(index_query, db_name)
        self._print_value('Ratio of cases to case indices: 1 : ', case_index_count / case_count)
示例#2
0
 def _case_to_case_index_ratio(self):
     db_name = get_db_aliases_for_partitioned_query()[
         0]  # just query one shard DB
     case_query = CommCareCase.objects.using(db_name).filter(
         domain=self.domain)
     index_query = CommCareCaseIndex.objects.using(db_name).filter(
         domain=self.domain)
     case_count = estimate_row_count(case_query, db_name)
     case_index_count = estimate_row_count(index_query, db_name)
     self._print_value('Ratio of cases to case indices: 1 : ',
                       case_index_count / case_count)
示例#3
0
    def get_approximate_doc_count(self, from_db):
        """Get the approximate doc count from the given DB

        :param from_db: The DB alias to query
        """
        query = self.query(from_db, for_count=True)
        return estimate_row_count(query, from_db)
示例#4
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"
示例#5
0
def get_sql_repeat_record_count(domain, repeater_id=None, state=None):
    from .models import SQLRepeatRecord

    queryset = SQLRepeatRecord.objects.filter(domain=domain)
    if repeater_id:
        queryset = queryset.filter(repeater__repeater_id=repeater_id)
    if state:
        queryset = queryset.filter(state=state)
    return estimate_row_count(queryset)
def delete_old_images_on_db(db_name, cutoff):
    if isinstance(cutoff, str):
        cutoff = parse_date(cutoff, default_timezone=None)

    max_age = cutoff - timedelta(days=90)
    db = get_blob_db()

    def _get_query(db_name, max_age=max_age):
        return BlobMeta.objects.using(db_name).filter(
            type_code=CODES.form_attachment,
            domain='icds-cas',
            created_on__lt=max_age).order_by('created_on')

    bytes_deleted = 0
    query = _get_query(db_name)
    metas = list(query[:1000])
    run_again = len(metas) == 1000
    if metas:
        for meta in metas:
            bytes_deleted += meta.content_length or 0
        db.bulk_delete(metas=metas)

        tags = {'database': db_name}
        age = datetime.utcnow() - metas[-1].created_on
        metrics_gauge('commcare.icds_images.max_age',
                      value=age.total_seconds(),
                      tags=tags)
        row_estimate = estimate_row_count(query, db_name)
        metrics_gauge('commcare.icds_images.count_estimate',
                      value=row_estimate,
                      tags=tags)
        metrics_counter('commcare.icds_images.bytes_deleted',
                        value=bytes_deleted)
        metrics_counter('commcare.icds_images.count_deleted', value=len(metas))

    runtime = datetime.utcnow() - cutoff
    if run_again and runtime.total_seconds() < MAX_RUNTIME:
        delete_old_images_on_db.delay(db_name, cutoff)
示例#7
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)