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
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))
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))
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))
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
def _get_restore_response(self): return get_restore_response( self.user.domain, self.user, app_id=self.app_id, **get_restore_params(self.request) )
def _raw_restore_response(self): streaming_response, _ = get_restore_response(self.domain, self.user, version='2.0') return list(streaming_response.streaming_content)[0]