segment_analytics.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from __future__ import annotations
  2. import logging
  3. from yarl import URL
  4. import aiohttp
  5. from mautrix.util import background_task
  6. from .. import user as u
  7. log = logging.getLogger("mau.web.public.analytics")
  8. segment_url: URL = URL("https://api.segment.io/v1/track")
  9. http: aiohttp.ClientSession | None = None
  10. segment_key: str | None = None
  11. segment_user_id: str | None = None
  12. async def _track(user: u.User, event: str, properties: dict) -> None:
  13. await http.post(
  14. segment_url,
  15. json={
  16. "userId": segment_user_id or user.mxid,
  17. "event": event,
  18. "properties": {"bridge": "signal", **properties},
  19. },
  20. auth=aiohttp.BasicAuth(login=segment_key, encoding="utf-8"),
  21. )
  22. log.debug(f"Tracked {event}")
  23. def track(user: u.User, event: str, properties: dict | None = None):
  24. if segment_key:
  25. background_task.create(_track(user, event, properties or {}))
  26. def init(key, user_id: str | None = None):
  27. global segment_key, segment_user_id, http
  28. segment_key = key
  29. segment_user_id = user_id
  30. http = aiohttp.ClientSession()