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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
 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)
Пример #9
0
 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
Пример #10
0
    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
Пример #11
0
    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
Пример #12
0
 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
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
 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)
Пример #16
0
 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)
Пример #17
0
 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)