diff --git a/packages/monitoring/baselime/src/services/baselime-server-monitoring.service.ts b/packages/monitoring/baselime/src/services/baselime-server-monitoring.service.ts index 9c8ea7c06..12addd4e2 100644 --- a/packages/monitoring/baselime/src/services/baselime-server-monitoring.service.ts +++ b/packages/monitoring/baselime/src/services/baselime-server-monitoring.service.ts @@ -31,7 +31,7 @@ export class BaselimeServerMonitoringService implements MonitoringService { message: error ? `${error.name}: ${error.message}` : `Unknown error`, }; - const response = await fetch(`https://events.baselime.io/v1/web`, { + const response = await fetch(`https://events.baselime.io/v1/logs`, { method: 'POST', headers: { contentType: 'application/json', @@ -60,6 +60,42 @@ export class BaselimeServerMonitoringService implements MonitoringService { } } + async captureEvent< + Extra extends { + sessionId?: string; + namespace?: string; + service?: string; + }, + >(event: string, extra?: Extra) { + const response = await fetch(`https://events.baselime.io/v1/logs`, { + method: 'POST', + headers: { + contentType: 'application/json', + 'x-api-key': apiKey, + 'x-service': extra?.service ?? '', + 'x-namespace': extra?.namespace ?? '', + }, + body: JSON.stringify([ + { + userId: this.userId, + sessionId: extra?.sessionId, + namespace: extra?.namespace, + message: event, + }, + ]), + }); + + if (!response.ok) { + console.error( + { + response, + event, + }, + 'Failed to send event to Baselime', + ); + } + } + identifyUser(info: Info) { this.userId = info.id; } diff --git a/packages/monitoring/core/src/monitoring.service.ts b/packages/monitoring/core/src/monitoring.service.ts index 1efca0757..d830945cf 100644 --- a/packages/monitoring/core/src/monitoring.service.ts +++ b/packages/monitoring/core/src/monitoring.service.ts @@ -14,6 +14,16 @@ export abstract class MonitoringService { extra?: Extra, ): unknown; + /** + * Track an event + * @param event + * @param extra + */ + abstract captureEvent( + event: string, + extra?: Extra, + ): unknown; + /** * Identify a user in the monitoring service - used for tracking user actions * @param info diff --git a/packages/monitoring/sentry/src/services/sentry-server-monitoring.service.ts b/packages/monitoring/sentry/src/services/sentry-server-monitoring.service.ts index 57c9817ce..bf09a69f3 100644 --- a/packages/monitoring/sentry/src/services/sentry-server-monitoring.service.ts +++ b/packages/monitoring/sentry/src/services/sentry-server-monitoring.service.ts @@ -12,6 +12,13 @@ export class SentryServerMonitoringService implements MonitoringService { return Sentry.captureException(error); } + captureEvent(event: string, extra?: Extra) { + return Sentry.captureEvent({ + message: event, + ...(extra ?? {}), + }); + } + identifyUser(user: Sentry.User) { Sentry.setUser(user); }