def _form_rows(self, domain): time_filter = form_es.submitted datespan = DateSpan(datetime.now() - timedelta(days=self.window), datetime.utcnow()) apps = get_brief_apps_in_domain(domain.name) apps = {a.id: a.name for a in apps} users_filter = form_es.user_id( EMWF.user_es_query( domain.name, ['t__0'], # All mobile workers self.couch_user).values_list('_id', flat=True)) query = (form_es.FormES().domain(domain.name).filter( time_filter(gte=datespan.startdate, lt=datespan.enddate_adjusted)).filter(users_filter)) rows = [] for hit in query.run().hits: username = hit['form']['meta']['username'] submitted = self._format_date( datetime.strptime(hit['received_on'][:19], '%Y-%m-%dT%H:%M:%S')) rows.append([ hit['form']['@name'], submitted, apps[hit['app_id']] if hit['app_id'] in apps else 'App not found', username, ] + self._domain_properties(domain)) return rows
def user_query(self, pagination=True): mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug)) user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = (user_query.set_sorting_block(self.get_sorting_block())) if pagination: user_query = (user_query.size(self.pagination.count).start( self.pagination.start)) if self.selected_app_id: # adding nested filter for reporting_metadata.last_submissions.app_id # and reporting_metadata.last_syncs.app_id when app is selected last_submission_filter = filters.nested( 'reporting_metadata.last_submissions', filters.term('reporting_metadata.last_submissions.app_id', self.selected_app_id)) last_sync_filter = filters.nested( 'reporting_metadata.last_syncs', filters.term("reporting_metadata.last_syncs.app_id", self.selected_app_id)) user_query = user_query.OR(last_submission_filter, last_sync_filter) return user_query
def user_query(self, pagination=True): mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) ) user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = (user_query .set_sorting_block(self.get_sorting_block())) if pagination: user_query = (user_query .size(self.pagination.count) .start(self.pagination.start)) if self.selected_app_id: # adding nested filter for reporting_metadata.last_submissions.app_id # and reporting_metadata.last_syncs.app_id when app is selected last_submission_filter = filters.nested('reporting_metadata.last_submissions', filters.term('reporting_metadata.last_submissions.app_id', self.selected_app_id) ) last_sync_filter = filters.nested('reporting_metadata.last_syncs', filters.term("reporting_metadata.last_syncs.app_id", self.selected_app_id) ) user_query = user_query.OR(last_submission_filter, last_sync_filter ) return user_query
def is_query_too_big(domain, mobile_user_and_group_slugs): from corehq.apps.reports.filters.users import ExpandedMobileWorkerFilter user_es_query = ExpandedMobileWorkerFilter.user_es_query( domain, mobile_user_and_group_slugs, ) return user_es_query.count() > USER_QUERY_LIMIT
def is_query_too_big(domain, mobile_user_and_group_slugs, request_user): from corehq.apps.reports.filters.users import ExpandedMobileWorkerFilter user_es_query = ExpandedMobileWorkerFilter.user_es_query( domain, mobile_user_and_group_slugs, request_user, ) return user_es_query.count() > USER_QUERY_LIMIT
def _get_users_filter(self, mobile_user_and_group_slugs): user_ids = (EMWF.user_es_query(self.domain, mobile_user_and_group_slugs, self.request.couch_user) .values_list('_id', flat=True)) if HQUserType.UNKNOWN in EMWF.selected_user_types(mobile_user_and_group_slugs): user_ids.append(SYSTEM_USER_ID) return form_es.user_id(user_ids)
def _get_users_filter(self, mobile_user_and_group_slugs): user_ids = (EMWF.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user).values_list('_id', flat=True)) if HQUserType.UNKNOWN in EMWF.selected_user_types( mobile_user_and_group_slugs): user_ids.append(SYSTEM_USER_ID) return form_es.user_id(user_ids)
def test_with_web_type_and_active_deactivated_user_slug(self): mobile_user_and_group_slugs = ['t__6', 'u__active1', 'u__deactive1'] user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.user, ) user_ids = user_query.values_list('_id', flat=True) expected_ids = ['web1', 'active1', 'deactive1'] self.assertCountEqual(user_ids, expected_ids)
def get_user_ids(self): mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug)) user_ids = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ).values_list('_id', flat=True) return user_ids
def hits(self, domain_name): time_filter = form_es.submitted datespan = DateSpan(datetime.now() - timedelta(days=self.window), datetime.utcnow()) users_filter = form_es.user_id( EMWF.user_es_query( domain_name, ['t__0'], # All mobile workers self.couch_user).values_list('_id', flat=True)) query = (form_es.FormES().domain(domain_name).filter( time_filter(gte=datespan.startdate, lt=datespan.enddate_adjusted)).filter(users_filter)) return query.run().hits
def hits(self, domain_name): time_filter = form_es.submitted datespan = DateSpan(datetime.now() - timedelta(days=self.window), datetime.utcnow()) users_filter = form_es.user_id(EMWF.user_es_query(domain_name, ['t__0'], # All mobile workers self.couch_user) .values_list('_id', flat=True)) query = (form_es.FormES() .domain(domain_name) .filter(time_filter(gte=datespan.startdate, lt=datespan.enddate_adjusted)) .filter(users_filter)) return query.run().hits
def user_query(self): # partially inspired by ApplicationStatusReport.user_query mobile_user_and_group_slugs = set( self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) ) or set(['t__0']) # default to all mobile workers on initial load user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = user_query.size(0) user_query = user_query.aggregations([ DateHistogram('last_submission', 'reporting_metadata.last_submission_for_user.submission_date', '1d'), DateHistogram('last_sync', 'reporting_metadata.last_sync_for_user.sync_date', '1d') ]) return user_query
def user_query(self): # partially inspired by ApplicationStatusReport.user_query mobile_user_and_group_slugs = set( self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) ) or set(['t__0']) # default to all mobile workers on initial load user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = user_query.size(0) user_query = user_query.aggregations([ DateHistogram('last_submission', 'reporting_metadata.last_submission_for_user.submission_date', '1d'), DateHistogram('last_sync', 'reporting_metadata.last_sync_for_user.sync_date', '1d') ]) return user_query
def user_query(self, pagination=True): mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug)) user_query = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ) user_query = (user_query.set_sorting_block(self.get_sorting_block())) if pagination: user_query = (user_query.size(self.pagination.count).start( self.pagination.start)) if self.selected_app_id: user_query = user_query.nested( self.sort_base, filters.term(self.sort_filter, self.selected_app_id)) return user_query
def rows(self): if self.warehouse: mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug)) users = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ).values_list('_id', flat=True) sort_clause = self.get_sql_sort() rows = ApplicationStatusFact.objects.filter( user_dim__user_id__in=users).order_by( sort_clause).select_related('user_dim', 'app_dim') if self.selected_app_id: rows = rows.filter( app_dim__application_id=self.selected_app_id) self._total_records = rows.count() return self.process_users(rows) else: users = self.user_query().run() self._total_records = users.total return self.process_rows(users.hits)
def rows(self): if self.warehouse: mobile_user_and_group_slugs = set( # Cater for old ReportConfigs self.request.GET.getlist('location_restricted_mobile_worker') + self.request.GET.getlist(ExpandedMobileWorkerFilter.slug) ) users = ExpandedMobileWorkerFilter.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user, ).values_list('_id', flat=True) sort_clause = self.get_sql_sort() rows = ApplicationStatusFact.objects.filter( user_dim__user_id__in=users ).order_by(sort_clause).select_related('user_dim', 'app_dim') if self.selected_app_id: rows = rows.filter(app_dim__application_id=self.selected_app_id) self._total_records = rows.count() return self.process_users(rows) else: users = self.user_query().run() self._total_records = users.total return self.process_rows(users.hits)
def _get_users_filter(self, mobile_user_and_group_slugs): user_ids = (EMWF.user_es_query( self.domain, mobile_user_and_group_slugs, self.request.couch_user).values_list('_id', flat=True)) return form_es.user_id(user_ids)