diff --git a/app/events/event_dispatcher.py b/app/events/event_dispatcher.py index c7546b8d..86605603 100644 --- a/app/events/event_dispatcher.py +++ b/app/events/event_dispatcher.py @@ -1,8 +1,12 @@ from abc import ABC, abstractmethod + +import newrelic.agent + from app import config from app.db import Session from app.errors import ProtonPartnerNotSetUp from app.events.generated import event_pb2 +from app.log import LOG from app.models import User, PartnerUser, SyncEvent from app.proton.utils import get_proton_partner from typing import Optional @@ -35,9 +39,13 @@ class EventDispatcher: skip_if_webhook_missing: bool = True, ): if config.EVENT_WEBHOOK_DISABLE: + LOG.i("Not sending events because webhook is disabled") return if not config.EVENT_WEBHOOK and skip_if_webhook_missing: + LOG.i( + "Not sending events because webhook is not configured and allowed to be empty" + ) return if config.EVENT_WEBHOOK_ENABLED_USER_IDS is not None: @@ -46,6 +54,9 @@ class EventDispatcher: partner_user = EventDispatcher.__partner_user(user.id) if not partner_user: + LOG.i( + f"Not sending events because there's no partner user for user {user}" + ) return event = event_pb2.Event( @@ -57,6 +68,8 @@ class EventDispatcher: serialized = event.SerializeToString() dispatcher.send(serialized) + newrelic.agent.record_custom_event("event_stored") + LOG.i("Sent event to the dispatcher") @staticmethod def __partner_user(user_id: int) -> Optional[PartnerUser]: diff --git a/app/jobs/event_jobs.py b/app/jobs/event_jobs.py index e019d348..cd990b9a 100644 --- a/app/jobs/event_jobs.py +++ b/app/jobs/event_jobs.py @@ -1,3 +1,5 @@ +import newrelic.agent + from app.events.event_dispatcher import EventDispatcher, Dispatcher from app.events.generated.event_pb2 import EventContent, AliasCreated, AliasCreatedList from app.log import LOG @@ -12,6 +14,7 @@ def send_alias_creation_events_for_user( return chunk_size = min(chunk_size, 50) event_list = [] + LOG.i("Sending alias create events for user {user}") for alias in ( Alias.yield_per_query(chunk_size) .filter_by(user_id=user.id) @@ -26,15 +29,23 @@ def send_alias_creation_events_for_user( ) ) if len(event_list) >= chunk_size: + LOG.i(f"Sending {len(event_list)} alias create event for {user}") EventDispatcher.send_event( user, EventContent(alias_create_list=AliasCreatedList(events=event_list)), dispatcher=dispatcher, ) + newrelic.agent.record_custom_metric( + "Custom/event_alias_created_event", len(event_list) + ) event_list = [] if len(event_list) > 0: + LOG.i(f"Sending {len(event_list)} alias create event for {user}") EventDispatcher.send_event( user, EventContent(alias_create_list=AliasCreatedList(events=event_list)), dispatcher=dispatcher, ) + newrelic.agent.record_custom_metric( + "Custom/event_alias_created_event", len(event_list) + ) diff --git a/events/event_sink.py b/events/event_sink.py index bc00d1f9..9c0a76d8 100644 --- a/events/event_sink.py +++ b/events/event_sink.py @@ -1,4 +1,5 @@ import requests +import newrelic.agent from abc import ABC, abstractmethod from app.config import EVENT_WEBHOOK, EVENT_WEBHOOK_SKIP_VERIFY_SSL @@ -26,6 +27,7 @@ class HttpEventSink(EventSink): headers={"Content-Type": "application/x-protobuf"}, verify=not EVENT_WEBHOOK_SKIP_VERIFY_SSL, ) + newrelic.agent.record_custom_event("event_sent", {"http_code": res.status_code}) if res.status_code != 200: LOG.warning( f"Failed to send event to webhook: {res.status_code} {res.text}"