mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
support: Add date created field to remove server information.
Removes the last updated field and replaces it with the date the remote server was created based on the audit log data.
This commit is contained in:
committed by
Tim Abbott
parent
a03f9078e5
commit
b9ca60ab9e
@@ -32,7 +32,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from zilencer.models import RemoteRealm, RemoteZulipServer
|
from zilencer.models import RemoteRealm, RemoteZulipServer, RemoteZulipServerAuditLog
|
||||||
|
|
||||||
|
|
||||||
class TestRemoteServerSupportEndpoint(ZulipTestCase):
|
class TestRemoteServerSupportEndpoint(ZulipTestCase):
|
||||||
@@ -97,6 +97,11 @@ class TestRemoteServerSupportEndpoint(ZulipTestCase):
|
|||||||
remote_server = RemoteZulipServer.objects.create(
|
remote_server = RemoteZulipServer.objects.create(
|
||||||
hostname=hostname, contact_email=f"admin@{hostname}", uuid=uuid.uuid4()
|
hostname=hostname, contact_email=f"admin@{hostname}", uuid=uuid.uuid4()
|
||||||
)
|
)
|
||||||
|
RemoteZulipServerAuditLog.objects.create(
|
||||||
|
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
|
||||||
|
server=remote_server,
|
||||||
|
event_time=remote_server.last_updated,
|
||||||
|
)
|
||||||
# We want at least one RemoteZulipServer that has no RemoteRealm
|
# We want at least one RemoteZulipServer that has no RemoteRealm
|
||||||
# as an example of a pre-8.0 release registered remote server.
|
# as an example of a pre-8.0 release registered remote server.
|
||||||
if i > 1:
|
if i > 1:
|
||||||
@@ -108,7 +113,7 @@ class TestRemoteServerSupportEndpoint(ZulipTestCase):
|
|||||||
uuid=realm_uuid,
|
uuid=realm_uuid,
|
||||||
host=realm_host,
|
host=realm_host,
|
||||||
name=realm_name,
|
name=realm_name,
|
||||||
realm_date_created=timezone_now(),
|
realm_date_created=datetime(2023, 12, 1, tzinfo=timezone.utc),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Add a deactivated server, which should be excluded from search results.
|
# Add a deactivated server, which should be excluded from search results.
|
||||||
@@ -144,7 +149,7 @@ class TestRemoteServerSupportEndpoint(ZulipTestCase):
|
|||||||
[
|
[
|
||||||
f"<h3>{hostname}</h3>",
|
f"<h3>{hostname}</h3>",
|
||||||
f"<b>Contact email</b>: admin@{hostname}",
|
f"<b>Contact email</b>: admin@{hostname}",
|
||||||
"<b>Last updated</b>:",
|
"<b>Date created</b>:",
|
||||||
"<b>Zulip version</b>:",
|
"<b>Zulip version</b>:",
|
||||||
"<b>Plan type</b>: Self-managed<br />",
|
"<b>Plan type</b>: Self-managed<br />",
|
||||||
"<b>Non-guest user count</b>: 0<br />",
|
"<b>Non-guest user count</b>: 0<br />",
|
||||||
@@ -161,7 +166,7 @@ class TestRemoteServerSupportEndpoint(ZulipTestCase):
|
|||||||
[
|
[
|
||||||
f"<h3>{name}</h3>",
|
f"<h3>{name}</h3>",
|
||||||
f"<b>Remote realm host:</b> {host}<br />",
|
f"<b>Remote realm host:</b> {host}<br />",
|
||||||
"<b>Date created</b>: ",
|
"<b>Date created</b>: 01 December 2023",
|
||||||
"<b>Org type</b>: Unspecified<br />",
|
"<b>Org type</b>: Unspecified<br />",
|
||||||
"<b>Has remote realm(s)</b>: True<br />",
|
"<b>Has remote realm(s)</b>: True<br />",
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Optional, TypedDict
|
from typing import Optional, TypedDict
|
||||||
from urllib.parse import urlencode, urljoin, urlunsplit
|
from urllib.parse import urlencode, urljoin, urlunsplit
|
||||||
@@ -23,6 +24,7 @@ from zerver.models.realms import get_org_type_display_name, get_realm
|
|||||||
from zilencer.lib.remote_counts import MissingDataError
|
from zilencer.lib.remote_counts import MissingDataError
|
||||||
from zilencer.models import (
|
from zilencer.models import (
|
||||||
RemoteCustomerUserCount,
|
RemoteCustomerUserCount,
|
||||||
|
RemoteZulipServerAuditLog,
|
||||||
get_remote_realm_guest_and_non_guest_count,
|
get_remote_realm_guest_and_non_guest_count,
|
||||||
get_remote_server_guest_and_non_guest_count,
|
get_remote_server_guest_and_non_guest_count,
|
||||||
)
|
)
|
||||||
@@ -61,6 +63,7 @@ class PlanData:
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class SupportData:
|
class SupportData:
|
||||||
|
date_created: datetime
|
||||||
plan_data: PlanData
|
plan_data: PlanData
|
||||||
sponsorship_data: SponsorshipData
|
sponsorship_data: SponsorshipData
|
||||||
user_data: RemoteCustomerUserCount
|
user_data: RemoteCustomerUserCount
|
||||||
@@ -182,9 +185,14 @@ def get_current_plan_data_for_support_view(billing_session: BillingSession) -> P
|
|||||||
def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
|
def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
|
||||||
if isinstance(billing_session, RemoteServerBillingSession):
|
if isinstance(billing_session, RemoteServerBillingSession):
|
||||||
user_data = get_remote_server_guest_and_non_guest_count(billing_session.remote_server.id)
|
user_data = get_remote_server_guest_and_non_guest_count(billing_session.remote_server.id)
|
||||||
|
date_created = RemoteZulipServerAuditLog.objects.get(
|
||||||
|
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
|
||||||
|
server__id=billing_session.remote_server.id,
|
||||||
|
).event_time
|
||||||
else:
|
else:
|
||||||
assert isinstance(billing_session, RemoteRealmBillingSession)
|
assert isinstance(billing_session, RemoteRealmBillingSession)
|
||||||
user_data = get_remote_realm_guest_and_non_guest_count(billing_session.remote_realm)
|
user_data = get_remote_realm_guest_and_non_guest_count(billing_session.remote_realm)
|
||||||
|
date_created = billing_session.remote_realm.realm_date_created
|
||||||
plan_data = get_current_plan_data_for_support_view(billing_session)
|
plan_data = get_current_plan_data_for_support_view(billing_session)
|
||||||
customer = billing_session.get_customer()
|
customer = billing_session.get_customer()
|
||||||
if customer is not None:
|
if customer is not None:
|
||||||
@@ -193,6 +201,7 @@ def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
|
|||||||
sponsorship_data = SponsorshipData()
|
sponsorship_data = SponsorshipData()
|
||||||
|
|
||||||
return SupportData(
|
return SupportData(
|
||||||
|
date_created=date_created,
|
||||||
plan_data=plan_data,
|
plan_data=plan_data,
|
||||||
sponsorship_data=sponsorship_data,
|
sponsorship_data=sponsorship_data,
|
||||||
user_data=user_data,
|
user_data=user_data,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<h4>Has a discount 🟢</h4>
|
<h4>Has a discount 🟢</h4>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<b>Remote realm host:</b> {{ remote_realm.host }}<br />
|
<b>Remote realm host:</b> {{ remote_realm.host }}<br />
|
||||||
<b>Date created</b>: {{ remote_realm.realm_date_created.strftime('%d %B %Y') }}<br />
|
<b>Date created</b>: {{ support_data[remote_realm.id].date_created.strftime('%d %B %Y') }}<br />
|
||||||
<b>Org type</b>: {{ get_org_type_display_name(remote_realm.org_type) }}<br />
|
<b>Org type</b>: {{ get_org_type_display_name(remote_realm.org_type) }}<br />
|
||||||
<b>Plan type</b>: {{ get_plan_type_name(remote_realm.plan_type) }}<br />
|
<b>Plan type</b>: {{ get_plan_type_name(remote_realm.plan_type) }}<br />
|
||||||
<b>Non-guest user count</b>: {{ support_data[remote_realm.id].user_data.non_guest_user_count }}<br />
|
<b>Non-guest user count</b>: {{ support_data[remote_realm.id].user_data.non_guest_user_count }}<br />
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
<i class="fa fa-copy"></i>
|
<i class="fa fa-copy"></i>
|
||||||
</a>
|
</a>
|
||||||
<br />
|
<br />
|
||||||
<b>Last updated</b>: {{ remote_server.last_updated|timesince }} ago<br />
|
<b>Date created</b>: {{ remote_servers_support_data[remote_server.id].date_created.strftime('%d %B %Y') }}<br />
|
||||||
<b>Zulip version</b>: {{ remote_server.last_version }}<br />
|
<b>Zulip version</b>: {{ remote_server.last_version }}<br />
|
||||||
<b>Max monthly messages</b>: {{ remote_server_to_max_monthly_messages[remote_server.id] }}<br />
|
<b>Max monthly messages</b>: {{ remote_server_to_max_monthly_messages[remote_server.id] }}<br />
|
||||||
<b>Plan type</b>: {{ get_plan_type_name(remote_server.plan_type) }}<br />
|
<b>Plan type</b>: {{ get_plan_type_name(remote_server.plan_type) }}<br />
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ from zilencer.models import (
|
|||||||
RemoteRealmBillingUser,
|
RemoteRealmBillingUser,
|
||||||
RemoteServerBillingUser,
|
RemoteServerBillingUser,
|
||||||
RemoteZulipServer,
|
RemoteZulipServer,
|
||||||
|
RemoteZulipServerAuditLog,
|
||||||
)
|
)
|
||||||
from zilencer.views import update_remote_realm_data_for_server
|
from zilencer.views import update_remote_realm_data_for_server
|
||||||
from zproject.config import get_secret
|
from zproject.config import get_secret
|
||||||
@@ -421,6 +422,12 @@ def populate_remote_server(customer_profile: CustomerProfile) -> Dict[str, str]:
|
|||||||
last_audit_log_update=timezone_now(),
|
last_audit_log_update=timezone_now(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
RemoteZulipServerAuditLog.objects.create(
|
||||||
|
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
|
||||||
|
server=remote_server,
|
||||||
|
event_time=remote_server.last_updated,
|
||||||
|
)
|
||||||
|
|
||||||
billing_user = RemoteServerBillingUser.objects.create(
|
billing_user = RemoteServerBillingUser.objects.create(
|
||||||
full_name="Server user",
|
full_name="Server user",
|
||||||
remote_server=remote_server,
|
remote_server=remote_server,
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ from zerver.models.realms import get_realm
|
|||||||
from zerver.models.recipients import get_or_create_huddle
|
from zerver.models.recipients import get_or_create_huddle
|
||||||
from zerver.models.streams import get_stream
|
from zerver.models.streams import get_stream
|
||||||
from zerver.models.users import get_user, get_user_by_delivery_email, get_user_profile_by_id
|
from zerver.models.users import get_user, get_user_by_delivery_email, get_user_profile_by_id
|
||||||
from zilencer.models import RemoteRealm, RemoteZulipServer
|
from zilencer.models import RemoteRealm, RemoteZulipServer, RemoteZulipServerAuditLog
|
||||||
from zilencer.views import update_remote_realm_data_for_server
|
from zilencer.views import update_remote_realm_data_for_server
|
||||||
|
|
||||||
settings.USING_TORNADO = False
|
settings.USING_TORNADO = False
|
||||||
@@ -390,6 +390,11 @@ class Command(BaseCommand):
|
|||||||
last_updated=timezone_now(),
|
last_updated=timezone_now(),
|
||||||
contact_email="remotezulipserver@zulip.com",
|
contact_email="remotezulipserver@zulip.com",
|
||||||
)
|
)
|
||||||
|
RemoteZulipServerAuditLog.objects.create(
|
||||||
|
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
|
||||||
|
server=server,
|
||||||
|
event_time=server.last_updated,
|
||||||
|
)
|
||||||
update_remote_realm_data_for_server(server, get_realms_info_for_push_bouncer())
|
update_remote_realm_data_for_server(server, get_realms_info_for_push_bouncer())
|
||||||
|
|
||||||
# Create test Users (UserProfiles are automatically created,
|
# Create test Users (UserProfiles are automatically created,
|
||||||
|
|||||||
Reference in New Issue
Block a user