UNPKG

@dmhsq_monitor/web

Version:
191 lines (190 loc) 4.29 kB
import { MonitorConfig } from '@dmhsq_monitor/core'; /** * Web监控配置接口,扩展核心配置 */ export interface WebMonitorConfig extends MonitorConfig { /** 是否启用自动错误捕获 */ enableAutoErrorCapture?: boolean; /** 是否启用性能监控 */ enablePerformanceMonitoring?: boolean; /** 是否启用XHR/Fetch请求监控 */ enableRequestMonitoring?: boolean; /** 是否启用用户行为监控 */ enableBehaviorMonitoring?: boolean; /** 是否启用路由变化监控 */ enableRouteMonitoring?: boolean; /** 是否启用控制台错误监控 */ enableConsoleMonitoring?: boolean; /** 错误采样率 (0-1) */ errorSamplingRate?: number; /** 行为采样率 (0-1) */ behaviorSamplingRate?: number; /** 忽略特定错误的正则表达式或字符串数组 */ ignoreErrors?: (string | RegExp)[]; /** 忽略特定URL的正则表达式数组 */ ignoreUrls?: RegExp[]; /** * 启用性能监控 */ enablePerformance?: boolean; /** * 启用错误监控 */ enableError?: boolean; /** * 启用数据去重 */ enableDeduplicate?: boolean; /** * 收集地理位置信息 */ collectGeoInfo?: boolean; /** * 合并相似错误 */ mergeSimilarErrors?: boolean; /** * 上报前处理函数 */ onReport?: (events: any[], context: any) => any[] | Promise<any[]>; } /** * 性能数据接口 */ export interface PerformanceData { /** * 页面加载总时间 */ loadTime: number; /** * DOM加载时间 */ domReadyTime: number; /** * 重定向时间 */ redirectTime: number; /** * DNS解析时间 */ dnsTime: number; /** * TCP连接时间 */ tcpTime: number; /** * Time to First Byte (服务器响应时间) */ ttfb: number; /** * 内容下载时间 */ responseTime: number; /** * DOM Content Loaded 事件触发时间 */ domContentLoadedTime: number; /** * 页面URL */ url: string; /** * 首次绘制时间 (First Paint) */ firstPaint?: number; /** * 首次内容绘制时间 (First Contentful Paint) */ firstContentfulPaint?: number; /** * 页面来源URL */ referrer: string; /** * 页面进入方式 */ entryType: 'navigation' | 'direct'; /** * 来源页面路径 */ sourceLink: string; } /** * 网络请求数据接口 */ export interface RequestData { /** 请求URL */ url: string; /** 请求方法 */ method: string; /** 状态码 */ status?: number; /** 请求开始时间 */ startTime: number; /** 请求结束时间 */ endTime?: number; /** 请求持续时间 */ duration?: number; /** 请求头 */ requestHeaders?: Record<string, string>; /** 响应头 */ responseHeaders?: Record<string, string>; /** 请求体 */ requestBody?: string; /** 响应体 */ responseBody?: string; /** 是否成功 */ success: boolean; /** 错误信息 */ errorMessage?: string; } /** * 用户行为数据接口 */ export interface BehaviorData { /** 行为类型 */ type: 'click' | 'input' | 'scroll' | 'navigation' | 'custom'; /** 页面URL */ url: string; /** 元素路径 */ path?: string; /** 元素ID */ elementId?: string; /** 元素类名 */ className?: string; /** 元素内容 */ content?: string; /** 用户输入内容 */ inputValue?: string; /** 滚动位置 */ scrollPosition?: { x: number; y: number; }; /** 相关数据 */ meta?: Record<string, any>; } export interface ErrorInfo { message: string; name: string; stack?: string; cause?: any; } export interface JSError extends ErrorInfo { url: string; timestamp: number; userAgent: string; } export interface ResourceError { tagName: string; src?: string; href?: string; outerHTML?: string; url: string; timestamp: number; } export interface UnhandledRejectionError extends ErrorInfo { type: string; url: string; timestamp: number; }