mirror of
https://github.com/zulip/zulip.git
synced 2025-10-31 20:13:46 +00:00
Adds three columns to the remote server activity chart and updates the chart key for the third of those columns. The first is the plan name. If there are multiple plans with a status under the live threshhold, then we send "See support view". The second is the plan status. If there are multiple plans, then we send "Multiple plans". The third is the estimated annual revenue for the plan. Note that for free trials, this will be calculated as if the plan was paid for 12 months (so a full year). If there is no plan for the server under the live threshold or at all then "---" is inserted into the table row. Note that 100% sponsored servers/realms would fall into this category.
137 lines
4.4 KiB
Python
137 lines
4.4 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 corporate.lib.analytics import get_plan_data_by_remote_server
|
|
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_id as (
|
|
select
|
|
server_id,
|
|
max(id) as max_count_id
|
|
from zilencer_remoteinstallationcount
|
|
where
|
|
property='active_users:is_bot:day'
|
|
and subgroup='false'
|
|
group by server_id
|
|
),
|
|
icount as (
|
|
select
|
|
icount_id.server_id,
|
|
value as latest_value,
|
|
end_time as latest_end_time
|
|
from icount_id
|
|
join zilencer_remoteinstallationcount
|
|
on max_count_id = zilencer_remoteinstallationcount.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,
|
|
latest_value,
|
|
push_user_count,
|
|
latest_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
|
|
where not deactivated
|
|
order by latest_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",
|
|
"Plan name",
|
|
"Plan status",
|
|
"ARR",
|
|
"Non guest users",
|
|
"Guest users",
|
|
"Links",
|
|
]
|
|
|
|
rows = get_query_data(query)
|
|
total_row = []
|
|
totals_columns = [4, 5]
|
|
plan_data_by_remote_server = get_plan_data_by_remote_server()
|
|
|
|
for row in rows:
|
|
# Add estimated revenue for server
|
|
server_plan_data = plan_data_by_remote_server.get(row[0])
|
|
if server_plan_data is None:
|
|
row.append("---")
|
|
row.append("---")
|
|
row.append("---")
|
|
else:
|
|
row.append(server_plan_data.current_plan_name)
|
|
row.append(server_plan_data.current_status)
|
|
row.append(server_plan_data.annual_revenue)
|
|
# Add user counts
|
|
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)
|
|
# Add links
|
|
stats = remote_installation_stats_link(row[0])
|
|
support = remote_installation_support_link(row[1])
|
|
links = stats + " " + support
|
|
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),
|
|
)
|