Esempio n. 1
0
 def rendered_report_title(self):
     new_title = self.name
     if self.errors_only:
         new_title = "Errors &amp; Warnings Log <small>for %s</small>" % ", ".join(self.device_log_users) \
             if self.device_log_users else "Errors &amp; 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)
Esempio n. 2
0
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)
Esempio n. 3
0
    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
Esempio n. 4
0
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
Esempio n. 7
0
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)
Esempio n. 8
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
Esempio n. 9
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