class DeviceLogFilterTest(SimpleTestCase):
    domain = 'device-log-domain'

    def setUp(self):
        self.device_filter = DeviceLogUsersFilter(
            MagicMock(),
            self.domain,
        )
        cache.clear()

    def tearDown(self):
        cache.clear()

    def test_device_log_users_get_filters(self):
        self.device_filter.domain = uuid.uuid4().hex
        with patch(
                'corehq.apps.reports.filters.devicelog.fast_distinct_in_domain',
                return_value=['a', 'b']) as mocked_call:
            values = self.device_filter.get_filters(None)
            self.assertTrue(mocked_call.called)
            self.assertEqual(values, [{'name': 'a', 'show': True}, {'name': 'b', 'show': True}])

            values = self.device_filter.get_filters(None)

            self.assertEqual(values, [{'name': 'a', 'show': True}, {'name': 'b', 'show': True}])
            self.assertEqual(mocked_call.call_count, 1, 'Second call should hit cache')

    def test_device_log_users_get_filters_cache_bust(self):
        self.device_filter.domain = uuid.uuid4().hex
        with patch(
                'corehq.apps.reports.filters.devicelog.fast_distinct_in_domain',
                return_value=['a', 'b']) as mocked_call:
            values = self.device_filter.get_filters(None)
            self.assertTrue(mocked_call.called)
            self.assertEqual(values, [{'name': 'a', 'show': True}, {'name': 'b', 'show': True}])

            self.device_filter.domain = self.domain + '-new'  # Bust cache by changing domain
            self.device_filter.get_filters(None)
            self.assertEqual(mocked_call.call_count, 2)

            self.device_filter.field = uuid.uuid4().hex  # Bust cache by changing field
            self.device_filter.get_filters(None)
            self.assertEqual(mocked_call.call_count, 3)

            self.device_filter.get_filters(uuid.uuid4().hex)  # Bust cache by changing selected
            self.assertEqual(mocked_call.call_count, 4)
Example #2
0
    def _create_rows(self, logs, matching_id=None):
        _device_users_by_xform = memoized(device_users_by_xform)
        row_set = []
        user_query = self._filter_query_by_slug(DeviceLogUsersFilter.slug)
        device_query = self._filter_query_by_slug(DeviceLogDevicesFilter.slug)
        paged = slice(self.pagination.start,
                      self.pagination.start + self.pagination.count + 1)

        self.total_records = logs.count()
        for log in logs.order_by(self.ordering)[paged]:
            date = str(log.date)
            date_fmt = tz_utils.string_to_prertty_time(
                date, self.timezone, fmt="%b %d, %Y %H:%M:%S")

            username = log.username
            username_fmt = '<a href="%(url)s">%(username)s</a>' % {
                "url":
                "%s?%s=%s&%s" % (
                    self.get_url(domain=self.domain),
                    DeviceLogUsersFilter.slug,
                    DeviceLogUsersFilter.value_to_param(username),
                    user_query,
                ),
                "username": (username if username else
                             '<span class="label label-info">Unknown</span>')
            }

            device_users = _device_users_by_xform(log.xform_id)
            device_users_fmt = ', '.join([
                '<a href="%(url)s">%(username)s</a>' % {
                    "url":
                    "%s?%s=%s&%s" %
                    (self.get_url(domain=self.domain),
                     DeviceLogUsersFilter.slug, username, user_query),
                    "username":
                    username,
                } for username in device_users
            ])

            log_tag = log.type or 'unknown'
            tag_classes = ["label"]
            if log_tag in self.tag_labels:
                tag_classes.append(self.tag_labels[log_tag])

            log_tag_format = (
                '<a href="%(url)s" class="%(classes)s"%(extra_params)s '
                'data-datatable-tooltip="right" '
                'data-datatable-tooltip-text="%(tooltip)s">%(text)s</a>') % {
                    "url":
                    "%s?goto=%s" % (self.get_url(domain=self.domain),
                                    html.escape(json.dumps(log.id))),
                    "classes":
                    " ".join(tag_classes),
                    "text":
                    log_tag,
                    "extra_params": (' data-datatable-highlight-closest="tr"'
                                     if log.id == matching_id else ''),
                    "tooltip":
                    "Show the surrounding 100 logs."
                }

            device = log.device_id
            device_fmt = '<a href="%(url)s">%(device)s</a>' % {
                "url":
                "%s?%s=%s&%s" %
                (self.get_url(domain=self.domain), DeviceLogDevicesFilter.slug,
                 device, device_query),
                "device":
                device
            }

            version = log.app_version
            ver_format = ('%s <a href="#" data-datatable-tooltip="left" '
                          'data-datatable-tooltip-text="%s">'
                          '<i class="icon icon-info-sign"></i></a>') % (
                              version.split(' ')[0], html.escape(version))

            row_set.append([
                date_fmt, log_tag_format, username_fmt, device_users_fmt,
                device_fmt, log.msg, ver_format
            ])
        return row_set
