diff --git a/scripts/inject-amplitude.js b/scripts/inject-amplitude.js index d552e6e50..084ddbc16 100644 --- a/scripts/inject-amplitude.js +++ b/scripts/inject-amplitude.js @@ -4,7 +4,7 @@ import { fileURLToPath } from 'url'; const AMPLITUDE_API_KEY = process.env.AMPLITUDE_API_KEY; const AMPLITUDE_SERVER_URL = process.env.AMPLITUDE_SERVER_URL; -const AMPLITUDE_SERVER_ZONE = process.env.AMPLITUDE_SERVER_ZONE || 'US'; +const AMPLITUDE_SERVER_ZONE = process.env.AMPLITUDE_SERVER_ZONE ?? 'US'; const currentPath = fileURLToPath(import.meta.url); const projectRoot = path.dirname(currentPath); @@ -32,31 +32,52 @@ async function inject(fileName) { const amplitudeListenerScript = ``; diff --git a/scripts/inject-bugsnag.js b/scripts/inject-bugsnag.js index 7dff7cef5..dba66930b 100644 --- a/scripts/inject-bugsnag.js +++ b/scripts/inject-bugsnag.js @@ -27,6 +27,7 @@ async function inject(fileName) { (function() { var BUGSNAG_API_KEY = '${BUGSNAG_API_KEY}'; var walletType; + var frontend = 'bonk'; if (BUGSNAG_API_KEY) { Bugsnag.start(BUGSNAG_API_KEY); @@ -40,6 +41,9 @@ async function inject(fileName) { case 'walletType': walletType = value; break; + case 'frontend': + frontend = value; + break; default: break; } @@ -59,6 +63,9 @@ async function inject(fileName) { if (walletType) { event.addMetadata('walletType', walletType); } + if (frontend) { + event.addMetadata('frontend', frontend); + } }); } else { console.warn(location, error, metadata); diff --git a/src/lib/analytics/datadog.ts b/src/lib/analytics/datadog.ts index 1200e4a16..1280f7f51 100644 --- a/src/lib/analytics/datadog.ts +++ b/src/lib/analytics/datadog.ts @@ -8,6 +8,7 @@ const SERVICE_NAME = 'v4-web'; const LOGGER_NAME = 'v4-web'; const SITE_NAME = 'datadoghq.com'; const instanceId = crypto.randomUUID(); +const FRONTEND = 'bonk'; const LOG_ENDPOINT_PATH = (PROXY_URL ?? '').endsWith('/') ? 'api/v2/logs' : '/api/v2/logs'; @@ -22,6 +23,10 @@ if (CLIENT_TOKEN) { proxy: PROXY_URL ? `${PROXY_URL}${LOG_ENDPOINT_PATH}` : undefined, sendLogsAfterSessionExpiration: true, }); + + datadogLogs.setGlobalContextProperty('frontend', FRONTEND); + datadogLogs.setGlobalContextProperty('dd-client-token', CLIENT_TOKEN); + datadogLogs.setGlobalContextProperty('instance-id', instanceId); } datadogLogs.createLogger(LOGGER_NAME); @@ -29,7 +34,7 @@ datadogLogs.createLogger(LOGGER_NAME); const datadogLogger = datadogLogs.getLogger(LOGGER_NAME)!; datadogLogger.setContextProperty('dd-client-token', CLIENT_TOKEN); datadogLogger.setContextProperty('instance-id', instanceId); -datadogLogger.setContextProperty('frontend', 'bonk'); +datadogLogger.setContextProperty('frontend', FRONTEND); /** * TODO: make a logger wrapper that enables us also log to the console diff --git a/src/lib/telemetry.ts b/src/lib/telemetry.ts index e0106afb8..2840b7a82 100644 --- a/src/lib/telemetry.ts +++ b/src/lib/telemetry.ts @@ -4,6 +4,8 @@ import { isDev } from '@/constants/networks'; import { track } from './analytics/analytics'; import { dd } from './analytics/datadog'; +const FRONTEND = 'bonk'; + let lastLogTime = Date.now(); export function getDurationSinceLastLogMs() { @@ -11,17 +13,18 @@ export function getDurationSinceLastLogMs() { } export const log = (location: string, error?: Error, metadata?: object) => { + const modifiedMetadata = { ...metadata, frontend: FRONTEND }; lastLogTime = Date.now(); if (isDev) { // eslint-disable-next-line no-console - console.warn('telemetry/log:', { location, error, metadata }); + console.warn('telemetry/log:', { location, error, metadata: modifiedMetadata }); } const customEvent = new CustomEvent('dydx:log', { detail: { location, error, - metadata, + metadata: modifiedMetadata, }, }); @@ -29,24 +32,25 @@ export const log = (location: string, error?: Error, metadata?: object) => { AnalyticsEvents.Error({ location, error, - metadata, + metadata: modifiedMetadata, }) ); - dd.error(`[Error] ${location}`, metadata, error); + dd.error(`[Error] ${location}`, { ...metadata, frontend: FRONTEND }, error); globalThis.dispatchEvent(customEvent); }; export const logInfo = (location: string, metadata?: object) => { lastLogTime = Date.now(); + const modifiedMetadata = { ...metadata, frontend: FRONTEND }; if (isDev) { // eslint-disable-next-line no-console - console.log('telemetry/logInfo:', { location, metadata }); + console.log('telemetry/logInfo:', { location, metadata: modifiedMetadata }); } - dd.info(`[Info] ${location}`, metadata); + dd.info(`[Info] ${location}`, { ...metadata, frontend: FRONTEND }); }; // Log rejected Promises without a .catch() handler