segment_analytics.py 946 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. from __future__ import annotations
  2. import asyncio
  3. import logging
  4. from yarl import URL
  5. import aiohttp
  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. async def _track(user: u.User, event: str, properties: dict) -> None:
  12. await http.post(
  13. segment_url,
  14. json={
  15. "userId": user.mxid,
  16. "event": event,
  17. "properties": {"bridge": "signal", **properties},
  18. },
  19. auth=aiohttp.BasicAuth(login=segment_key, encoding="utf-8"),
  20. )
  21. log.debug(f"Tracked {event}")
  22. def track(user: u.User, event: str, properties: dict | None = None):
  23. if segment_key:
  24. asyncio.create_task(_track(user, event, properties or {}))
  25. def init(key):
  26. global segment_key, http
  27. segment_key = key
  28. http = aiohttp.ClientSession()