Example #3
0
 def device_log_users(self):
     return DeviceLogUsersFilter.get_selected(self.request)
Example #4
0
 def device_log_users(self):
     return DeviceLogUsersFilter.get_value(self.request, self.domain)
Example #5
0
    def _create_row(self, log, matching_id, _device_users_by_xform, user_query, device_query):
        log_date = (ServerTime(log.date)
                    .user_time(self.timezone).ui_string())

        server_date = (ServerTime(log.server_date)
                       .user_time(self.timezone).ui_string())

        username = log.username
        username_fmt = self._username_fmt % {
            "url": "%s?%s=%s&%s" % (
                self.get_url(domain=self.domain),
                DeviceLogUsersFilter.slug,
                DeviceLogUsersFilter.value_to_param(username),
                user_query,
            ),
            "username": (
                username if username
                else '<span class="label label-info">Unknown</span>'
            )
        }

        device_users = _device_users_by_xform(log.xform_id)
        device_users_fmt = ', '.join([
            self._device_users_fmt % {
                "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain),
                                        DeviceLogUsersFilter.slug,
                                        device_username,
                                        user_query),
                "username": device_username,
            }
            for device_username in device_users
        ])

        log_tag = log.type or 'unknown'
        tag_classes = ["label"]
        if log_tag in self.tag_labels:
            tag_classes.append(self.tag_labels[log_tag])

        if len(tag_classes) == 1:
            tag_classes.append('label-info')

        log_tag_format = self._log_tag_fmt % {
            "url": "%s?goto=%s" % (self.get_url(domain=self.domain),
                                   html.escape(json.dumps(log.id))),
            "classes": " ".join(tag_classes),
            "text": log_tag,
            "extra_params": (' data-datatable-highlight-closest="tr"'
                             if log.id == matching_id else ''),
            "tooltip": "Show the surrounding 100 logs."
        }

        device = log.device_id
        device_fmt = self._device_id_fmt % {
            "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain),
                                    DeviceLogDevicesFilter.slug,
                                    device,
                                    device_query),
            "device": device
        }

        app_version = get_version_from_appversion_text(log.app_version) or "unknown"
        commcare_version = get_commcare_version_from_appversion_text(log.app_version) or "unknown"
        return [log_date, server_date, log_tag_format, username_fmt,
                device_users_fmt, device_fmt, log.msg, app_version, commcare_version]
