mirror of
https://github.com/simple-login/app.git
synced 2024-09-21 01:11:29 +02:00
Add metrics and logs for the event sending
This commit is contained in:
parent
d49f6b88a9
commit
728f9bf1f8
@ -1,8 +1,12 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
import newrelic.agent
|
||||||
|
|
||||||
from app import config
|
from app import config
|
||||||
from app.db import Session
|
from app.db import Session
|
||||||
from app.errors import ProtonPartnerNotSetUp
|
from app.errors import ProtonPartnerNotSetUp
|
||||||
from app.events.generated import event_pb2
|
from app.events.generated import event_pb2
|
||||||
|
from app.log import LOG
|
||||||
from app.models import User, PartnerUser, SyncEvent
|
from app.models import User, PartnerUser, SyncEvent
|
||||||
from app.proton.utils import get_proton_partner
|
from app.proton.utils import get_proton_partner
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
@ -35,9 +39,13 @@ class EventDispatcher:
|
|||||||
skip_if_webhook_missing: bool = True,
|
skip_if_webhook_missing: bool = True,
|
||||||
):
|
):
|
||||||
if config.EVENT_WEBHOOK_DISABLE:
|
if config.EVENT_WEBHOOK_DISABLE:
|
||||||
|
LOG.i("Not sending events because webhook is disabled")
|
||||||
return
|
return
|
||||||
|
|
||||||
if not config.EVENT_WEBHOOK and skip_if_webhook_missing:
|
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
|
return
|
||||||
|
|
||||||
if config.EVENT_WEBHOOK_ENABLED_USER_IDS is not None:
|
if config.EVENT_WEBHOOK_ENABLED_USER_IDS is not None:
|
||||||
@ -46,6 +54,9 @@ class EventDispatcher:
|
|||||||
|
|
||||||
partner_user = EventDispatcher.__partner_user(user.id)
|
partner_user = EventDispatcher.__partner_user(user.id)
|
||||||
if not partner_user:
|
if not partner_user:
|
||||||
|
LOG.i(
|
||||||
|
f"Not sending events because there's no partner user for user {user}"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
event = event_pb2.Event(
|
event = event_pb2.Event(
|
||||||
@ -57,6 +68,8 @@ class EventDispatcher:
|
|||||||
|
|
||||||
serialized = event.SerializeToString()
|
serialized = event.SerializeToString()
|
||||||
dispatcher.send(serialized)
|
dispatcher.send(serialized)
|
||||||
|
newrelic.agent.record_custom_event("event_stored")
|
||||||
|
LOG.i("Sent event to the dispatcher")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __partner_user(user_id: int) -> Optional[PartnerUser]:
|
def __partner_user(user_id: int) -> Optional[PartnerUser]:
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import newrelic.agent
|
||||||
|
|
||||||
from app.events.event_dispatcher import EventDispatcher, Dispatcher
|
from app.events.event_dispatcher import EventDispatcher, Dispatcher
|
||||||
from app.events.generated.event_pb2 import EventContent, AliasCreated, AliasCreatedList
|
from app.events.generated.event_pb2 import EventContent, AliasCreated, AliasCreatedList
|
||||||
from app.log import LOG
|
from app.log import LOG
|
||||||
@ -12,6 +14,7 @@ def send_alias_creation_events_for_user(
|
|||||||
return
|
return
|
||||||
chunk_size = min(chunk_size, 50)
|
chunk_size = min(chunk_size, 50)
|
||||||
event_list = []
|
event_list = []
|
||||||
|
LOG.i("Sending alias create events for user {user}")
|
||||||
for alias in (
|
for alias in (
|
||||||
Alias.yield_per_query(chunk_size)
|
Alias.yield_per_query(chunk_size)
|
||||||
.filter_by(user_id=user.id)
|
.filter_by(user_id=user.id)
|
||||||
@ -26,15 +29,23 @@ def send_alias_creation_events_for_user(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
if len(event_list) >= chunk_size:
|
if len(event_list) >= chunk_size:
|
||||||
|
LOG.i(f"Sending {len(event_list)} alias create event for {user}")
|
||||||
EventDispatcher.send_event(
|
EventDispatcher.send_event(
|
||||||
user,
|
user,
|
||||||
EventContent(alias_create_list=AliasCreatedList(events=event_list)),
|
EventContent(alias_create_list=AliasCreatedList(events=event_list)),
|
||||||
dispatcher=dispatcher,
|
dispatcher=dispatcher,
|
||||||
)
|
)
|
||||||
|
newrelic.agent.record_custom_metric(
|
||||||
|
"Custom/event_alias_created_event", len(event_list)
|
||||||
|
)
|
||||||
event_list = []
|
event_list = []
|
||||||
if len(event_list) > 0:
|
if len(event_list) > 0:
|
||||||
|
LOG.i(f"Sending {len(event_list)} alias create event for {user}")
|
||||||
EventDispatcher.send_event(
|
EventDispatcher.send_event(
|
||||||
user,
|
user,
|
||||||
EventContent(alias_create_list=AliasCreatedList(events=event_list)),
|
EventContent(alias_create_list=AliasCreatedList(events=event_list)),
|
||||||
dispatcher=dispatcher,
|
dispatcher=dispatcher,
|
||||||
)
|
)
|
||||||
|
newrelic.agent.record_custom_metric(
|
||||||
|
"Custom/event_alias_created_event", len(event_list)
|
||||||
|
)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import requests
|
import requests
|
||||||
|
import newrelic.agent
|
||||||
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from app.config import EVENT_WEBHOOK, EVENT_WEBHOOK_SKIP_VERIFY_SSL
|
from app.config import EVENT_WEBHOOK, EVENT_WEBHOOK_SKIP_VERIFY_SSL
|
||||||
@ -26,6 +27,7 @@ class HttpEventSink(EventSink):
|
|||||||
headers={"Content-Type": "application/x-protobuf"},
|
headers={"Content-Type": "application/x-protobuf"},
|
||||||
verify=not EVENT_WEBHOOK_SKIP_VERIFY_SSL,
|
verify=not EVENT_WEBHOOK_SKIP_VERIFY_SSL,
|
||||||
)
|
)
|
||||||
|
newrelic.agent.record_custom_event("event_sent", {"http_code": res.status_code})
|
||||||
if res.status_code != 200:
|
if res.status_code != 200:
|
||||||
LOG.warning(
|
LOG.warning(
|
||||||
f"Failed to send event to webhook: {res.status_code} {res.text}"
|
f"Failed to send event to webhook: {res.status_code} {res.text}"
|
||||||
|
Loading…
Reference in New Issue
Block a user