mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
analytics: Add APIs for submitting analytics to another server.
This adds a new API for sending basic analytics data (number of users, number of messages sent) from a Zulip server to the Zulip Cloud central analytics database, which will make it possible for servers to elect to have their usage numbers counted in published stats on the size of the Zulip ecosystem.
This commit is contained in:
@@ -3,6 +3,7 @@ import datetime
|
||||
from django.db import models
|
||||
|
||||
from zerver.models import AbstractPushDeviceToken
|
||||
from analytics.models import BaseCount
|
||||
|
||||
def get_remote_server_by_uuid(uuid: str) -> 'RemoteZulipServer':
|
||||
return RemoteZulipServer.objects.get(uuid=uuid)
|
||||
@@ -33,3 +34,28 @@ class RemotePushDeviceToken(AbstractPushDeviceToken):
|
||||
|
||||
def __str__(self) -> str:
|
||||
return "<RemotePushDeviceToken %s %s>" % (self.server, self.user_id)
|
||||
|
||||
class RemoteInstallationCount(BaseCount):
|
||||
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE) # type: RemoteZulipServer
|
||||
# The remote_id field lets us deduplicate data from the remote server
|
||||
remote_id = models.IntegerField(db_index=True) # type: int
|
||||
|
||||
class Meta:
|
||||
unique_together = ("server", "property", "subgroup", "end_time")
|
||||
|
||||
def __str__(self) -> str:
|
||||
return "<InstallationCount: %s %s %s>" % (self.property, self.subgroup, self.value)
|
||||
|
||||
# We can't subclass RealmCount because we only have a realm_id here, not a foreign key.
|
||||
class RemoteRealmCount(BaseCount):
|
||||
server = models.ForeignKey(RemoteZulipServer, on_delete=models.CASCADE) # type: RemoteZulipServer
|
||||
realm_id = models.IntegerField(db_index=True) # type: int
|
||||
# The remote_id field lets us deduplicate data from the remote server
|
||||
remote_id = models.IntegerField(db_index=True) # type: int
|
||||
|
||||
class Meta:
|
||||
unique_together = ("server", "realm_id", "property", "subgroup", "end_time")
|
||||
index_together = ["property", "end_time"]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return "%s %s %s %s %s" % (self.server, self.realm_id, self.property, self.subgroup, self.value)
|
||||
|
||||
Reference in New Issue
Block a user