Example #6
0
    def _create_rows(self, logs, matching_id=None):
        _device_users_by_xform = memoized(device_users_by_xform)
        row_set = []
        user_query = self._filter_query_by_slug(DeviceLogUsersFilter.slug)
        device_query = self._filter_query_by_slug(DeviceLogDevicesFilter.slug)
        paged = slice(self.pagination.start,
                      self.pagination.start + self.pagination.count + 1)

        self.total_records = logs.count()
        for log in logs.order_by(self.ordering)[paged]:
            date = str(log.date)
            date_fmt = tz_utils.string_to_prertty_time(
                date, self.timezone, fmt="%b %d, %Y %H:%M:%S")

            username = log.username
            username_fmt = '<a href="%(url)s">%(username)s</a>' % {
                "url": "%s?%s=%s&%s" % (
                    self.get_url(domain=self.domain),
                    DeviceLogUsersFilter.slug,
                    DeviceLogUsersFilter.value_to_param(username),
                    user_query,
                ),
                "username": (
                    username if username
                    else '<span class="label label-info">Unknown</span>'
                )
            }

            device_users = _device_users_by_xform(log.xform_id)
            device_users_fmt = ', '.join([
                '<a href="%(url)s">%(username)s</a>' % {
                    "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain),
                                            DeviceLogUsersFilter.slug,
                                            username,
                                            user_query),
                    "username": username,
                }
                for username in device_users
            ])

            log_tag = log.type or 'unknown'
            tag_classes = ["label"]
            if log_tag in self.tag_labels:
                tag_classes.append(self.tag_labels[log_tag])

            log_tag_format = (
                '<a href="%(url)s" class="%(classes)s"%(extra_params)s '
                'data-datatable-tooltip="right" '
                'data-datatable-tooltip-text="%(tooltip)s">%(text)s</a>'
            ) % {
                "url": "%s?goto=%s" % (self.get_url(domain=self.domain),
                                       html.escape(json.dumps(log.id))),
                "classes": " ".join(tag_classes),
                "text": log_tag,
                "extra_params": (' data-datatable-highlight-closest="tr"'
                                 if log.id == matching_id else ''),
                "tooltip": "Show the surrounding 100 logs."
            }

            device = log.device_id
            device_fmt = '<a href="%(url)s">%(device)s</a>' % {
                "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain),
                                        DeviceLogDevicesFilter.slug,
                                        device,
                                        device_query),
                "device": device
            }

            version = log.app_version
            ver_format = (
                '%s <a href="#" data-datatable-tooltip="left" '
                'data-datatable-tooltip-text="%s">'
                '<i class="icon icon-info-sign"></i></a>'
            ) % (version.split(' ')[0], html.escape(version))

            row_set.append([date_fmt, log_tag_format, username_fmt,
                            device_users_fmt, device_fmt, log.msg, ver_format])
        return row_set
Example #7
0
 def device_log_users(self):
     return DeviceLogUsersFilter.get_selected(self.request)
Example #8
0
 def device_log_users(self):
     return set([
         _f
         for _f in DeviceLogUsersFilter.get_value(self.request, self.domain)
         if _f
     ])
Example #9
0
    def _create_row(self, log, matching_id, _device_users_by_xform, user_query, device_query):
        log_date = (ServerTime(log.date)
                    .user_time(self.timezone).ui_string())

        server_date = (ServerTime(log.server_date)
                       .user_time(self.timezone).ui_string())

        username = log.username
        username_fmt = self._username_fmt % {
            "url": "%s?%s=%s&%s" % (
                self.get_url(domain=self.domain),
                DeviceLogUsersFilter.slug,
                DeviceLogUsersFilter.value_to_param(username),
                user_query,
            ),
            "username": (
                username if username
                else '<span class="label label-info">Unknown</span>'
            )
        }

        device_users = _device_users_by_xform(log.xform_id)
        device_users_fmt = ', '.join([
            self._device_users_fmt % {
                "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain),
                                        DeviceLogUsersFilter.slug,
                                        device_username,
                                        user_query),
                "username": device_username,
            }
            for device_username in device_users
        ])

        log_tag = log.type or 'unknown'
        tag_classes = ["label"]
        if log_tag in self.tag_labels:
            tag_classes.append(self.tag_labels[log_tag])

        if len(tag_classes) == 1:
            tag_classes.append('label-info')

        log_tag_format = self._log_tag_fmt % {
            "url": "%s?goto=%s" % (self.get_url(domain=self.domain),
                                   html.escape(json.dumps(log.id))),
            "classes": " ".join(tag_classes),
            "text": log_tag,
            "extra_params": (' data-datatable-highlight-closest="tr"'
                             if log.id == matching_id else ''),
            "tooltip": "Show the surrounding 100 logs."
        }

        device = log.device_id
        device_fmt = self._device_id_fmt % {
            "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain),
                                    DeviceLogDevicesFilter.slug,
                                    device,
                                    device_query),
            "device": device
        }

        app_version = get_version_from_appversion_text(log.app_version) or "unknown"
        commcare_version = get_commcare_version_from_appversion_text(log.app_version) or "unknown"
        return [log_date, server_date, log_tag_format, username_fmt,
                device_users_fmt, device_fmt, log.msg, app_version, commcare_version]
Example #10
0
 def device_log_users(self):
     return set([_f for _f in DeviceLogUsersFilter.get_value(self.request, self.domain) if _f])
 def setUp(self):
     self.device_filter = DeviceLogUsersFilter(
         MagicMock(),
         self.domain,
     )
     cache.clear()