From bce557cc2dc767628bed6aac87301a1be7c5431b Mon Sep 17 00:00:00 2001 From: rxliuli Date: Tue, 4 Nov 2025 05:03:50 +0800 Subject: init commit --- .../src/utils/metrics-dev-console/constants.ts | 7 +++ .../utils/metrics-dev-console/setup-metrics-dev.ts | 55 ++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 shared/metrics-8/src/utils/metrics-dev-console/constants.ts create mode 100644 shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts (limited to 'shared/metrics-8/src/utils/metrics-dev-console') diff --git a/shared/metrics-8/src/utils/metrics-dev-console/constants.ts b/shared/metrics-8/src/utils/metrics-dev-console/constants.ts new file mode 100644 index 0000000..7193da8 --- /dev/null +++ b/shared/metrics-8/src/utils/metrics-dev-console/constants.ts @@ -0,0 +1,7 @@ +/** + * Event type constants for metrics development console + */ +export const eventType = { + RECORD: 'record', + FLUSH: 'flush', +} as const; diff --git a/shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts b/shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts new file mode 100644 index 0000000..fb7def6 --- /dev/null +++ b/shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts @@ -0,0 +1,55 @@ +import { isFlushEvent, makeFlushEvent } from './events/flush-event'; +import { makeRecordEvent } from './events/record-event'; +import type { MetricsOptions, FlushEvent, MetricsObject } from './type'; + +/** + * Updates the metrics console by dispatching appropriate events + */ +const updateMetricsConsole = ( + topic: string, + metricsData: MetricsOptions | FlushEvent, +): void => { + let event = null; + const { metricsDevType, ...data } = metricsData ?? ({} as MetricsObject); + + if (isFlushEvent(metricsData)) { + event = makeFlushEvent(metricsData, topic); + } else if (metricsData) { + event = makeRecordEvent(data, topic); + } + + if (event) { + try { + window.dispatchEvent(event); + } catch (e) { + console.error('metric console failed', e); + } + } +}; + +const isMetricsDevConsoleEnabled = () => { + return ( + typeof window !== 'undefined' && + window.localStorage?.getItem('metrics-dev') === 'true' + ); +}; + +/** + * Sends metrics data to the development console if enabled + * @param metricsData - The metrics data to send + * @param topic - The topic/category for the metrics + */ +export const sendToMetricsDevConsole = ( + metricsData: MetricsOptions, + topic: string, +): void => { + if (import.meta.env.APP_SCOPE === 'internal') { + if (isMetricsDevConsoleEnabled()) { + try { + updateMetricsConsole(topic, metricsData); + } catch (error) { + console.warn('Failed to send metrics to dev console:', error); + } + } + } +}; -- cgit v1.2.3