| 391 | |
| 392 | @staticmethod |
| 393 | def track_user( |
| 394 | event, |
| 395 | email = None): |
| 396 | # Validate an event exists. |
| 397 | if settings.DIFFGRAM_SYSTEM_MODE in ['testing', 'testing_e2e']: |
| 398 | return |
| 399 | if event is None: |
| 400 | return |
| 401 | if event.member_id is None: |
| 402 | return |
| 403 | if email is None: |
| 404 | return |
| 405 | if not settings._ANALYTICS_WRITE_KEY: |
| 406 | return |
| 407 | # CAREFUL using MEMBER id NOT user id. |
| 408 | props = { |
| 409 | 'description': event.description, |
| 410 | 'success': event.success, |
| 411 | 'run_time': event.run_time, |
| 412 | 'email': email, |
| 413 | 'project_id': event.project_id |
| 414 | } |
| 415 | if event.error_log is not None and type(event.error_log) is dict: |
| 416 | props.update(event.error_log) |
| 417 | try: |
| 418 | analytics.track( |
| 419 | user_id = event.member_id, |
| 420 | event = event.kind, |
| 421 | properties = props, |
| 422 | context = { |
| 423 | 'traits': { |
| 424 | event.kind: True |
| 425 | } |
| 426 | } |
| 427 | ) |
| 428 | except Exception as e: |
| 429 | logger.error(f"Error tracking user: {e}") |
| 430 | pass |
| 431 | |
| 432 | @staticmethod |
| 433 | def list( |