def rendered_report_title(self): new_title = self.name if self.errors_only: new_title = "Errors & Warnings Log <small>for %s</small>" % ", ".join(self.device_log_users) \ if self.device_log_users else "Errors & Warnings Log" elif self.goto_key: record_desc = '"%s" at %s' % (self.goto_key[2], tz_utils.string_to_prertty_time(self.goto_key[-1], self.timezone)) new_title = "Last %s Logs <small>before %s</small>" % (self.limit, record_desc) return mark_safe(new_title)
def mobile_user_reports(request): template = "hqadmin/mobile_user_reports.html" rows = [] if request.GET.get('old') == 'true': # old reports for domain in Domain.get_all(): data = get_db().view("phonelog/devicelog_data", reduce=False, startkey=[domain.name, "tag", "user-report"], endkey=[domain.name, "tag", "user-report", {}], #stale=settings.COUCH_STALE_QUERY, ).all() for report in data: val = report.get('value') version = val.get('version', 'unknown') formatted_date = tz_utils.string_to_prertty_time(val['@date'], timezone(domain.default_timezone), fmt="%b %d, %Y %H:%M:%S") rows.append(dict(domain=domain.name, time=formatted_date, user=val['user'], device_users=val['device_users'], message=val['msg'], version=version.split(' ')[0], detailed_version=html.escape(version), report_id=report['id'])) else: logs = Log.objects.filter(type__exact="user-report").order_by('domain') for log in logs: rows.append(dict(domain=log.domain, time=log.date, user=log.username, device_users=[u.username for u in log.device_users.all()], message=log.msg, version=(log.app_version or 'unknown').split(' ')[0], detailed_version=html.escape(log.app_version or 'unknown'), report_id=log.xform_id)) headers = DataTablesHeader( DataTablesColumn(_("View Form")), DataTablesColumn(_("Domain")), DataTablesColumn(_("Time"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("User"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Device Users"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Message"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Version"), sort_type=DTSortType.NUMERIC) ) context = get_hqadmin_base_context(request) context["headers"] = headers context["aoColumns"] = headers.render_aoColumns context["rows"] = rows return render(request, template, context)
def _create_rows(self, data, matching_key=None): row_set = [] user_query = self._filter_query_by_slug(DeviceLogUsersField.slug) device_query = self._filter_query_by_slug(DeviceLogDevicesField.slug) for item in data: entry = item['value'] date = entry['@date'] date_fmt = tz_utils.string_to_prertty_time(date, self.timezone) username = entry.get('user','unknown') username_fmt = '<a href="%(url)s">%(username)s</a>' % { "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain), DeviceLogUsersField.slug, username, user_query), "username": username } log_tag = entry.get('type','unknown') tag_classes = ["label"] if log_tag in self.tag_labels: tag_classes.append(self.tag_labels[log_tag]) goto_key = [self.domain, "tag_username", log_tag, username, item['key'][-1]] 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(goto_key))), "classes": " ".join(tag_classes), "text": log_tag, "extra_params": ' data-datatable-highlight-closest="tr"' if goto_key == matching_key else '', "tooltip": "Show the surrounding 100 logs." } device = entry.get('device_id','') device_fmt = '<a href="%(url)s">%(device)s</a>' % { "url": "%s?%s=%s&%s" % (self.get_url(domain=self.domain), DeviceLogDevicesField.slug, device, device_query), "device": device } version = entry.get('version', 'unknown') 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([self.table_cell(date, date_fmt), self.table_cell(log_tag, log_tag_format), self.table_cell(username, username_fmt), self.table_cell(device, device_fmt), self.table_cell(entry.get('msg', '')), self.table_cell(version, ver_format)]) return row_set
def mobile_user_reports(request): template = "hqadmin/mobile_user_reports.html" domains = Domain.get_all() rows = [] for domain in domains: data = ( get_db() .view( "phonelog/devicelog_data", reduce=False, startkey=[domain.name, "tag", "user-report"], endkey=[domain.name, "tag", "user-report", {}], stale=settings.COUCH_STALE_QUERY, ) .all() ) for report in data: val = report.get("value") version = val.get("version", "unknown") formatted_date = tz_utils.string_to_prertty_time( val["@date"], timezone(domain.default_timezone), fmt="%b %d, %Y %H:%M:%S" ) rows.append( dict( domain=domain.name, time=formatted_date, user=val["user"], device_users=val["device_users"], message=val["msg"], version=version.split(" ")[0], detailed_version=html.escape(version), report_id=report["id"], ) ) headers = DataTablesHeader( DataTablesColumn(_("View Form")), DataTablesColumn(_("Domain")), DataTablesColumn(_("Time"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("User"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Device Users"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Message"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Version"), sort_type=DTSortType.NUMERIC), ) context = get_hqadmin_base_context(request) context["headers"] = headers context["aoColumns"] = headers.render_aoColumns context["rows"] = rows return render(request, template, context)
def rows(self): rows = [] if not self.selected_site_map: self._selected_site_map = self.site_map site_keys = self.generate_keys() facilities = IHForCHFField.get_facilities() key_prefix = ["status"] if self.facility_status else ["all"] key_suffix = [self.facility_status] if self.facility_status else [] for user in self.users: for site in site_keys: ihf_chf = '--' site_id = ''.join(site) if site_id in facilities['ihf']: ihf_chf = 'IHF' elif site_id in facilities['chf']: ihf_chf = 'CHF' if self.facility_type and self.facility_type != ihf_chf: continue key = key_prefix + site + [user.get('user_id')] + key_suffix data = get_db().view( 'hsph/pm_implementation_status_old', reduce=True, startkey=key + [self.datespan.startdate_param_utc], endkey=key + [self.datespan.enddate_param_utc]).all() region, district, site = self.get_site_table_values(site) pb_temp = '<div class="progress"><div class="bar" style="width: %(percent)d%%;"></div></div>' if data: for item in data: item = item.get('value', {}) fac_stat = item.get('facilityStatus', -1) rows.append([ self.table_cell( fac_stat, pb_temp % dict(percent=(fac_stat + 2) * 25)), region, district, ihf_chf, user.get('username_in_report'), site, FacilityStatusField.options[fac_stat + 1]['text'], tz_utils.string_to_prertty_time( item.get('lastUpdated', "--"), to_tz=self.timezone) ]) return rows
def rows(self): rows = [] if not self.selected_site_map: self._selected_site_map = self.site_map site_keys = self.generate_keys() facilities = IHForCHFField.get_facilities() key_prefix = ["status"] if self.facility_status else ["all"] key_suffix = [self.facility_status] if self.facility_status else [] for user in self.users: for site in site_keys: ihf_chf = '--' site_id = ''.join(site) if site_id in facilities['ihf']: ihf_chf = 'IHF' elif site_id in facilities['chf']: ihf_chf = 'CHF' if self.facility_type and self.facility_type != ihf_chf: continue key = key_prefix + site + [user.get('user_id')] + key_suffix data = get_db().view('hsph/pm_implementation_status_old', reduce=True, startkey=key+[self.datespan.startdate_param_utc], endkey=key+[self.datespan.enddate_param_utc] ).all() region, district, site = self.get_site_table_values(site) pb_temp = '<div class="progress"><div class="bar" style="width: %(percent)d%%;"></div></div>' if data: for item in data: item = item.get('value', {}) fac_stat = item.get('facilityStatus', -1) rows.append([ self.table_cell(fac_stat, pb_temp % dict(percent=(fac_stat+2)*25)), region, district, ihf_chf, user.get('username_in_report'), site, FacilityStatusField.options[fac_stat+1]['text'], tz_utils.string_to_prertty_time(item.get('lastUpdated', "--"), to_tz=self.timezone) ]) return rows
def mobile_user_reports(request): template = "hqadmin/mobile_user_reports.html" domains = Domain.get_all() rows = [] for domain in domains: data = get_db().view("phonelog/devicelog_data", reduce=False, startkey=[domain.name, "tag", "user-report"], endkey=[domain.name, "tag", "user-report", {}], stale=settings.COUCH_STALE_QUERY, ).all() for report in data: val = report.get('value') version = val.get('version', 'unknown') formatted_date = tz_utils.string_to_prertty_time(val['@date'], timezone(domain.default_timezone), fmt="%b %d, %Y %H:%M:%S") rows.append(dict(domain=domain.name, time=formatted_date, user=val['user'], device_users=val['device_users'], message=val['msg'], version=version.split(' ')[0], detailed_version=html.escape(version), report_id=report['id'])) headers = DataTablesHeader( DataTablesColumn(_("View Form")), DataTablesColumn(_("Domain")), DataTablesColumn(_("Time"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("User"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Device Users"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Message"), sort_type=DTSortType.NUMERIC), DataTablesColumn(_("Version"), sort_type=DTSortType.NUMERIC) ) context = get_hqadmin_base_context(request) context["headers"] = headers context["aoColumns"] = headers.render_aoColumns context["rows"] = rows return render(request, template, context)
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 _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