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)
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
def device_log_users(self): return DeviceLogUsersFilter.get_selected(self.request)
def device_log_users(self): return DeviceLogUsersFilter.get_value(self.request, self.domain)
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]
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
def device_log_users(self): return DeviceLogUsersFilter.get_selected(self.request)
def device_log_users(self): return set([ _f for _f in DeviceLogUsersFilter.get_value(self.request, self.domain) if _f ])
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]
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()