diff --git a/analytics/views/activity_common.py b/analytics/views/activity_common.py
index c85cdad275..441e33589c 100644
--- a/analytics/views/activity_common.py
+++ b/analytics/views/activity_common.py
@@ -48,46 +48,22 @@ def make_table(
return content
-def get_page(
- query: Composable, cols: Sequence[str], title: str, totals_columns: Sequence[int] = []
-) -> Dict[str, str]:
+def fix_rows(
+ rows: List[List[Any]],
+ i: int,
+ fixup_func: Union[Callable[[str], Markup], Callable[[datetime], str]],
+) -> None:
+ for row in rows:
+ row[i] = fixup_func(row[i])
+
+
+def get_query_data(query: Composable) -> List[List[Any]]:
cursor = connection.cursor()
cursor.execute(query)
rows = cursor.fetchall()
rows = list(map(list, rows))
cursor.close()
-
- def fix_rows(
- i: int, fixup_func: Union[Callable[[str], Markup], Callable[[datetime], str]]
- ) -> None:
- for row in rows:
- row[i] = fixup_func(row[i])
-
- total_row = []
- for i, col in enumerate(cols):
- if col == "Realm":
- fix_rows(i, realm_activity_link)
- elif col in ["Last time", "Last visit"]:
- fix_rows(i, format_date_for_activity_reports)
- elif col == "Hostname":
- for row in rows:
- row[i] = remote_installation_stats_link(row[0], row[i])
- if len(totals_columns) > 0:
- if i == 0:
- total_row.append("Total")
- elif i in totals_columns:
- total_row.append(str(sum(row[i] for row in rows if row[i] is not None)))
- else:
- total_row.append("")
- if len(totals_columns) > 0:
- rows.insert(0, total_row)
-
- content = make_table(title, cols, rows)
-
- return dict(
- content=content,
- title=title,
- )
+ return rows
def dictfetchall(cursor: CursorWrapper) -> List[Dict[str, Any]]:
@@ -137,13 +113,11 @@ def realm_url_link(realm_str: str) -> Markup:
return Markup('').format(url=url)
-def remote_installation_stats_link(server_id: int, hostname: str) -> Markup:
+def remote_installation_stats_link(server_id: int) -> Markup:
from analytics.views.stats import stats_for_remote_installation
url = reverse(stats_for_remote_installation, kwargs=dict(remote_server_id=server_id))
- return Markup(' {hostname}').format(
- url=url, hostname=hostname
- )
+ return Markup('').format(url=url)
def remote_installation_support_link(hostname: str) -> Markup:
diff --git a/analytics/views/installation_activity.py b/analytics/views/installation_activity.py
index 6fc3ec9c8d..337a122e31 100644
--- a/analytics/views/installation_activity.py
+++ b/analytics/views/installation_activity.py
@@ -13,7 +13,10 @@ from psycopg2.sql import SQL
from analytics.lib.counts import COUNT_STATS
from analytics.views.activity_common import (
dictfetchall,
- get_page,
+ fix_rows,
+ format_date_for_activity_reports,
+ get_query_data,
+ make_table,
realm_activity_link,
realm_stats_link,
realm_support_link,
@@ -327,14 +330,20 @@ def get_integrations_activity(request: HttpRequest) -> HttpResponse:
"Last time",
]
- integrations_activity = get_page(query, cols, title)
+ rows = get_query_data(query)
+ for i, col in enumerate(cols):
+ if col == "Realm":
+ fix_rows(rows, i, realm_activity_link)
+ elif col == "Last time":
+ fix_rows(rows, i, format_date_for_activity_reports)
+ content = make_table(title, cols, rows)
return render(
request,
"analytics/activity_details_template.html",
context=dict(
- data=integrations_activity["content"],
- title=integrations_activity["title"],
+ data=content,
+ title=title,
is_home=False,
),
)
diff --git a/analytics/views/remote_activity.py b/analytics/views/remote_activity.py
index c246ad128e..9371eaaa01 100644
--- a/analytics/views/remote_activity.py
+++ b/analytics/views/remote_activity.py
@@ -2,7 +2,14 @@ from django.http import HttpRequest, HttpResponse
from django.shortcuts import render
from psycopg2.sql import SQL
-from analytics.views.activity_common import get_page
+from analytics.views.activity_common import (
+ fix_rows,
+ format_date_for_activity_reports,
+ get_query_data,
+ make_table,
+ remote_installation_stats_link,
+ remote_installation_support_link,
+)
from zerver.decorator import require_server_admin
@@ -48,12 +55,34 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
"Analytics users",
"Mobile users",
"Last update time",
+ "Analytics",
+ "Support",
]
- remote_servers = get_page(query, cols, title, totals_columns=[3, 4])
+ rows = get_query_data(query)
+ total_row = []
+ totals_columns = [3, 4]
+ for row in rows:
+ stats = remote_installation_stats_link(row[0])
+ row.append(stats)
+ for i, col in enumerate(cols):
+ if col == "Last update time":
+ fix_rows(rows, i, format_date_for_activity_reports)
+ if col == "Hostname":
+ for row in rows:
+ support = remote_installation_support_link(row[i])
+ row.append(support)
+ if i == 0:
+ total_row.append("Total")
+ elif i in totals_columns:
+ total_row.append(str(sum(row[i] for row in rows if row[i] is not None)))
+ else:
+ total_row.append("")
+ rows.insert(0, total_row)
+ content = make_table(title, cols, rows)
return render(
request,
"analytics/activity_details_template.html",
- context=dict(data=remote_servers["content"], title=remote_servers["title"], is_home=False),
+ context=dict(data=content, title=title, is_home=False),
)
diff --git a/tools/test-backend b/tools/test-backend
index 9756e3f184..e802f631c4 100755
--- a/tools/test-backend
+++ b/tools/test-backend
@@ -50,8 +50,9 @@ not_yet_fully_covered = [
"analytics/lib/fixtures.py",
# We have 100% coverage on the new stuff; need to refactor old stuff.
"analytics/views/activity_common.py",
- "analytics/views/realm_activity.py",
"analytics/views/installation_activity.py",
+ "analytics/views/realm_activity.py",
+ "analytics/views/remote_activity.py",
"analytics/views/stats.py",
"analytics/views/support.py",
# TODO: This is a work in progress and therefore without