ComfyUI/comfy/analytics/multi_event_tracker.py
doctorpangloss 1b2ea61345 Improved API support
- Run comfyui workflows directly inside other python applications using
   EmbeddedComfyClient.
 - Optional telemetry in prompts and models using anonymity preserving
   Plausible self-hosted or hosted.
 - Better OpenAPI schema
 - Basic support for distributed ComfyUI backends. Limitations: no
   progress reporting, no easy way to start your own distributed
   backend, requires RabbitMQ as a message broker.
2024-02-07 14:20:21 -08:00

38 lines
1.3 KiB
Python

import asyncio
from typing import List, Optional, Dict, Any, Union
from .event_tracker import EventTracker
class MultiEventTracker(EventTracker):
def __init__(self, trackers: List[EventTracker]) -> None:
super().__init__()
self.trackers = trackers
async def track_event(self, name: str, url: str, referrer: Optional[str] = None,
props: Optional[Dict[str, Any]] = None) -> None:
tasks = [tracker.track_event(name, url, referrer, props) for tracker in self.trackers]
await asyncio.gather(*tasks)
async def close(self) -> None:
tasks = [tracker.close() for tracker in self.trackers]
await asyncio.gather(*tasks)
@property
def user_agent(self) -> str:
return next(tracker.user_agent for tracker in self.trackers) if len(self.trackers) > 0 else "(unknown)"
@user_agent.setter
def user_agent(self, value: str) -> None:
for tracker in self.trackers:
tracker.user_agent = value
@property
def domain(self) -> str:
return next(tracker.domain for tracker in self.trackers) if len(self.trackers) > 0 else ("unknown")
@domain.setter
def domain(self, value: str) -> None:
for tracker in self.trackers:
tracker.domain = value