Example #1
0
def prime_restore(user_ids, version=V1, cache_timeout=None, overwrite_cache=False):
    from corehq.apps.ota.views import get_restore_response
    total = len(user_ids)
    DownloadBase.set_progress(prime_restore, 0, total)

    ret = {'messages': []}
    for i, user_id in enumerate(user_ids):
        try:
            couch_user = CommCareUser.get(user_id)
        except ResourceNotFound:
            ret['messages'].append('User not found: {}'.format(user_id))
            continue

        try:
            get_restore_response(
                couch_user.domain,
                couch_user,
                since=None,
                version=version,
                force_cache=True,
                cache_timeout=cache_timeout,
                overwrite_cache=overwrite_cache
            )
        except Exception as e:
            ret['messages'].append('Error processing user: {}'.format(str(e)))

        DownloadBase.set_progress(prime_restore, i + 1, total)

    return ret
Example #2
0
def admin_restore(request):
    full_username = request.GET.get('as', '')
    if not full_username or '@' not in full_username:
        return HttpResponseBadRequest('Please specify a user using ?as=user@domain')

    username, domain = full_username.split('@')
    if not domain.endswith(settings.HQ_ACCOUNT_ROOT):
        full_username = format_username(username, domain)

    user = CommCareUser.get_by_username(full_username)
    if not user:
        return HttpResponseNotFound('User %s not found.' % full_username)
    return get_restore_response(user, **get_restore_params(request))
Example #3
0
def admin_restore(request):
    full_username = request.GET.get('as', '')
    if not full_username or '@' not in full_username:
        return HttpResponseBadRequest('Please specify a user using ?as=user@domain')

    username, domain = full_username.split('@')
    if not domain.endswith(settings.HQ_ACCOUNT_ROOT):
        full_username = format_username(username, domain)

    user = CommCareUser.get_by_username(full_username)
    if not user:
        return HttpResponseNotFound('User %s not found.' % full_username)
    return get_restore_response(user.domain, user, **get_restore_params(request))
Example #4
0
def admin_restore(request):
    full_username = request.GET.get("as", "")
    if not full_username or "@" not in full_username:
        return HttpResponseBadRequest("Please specify a user using ?as=user@domain")

    username, domain = full_username.split("@")
    if not domain.endswith(settings.HQ_ACCOUNT_ROOT):
        full_username = format_username(username, domain)

    user = CommCareUser.get_by_username(full_username)
    if not user:
        return HttpResponseNotFound("User %s not found." % full_username)

    overwrite_cache = request.GET.get("ignore_cache") == "true"
    return get_restore_response(user.domain, user, overwrite_cache=overwrite_cache, **get_restore_params(request))
Example #5
0
def _get_headers_and_rows(domain, users, app_id):
    fixture_names = set()
    rows = []
    for user in users:
        response, timing_context = get_restore_response(
            domain,
            user,
            app_id=app_id,
        )
        timing_dict = timing_context.to_dict()
        xml_payload = etree.fromstring(b''.join(response.streaming_content))
        stats = AdminRestoreView.get_stats_from_xml(xml_payload)
        row = {
            'timestamp': datetime.datetime.now().isoformat(),
            'username': user.username,
            'total_duration': timing_dict['duration'],
            'num_cases': stats['num_cases'],
            'num_locations': stats['num_locations'],
            'num_v1_reports': stats['num_v1_reports'],
            'num_v2_reports': stats['num_v2_reports'],
            'num_ledger_entries': stats['num_ledger_entries'],
        }
        for provider in timing_dict['subs']:
            row[provider['name']] = provider['duration']
            if provider['name'] == 'FixtureElementProvider':
                for fixture in provider['subs']:
                    fixture_names.add(fixture['name'])
                    row[fixture['name']] = fixture['duration']
        rows.append(row)
        print("Restore for '{}' took {} seconds to generate".format(
            user.username, timing_dict['duration']))

    headers = [
        'username',
        'timestamp',
        'total_duration',
        'num_cases',
        'num_locations',
        'num_v1_reports',
        'num_v2_reports',
        'num_ledger_entries',
        'RegistrationElementProvider',
        'CasePayloadProvider',
        'SyncElementProvider',
        'FixtureElementProvider',
    ] + sorted(fixture_names)

    return headers, rows
Example #6
0
 def _get_restore_response(self):
     return get_restore_response(
         self.user.domain, self.user, app_id=self.app_id,
         **get_restore_params(self.request)
     )
Example #7
0
 def _raw_restore_response(self):
     streaming_response, _ = get_restore_response(self.domain, self.user, version='2.0')
     return list(streaming_response.streaming_content)[0]
 def _raw_restore_response(self):
     streaming_response, _ = get_restore_response(self.domain,
                                                  self.user,
                                                  version='2.0')
     return list(streaming_response.streaming_content)[0]
Example #9
0
 def _get_restore_response(self):
     return get_restore_response(
         self.user.domain, self.user, app_id=self.app_id,
         **get_restore_params(self.request)
     )