mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
This commit adds two columns named 'Guest users' and 'Non guest users' to respresent count of such users. We query 'RemoteRealmAuditLog' to get the data.
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
from django.http import HttpRequest, HttpResponse
|
|
from django.shortcuts import render
|
|
from psycopg2.sql import SQL
|
|
|
|
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
|
|
from zilencer.models import get_remote_server_guest_and_non_guest_count
|
|
|
|
|
|
@require_server_admin
|
|
def get_remote_server_activity(request: HttpRequest) -> HttpResponse:
|
|
title = "Remote servers"
|
|
|
|
query = SQL(
|
|
"""
|
|
with icount as (
|
|
select
|
|
server_id,
|
|
max(value) as max_value,
|
|
max(end_time) as max_end_time
|
|
from zilencer_remoteinstallationcount
|
|
where
|
|
property='active_users:is_bot:day'
|
|
and subgroup='false'
|
|
group by server_id
|
|
),
|
|
mobile_push_forwarded_count as (
|
|
select
|
|
server_id,
|
|
sum(coalesce(value, 0)) as push_forwarded_count
|
|
from zilencer_remoteinstallationcount
|
|
where
|
|
property = 'mobile_pushes_forwarded::day'
|
|
and end_time >= current_timestamp(0) - interval '7 days'
|
|
group by server_id
|
|
),
|
|
remote_push_devices as (
|
|
select
|
|
server_id,
|
|
count(distinct(user_id, user_uuid)) as push_user_count
|
|
from zilencer_remotepushdevicetoken
|
|
group by server_id
|
|
)
|
|
select
|
|
rserver.id,
|
|
rserver.hostname,
|
|
rserver.contact_email,
|
|
rserver.last_version,
|
|
max_value,
|
|
push_user_count,
|
|
max_end_time,
|
|
push_forwarded_count
|
|
from zilencer_remotezulipserver rserver
|
|
left join icount on icount.server_id = rserver.id
|
|
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
|
|
order by max_value DESC NULLS LAST, push_user_count DESC NULLS LAST
|
|
"""
|
|
)
|
|
|
|
cols = [
|
|
"ID",
|
|
"Hostname",
|
|
"Contact email",
|
|
"Zulip version",
|
|
"Analytics users",
|
|
"Mobile users",
|
|
"Last update time",
|
|
"Mobile pushes forwarded",
|
|
"Non guest users",
|
|
"Guest users",
|
|
"Links",
|
|
]
|
|
|
|
rows = get_query_data(query)
|
|
total_row = []
|
|
totals_columns = [4, 5]
|
|
for row in rows:
|
|
stats = remote_installation_stats_link(row[0])
|
|
support = remote_installation_support_link(row[1])
|
|
links = stats + " " + support
|
|
remote_server_counts = get_remote_server_guest_and_non_guest_count(row[0])
|
|
row.append(remote_server_counts.non_guest_user_count)
|
|
row.append(remote_server_counts.guest_user_count)
|
|
row.append(links)
|
|
for i, col in enumerate(cols):
|
|
if col == "Last update time":
|
|
fix_rows(rows, i, format_date_for_activity_reports)
|
|
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=content, title=title, is_home=False),
|
|
)
|