- Replaced Sentry breadcrumbs and context setting with a custom telemetry implementation across various components including Apps, WebView, CarouselBox, and ndView. - Introduced a new telemetry module to encapsulate observability logic and provide a unified API for logging events, messages, and exceptions. - Updated documentation to reflect changes in observability architecture, consolidating Sentry initialization and telemetry usage. - Enhanced error handling and logging in data fetching and application lifecycle management.
121 lines
2.8 KiB
TypeScript
121 lines
2.8 KiB
TypeScript
import {
|
|
captureTelemetryException,
|
|
captureTelemetryMessage,
|
|
recordBreadcrumb,
|
|
setTelemetryContext,
|
|
setTelemetryTag,
|
|
startTelemetrySpan,
|
|
} from "./sentry";
|
|
|
|
export type TelemetryLevel =
|
|
| "debug"
|
|
| "info"
|
|
| "warning"
|
|
| "error"
|
|
| "fatal";
|
|
|
|
export type TelemetryData = Record<string, unknown>;
|
|
|
|
export type TelemetryBreadcrumb = {
|
|
category: string;
|
|
message: string;
|
|
level?: TelemetryLevel;
|
|
data?: TelemetryData;
|
|
};
|
|
|
|
export type TelemetryScopedBreadcrumb = Omit<TelemetryBreadcrumb, "category">;
|
|
|
|
export type TelemetryCaptureOptions = {
|
|
level?: TelemetryLevel;
|
|
tags?: Record<string, string>;
|
|
contexts?: Record<string, TelemetryData>;
|
|
extra?: TelemetryData;
|
|
fingerprint?: string[];
|
|
};
|
|
|
|
export type TelemetrySpanOptions = {
|
|
name: string;
|
|
description?: string;
|
|
op?: string;
|
|
attributes?: TelemetryData;
|
|
};
|
|
|
|
export type TelemetryScope = {
|
|
breadcrumb: (event: TelemetryScopedBreadcrumb) => void;
|
|
debug: (messageText: string, data?: TelemetryData) => void;
|
|
info: (messageText: string, data?: TelemetryData) => void;
|
|
warning: (messageText: string, data?: TelemetryData) => void;
|
|
error: (messageText: string, data?: TelemetryData) => void;
|
|
fatal: (messageText: string, data?: TelemetryData) => void;
|
|
};
|
|
|
|
function breadcrumb(event: TelemetryBreadcrumb): void {
|
|
recordBreadcrumb({
|
|
...event,
|
|
level: event.level ?? "info",
|
|
});
|
|
}
|
|
|
|
function context(name: string, data: TelemetryData | null): void {
|
|
setTelemetryContext(name, data);
|
|
}
|
|
|
|
function tag(name: string, value: string): void {
|
|
setTelemetryTag(name, value);
|
|
}
|
|
|
|
function message(
|
|
messageText: string,
|
|
options: TelemetryCaptureOptions = {},
|
|
): void {
|
|
captureTelemetryMessage(messageText, options);
|
|
}
|
|
|
|
function exception(
|
|
error: unknown,
|
|
options: TelemetryCaptureOptions = {},
|
|
): void {
|
|
captureTelemetryException(error, options);
|
|
}
|
|
|
|
function createScope(category: string): TelemetryScope {
|
|
const emit = (
|
|
level: TelemetryLevel,
|
|
messageText: string,
|
|
data?: TelemetryData,
|
|
) => {
|
|
breadcrumb({
|
|
category,
|
|
level,
|
|
message: messageText,
|
|
...(data === undefined ? {} : { data }),
|
|
});
|
|
};
|
|
|
|
return {
|
|
breadcrumb: (event) => breadcrumb({ category, ...event }),
|
|
debug: (messageText, data) => emit("debug", messageText, data),
|
|
info: (messageText, data) => emit("info", messageText, data),
|
|
warning: (messageText, data) => emit("warning", messageText, data),
|
|
error: (messageText, data) => emit("error", messageText, data),
|
|
fatal: (messageText, data) => emit("fatal", messageText, data),
|
|
};
|
|
}
|
|
|
|
function span<T>(
|
|
options: TelemetrySpanOptions,
|
|
callback: () => Promise<T>,
|
|
): Promise<T> {
|
|
return startTelemetrySpan(options, callback);
|
|
}
|
|
|
|
export const telemetry = {
|
|
breadcrumb,
|
|
context,
|
|
tag,
|
|
message,
|
|
exception,
|
|
span,
|
|
scope: createScope,
|
|
};
|