from logging import Logger from typing import List from amplitude import BaseEvent, Amplitude from juno_email_messages import config from juno_email_messages import logger class BaseEventExt(BaseEvent): def __str__(self): return f"{self.event_properties.get('account_id')}/{self.event_properties.get('filter_id')}" def __repr__(self): return f"{self.event_properties.get('account_id')}/{self.event_properties.get('filter_id')}" def amplitude_callback(event: BaseEventExt, code: int, message: str): logger.log.debug(f"{event}: {code} {message}") def get_client(logger: Logger): amplitude_client = Amplitude(config.AMPLITUDE_CLIENT_ID) amplitude_client.configuration.logger = logger amplitude_client.configuration.use_batch = True amplitude_client.configuration.opt_out = False amplitude_client.configuration.callback = amplitude_callback return amplitude_client def send_amplitude_events(message_list: List[dict], logger: Logger): if not message_list: return if not config.AMPLITUDE_CLIENT_ID: logger.debug("Amplitude client id is not set") return try: client = get_client(logger) for message in message_list: client.track( BaseEventExt( event_type="Juno email sent", user_id="auth0|" + message.pop("user_id"), device_id=config.AMPLITUDE_DEVICE_ID, event_properties=message, ) ) client.flush() client.shutdown() logger.debug(f"{len(message_list)} amplitude events sent") except Exception as ex: logger.debug(f"Error sending amplitude events: {ex}")