Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move deploy history report to standalone page #28202

Merged
merged 10 commits into from
Jul 27, 2020
61 changes: 56 additions & 5 deletions corehq/apps/hqadmin/reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from django.utils.functional import cached_property
from django.utils.translation import ugettext as _
from django.utils.translation import ugettext_lazy, ugettext_noop
from django.contrib.humanize.templatetags.humanize import naturaltime

from dateutil.parser import parse
from memoized import memoized
Expand All @@ -22,6 +23,7 @@
from corehq.apps.sms.mixin import apply_leniency
from corehq.apps.sms.models import PhoneNumber
from corehq.const import SERVER_DATETIME_FORMAT
from corehq.apps.hqadmin.models import HqDeploy


class AdminReport(GenericTabularReport):
Expand Down Expand Up @@ -71,25 +73,29 @@ def rows(self):
logs = self._filter_logs()
rows = self._create_rows(
logs,
range=slice(self.pagination.start, self.pagination.start + self.pagination.count)
range=slice(self.pagination.start,
self.pagination.start + self.pagination.count)
)
return rows

def _filter_logs(self):
logs = DeviceReportEntry.objects.filter(
date__range=[self.datespan.startdate_param_utc, self.datespan.enddate_param_utc]
date__range=[self.datespan.startdate_param_utc,
self.datespan.enddate_param_utc]
).filter(type='soft-assert')

if self.selected_domain is not None:
logs = logs.filter(domain__exact=self.selected_domain)

if self.selected_commcare_version is not None:
logs = logs.filter(app_version__contains='"{}"'.format(self.selected_commcare_version))
logs = logs.filter(app_version__contains='"{}"'.format(
self.selected_commcare_version))

return logs

def _create_row(self, log, *args, **kwargs):
row = super(DeviceLogSoftAssertReport, self)._create_row(log, *args, **kwargs)
row = super(DeviceLogSoftAssertReport, self)._create_row(
log, *args, **kwargs)
row.append(log.domain)
return row

Expand Down Expand Up @@ -134,7 +140,8 @@ def _get_rows(self, paginate=True, link_user=True):
return

if paginate and self.pagination:
data = data[self.pagination.start:self.pagination.start + self.pagination.count]
data = data[
self.pagination.start:self.pagination.start + self.pagination.count]

for number in data:
yield self._fmt_row(number, owner_cache, link_user)
Expand Down Expand Up @@ -266,3 +273,47 @@ def _format_date(date):
if date:
return parse(date).strftime(SERVER_DATETIME_FORMAT)
return "---"


class DeployHistoryReport(GetParamsMixin, AdminReport):
base_template = 'reports/base_template.html'

slug = 'deploy_history_report'
name = ugettext_lazy("Deploy History Report")

emailable = False
exportable = False
ajax_pagination = True
default_rows = 10

@property
def headers(self):
return DataTablesHeader(
DataTablesColumn(_("Date"), sortable=False),
DataTablesColumn(_("User"), sortable=False),
DataTablesColumn(_("Diff URL"), sortable=False),
)

@property
def rows(self):
deploy_list = HqDeploy.objects.all()
start = self.pagination.start
end = self.pagination.start + self.pagination.count
for deploy in deploy_list[start:end]:
yield [
self._format_date(deploy.date),
deploy.user,
self._hyperlink_diff_url(deploy.diff_url),
]

@property
def total_records(self):
return HqDeploy.objects.count()

def _format_date(self, date):
if date:
return f'<div>{naturaltime(date)}</div><div>{date.strftime(SERVER_DATETIME_FORMAT)}</div>'
return "---"

def _hyperlink_diff_url(self, diff_url):
return f'<a href="{diff_url}">Diff with previous</a>'
2 changes: 2 additions & 0 deletions corehq/reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
DeviceLogSoftAssertReport,
UserAuditReport,
UserListReport,
DeployHistoryReport,
)
from corehq.apps.linked_domain.views import DomainLinkHistoryReport
from corehq.apps.reports.standard import (
Expand Down Expand Up @@ -339,6 +340,7 @@ def get_report_builder_count(domain):
DeviceLogSoftAssertReport,
AdminPhoneNumberReport,
UserAuditReport,
DeployHistoryReport,
)),
)

Expand Down
3 changes: 3 additions & 0 deletions corehq/tabs/tabclasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
DeviceLogSoftAssertReport,
UserAuditReport,
UserListReport,
DeployHistoryReport,
)
from corehq.apps.hqadmin.views.system import GlobalThresholds
from corehq.apps.hqwebapp.models import GaTracker
Expand Down Expand Up @@ -2213,6 +2214,8 @@ def sidebar_items(self):
(_('Administrative Reports'), [
{'title': _('User List'),
'url': UserListReport.get_url()},
{'title': _('Deploy History'),
'url': DeployHistoryReport.get_url()},
{'title': _('Download Malt table'),
'url': reverse('download_malt')},
{'title': _('Download Global Impact Report'),
Expand Down