remote-activity: Add column for remote server or realm creation date.

Expands the main query for remote servers to get the audit log
event datetime for when the server was created/registered.

The remote realm object has a field for when the remote realm
was created on the remote server.
This commit is contained in:
Lauryn Menard
2024-02-13 21:55:37 +01:00
committed by Tim Abbott
parent bf6978185d
commit 230294cfb3
4 changed files with 50 additions and 9 deletions

View File

@@ -101,6 +101,10 @@ def format_optional_datetime(date: Optional[datetime], display_none: bool = Fals
return ""
def format_datetime_as_date(date: datetime) -> str:
return date.strftime("%Y-%m-%d")
def format_none_as_zero(value: Optional[int]) -> int:
if value:
return value

View File

@@ -169,6 +169,11 @@ class ActivityTest(ZulipTestCase):
hostname="demo.example.com",
contact_email="email@example.com",
)
RemoteZulipServerAuditLog.objects.create(
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
server=server,
event_time=server.last_updated,
)
extra_data = {
RemoteRealmAuditLog.ROLE_COUNT: {
RemoteRealmAuditLog.ROLE_COUNT_HUMANS: {

View File

@@ -15,6 +15,7 @@ from corporate.lib.activity import (
dictfetchall,
estimate_annual_recurring_revenue_by_realm,
fix_rows,
format_datetime_as_date,
format_optional_datetime,
get_query_data,
get_realms_with_default_discount_dict,
@@ -183,7 +184,7 @@ def realm_summary_table() -> str:
cursor.close()
for row in rows:
row["date_created_day"] = row["date_created"].strftime("%Y-%m-%d")
row["date_created_day"] = format_datetime_as_date(row["date_created"])
row["age_days"] = int((now - row["date_created"]).total_seconds() / 86400)
row["is_new"] = row["age_days"] < 12 * 7

View File

@@ -4,6 +4,7 @@ from psycopg2.sql import SQL
from corporate.lib.activity import (
fix_rows,
format_datetime_as_date,
format_none_as_zero,
format_optional_datetime,
get_plan_data_by_remote_realm,
@@ -44,13 +45,23 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
from zilencer_remotepushdevicetoken
group by server_id
),
remote_server_audit_log as (
select
server_id,
event_time as server_created
from zilencer_remotezulipserverauditlog
where
event_type = 10215
group by server_id, event_time
),
remote_realms as (
select
server_id,
id as realm_id,
name as realm_name,
org_type as realm_type,
host as realm_host
host as realm_host,
realm_date_created as realm_created
from zilencer_remoterealm
where
is_system_bot_realm = False
@@ -60,6 +71,8 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
select
rserver.id,
realm_id,
server_created,
realm_created,
realm_name,
rserver.hostname,
realm_host,
@@ -73,6 +86,7 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
left join mobile_push_forwarded_count on mobile_push_forwarded_count.server_id = rserver.id
left join remote_push_devices on remote_push_devices.server_id = rserver.id
left join remote_realms on remote_realms.server_id = rserver.id
left join remote_server_audit_log on remote_server_audit_log.server_id = rserver.id
where not deactivated
order by push_user_count DESC NULLS LAST
"""
@@ -81,6 +95,7 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
cols = [
"Links",
"IDs",
"Date created",
"Realm name",
"Realm host or server hostname",
"Server contact email",
@@ -98,16 +113,22 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
]
# If the query or column order above changes, update the constants below
# Query constants:
SERVER_AND_REALM_IDS = 0
SERVER_CREATED = 1
REALM_CREATED = 2
SERVER_HOST = 2
REALM_HOST = 3
LAST_AUDIT_LOG_DATE = 6
MOBILE_USER_COUNT = 7
MOBILE_PUSH_COUNT = 8
ORG_TYPE = 9
ARR = 12
TOTAL_USER_COUNT = 14
GUEST_COUNT = 15
# Column constants:
DATE_CREATED = 2
LAST_AUDIT_LOG_DATE = 7
MOBILE_USER_COUNT = 8
MOBILE_PUSH_COUNT = 9
ORG_TYPE = 10
ARR = 13
TOTAL_USER_COUNT = 15
GUEST_COUNT = 16
rows = get_query_data(query)
plan_data_by_remote_server = get_plan_data_by_remote_server()
@@ -131,6 +152,14 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
ids_string = f"{server_id}"
row.insert(SERVER_AND_REALM_IDS, ids_string)
# Set date created data
# For remote realm row, remove server created value;
# for remote server row, remove realm created value
if realm_id is not None:
row.pop(SERVER_CREATED)
else:
row.pop(REALM_CREATED)
# Get server_host for support link
# For remote realm row, remove server hostname value;
# for remote server row, remove None realm host value
@@ -202,6 +231,8 @@ def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
fix_rows(rows, i, format_optional_datetime)
if i in [MOBILE_USER_COUNT, MOBILE_PUSH_COUNT]:
fix_rows(rows, i, format_none_as_zero)
if i == DATE_CREATED:
fix_rows(rows, i, format_datetime_as_date)
if i == SERVER_AND_REALM_IDS:
total_row.append("Total")
elif i == MOBILE_USER_COUNT: