@lark-apaas/observable-web 1.0.0-alpha.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,151 @@
1
- # @lark-apaas/miaoda-inspector-jsx-runtime
1
+ # @lark-apaas/observable-web
2
+
3
+ 基于 OpenTelemetry 的前端可观测性 SDK,提供日志记录和指标收集能力,支持自动上报页面访问量(PV)等关键指标。
4
+
5
+ ## 1. Project Context (项目背景与定位)
6
+
7
+ ### Architectural Role: Core (核心底层)
8
+ Observable Web 是一个核心底层库,为 Lark Apaas 前端生态提供统一的可观测性能力,包括日志记录和指标收集。
9
+
10
+ ### Key Consumers (谁在用我)
11
+ - 🛠️ `@lark-apaas/toolkit`: 前端工具包,集成了该库作为底层可观测性基础
12
+
13
+ ### Core Dependencies (我依赖谁)
14
+ - 🔧 `@opentelemetry/resources`: 资源检测与管理
15
+ - 📝 `@opentelemetry/sdk-logs`: 日志 SDK
16
+ - 📊 `@opentelemetry/sdk-metrics`: 指标 SDK
17
+ - 🔗 `@opentelemetry/core`: 核心功能库
18
+
19
+ ## 2. Real-world Scenarios (基于真实挖掘)
20
+
21
+ ### Scenario A: The Standard Usage
22
+ **说明:** 在应用中初始化和配置 Observable Web SDK(参考自 `@lark-apaas/toolkit`)
23
+
24
+ ```typescript
25
+ import { observable, AppEnv } from "@lark-apaas/observable-web";
26
+
27
+ export const initObservable = () => {
28
+ observable.start({
29
+ serviceName: "app",
30
+ env: process.env.NODE_ENV === 'development' ? AppEnv.Dev : AppEnv.Prod,
31
+ collectorUrl: {
32
+ log: `/spark/app/${(window as unknown as {appId: string}).appId}/runtime/api/v1/observability/logs/collect`,
33
+ metric: `/spark/app/${(window as unknown as {appId: string}).appId}/runtime/api/v1/observability/metrics/collect`,
34
+ },
35
+ });
36
+ };
37
+ ```
38
+
39
+ ### Scenario B: Logging Usage
40
+ **说明:** 在业务组件中使用 SDK 记录日志
41
+
42
+ ```typescript
43
+ import { observable } from "@lark-apaas/observable-web";
44
+
45
+ // 在业务逻辑中记录日志
46
+ export const handleSubmit = () => {
47
+ try {
48
+ // 业务逻辑
49
+
50
+ // 记录成功日志
51
+ observable.log("INFO", "表单提交成功", {
52
+ formType: "userRegistration",
53
+ timestamp: Date.now(),
54
+ });
55
+ } catch (error) {
56
+ // 记录错误日志
57
+ observable.log("ERROR", "表单提交失败", {
58
+ errorType: "validationError",
59
+ errorMessage: (error as Error).message,
60
+ });
61
+ }
62
+ };
63
+ ```
64
+
65
+ ### Scenario C: Metric Usage
66
+ **说明:** 记录自定义指标
67
+
68
+ ```typescript
69
+ import { observable } from "@lark-apaas/observable-web";
70
+
71
+ // 记录用户操作次数
72
+ export const trackUserAction = (actionType: string) => {
73
+ observable.addCount("user_actions", 1, {
74
+ action_type: actionType,
75
+ timestamp: Date.now(),
76
+ });
77
+ };
78
+ ```
79
+
80
+ ## 3. API Reference
81
+
82
+ ### Core Exports
83
+
84
+ | 导出项 | 类型 | 说明 |
85
+ |--------|------|------|
86
+ | `observable` | `WebObservableSdk` | 单例 SDK 实例,提供所有可观测性功能 |
87
+ | `AppEnv` | `enum` | 应用环境枚举(`Dev = "preview"`, `Prod = "runtime"`) |
88
+
89
+ ### WebSdkConfig Interface
90
+
91
+ | 属性 | 类型 | 说明 |
92
+ |------|------|------|
93
+ | `serviceName` | `string` | 服务名称 |
94
+ | `env` | `AppEnv` | 应用环境(开发环境下不会上报数据) |
95
+ | `collectorUrl` | `{ log: string; metric: string }` | 日志和指标收集器 URL |
96
+ | `headers?` | `Record<string, string>` | 可选的请求头信息 |
97
+
98
+ ### Public Methods
99
+
100
+ #### `start(config: WebSdkConfig)`
101
+ - 初始化 SDK,启动日志和指标收集
102
+ - 参数:
103
+ - `config`: SDK 配置对象
104
+
105
+ #### `log(level: 'INFO' | 'ERROR' | 'WARN', message: string, attributes: Record<string, any> = {})`
106
+ - 记录日志
107
+ - 参数:
108
+ - `level`: 日志级别
109
+ - `message`: 日志消息内容
110
+ - `attributes`: 自定义属性(可选)
111
+
112
+ #### `addCount(name: string, value: number = 1, attributes: Record<string, any> = {})`
113
+ - 增加计数器指标
114
+ - 参数:
115
+ - `name`: 指标名称
116
+ - `value`: 增加的值(默认为 1)
117
+ - `attributes`: 自定义属性(可选)
118
+
119
+ #### `shutdown()`
120
+ - 关闭 SDK,清理资源
121
+
122
+ ## 4. Automatic Instrumentation
123
+
124
+ ### Page View (PV) Tracking
125
+ - SDK 自动初始化 PV 监控
126
+ - 记录页面访问量、停留时间等关键指标
127
+ - 通过 OpenTelemetry 的指标系统上报
128
+
129
+ ### Lifecycle Management
130
+ - 监听页面可见性变化(visibilitychange 事件)
131
+ - 页面隐藏时自动刷新数据
132
+ - 兼容老旧浏览器(pagehide 事件兜底)
133
+
134
+ ## 5. Installation
135
+
136
+ ```bash
137
+ npm install @lark-apaas/observable-web
138
+ ```
139
+
140
+ > 需要 `react` 和 `react-dom` 作为 peer 依赖。
141
+
142
+ ## 6. Performance Considerations
143
+
144
+ - **批量处理**:日志采用批量处理机制,每 5 秒上报一次
145
+ - **指标采集**:指标每 10 秒采集并上报一次
146
+ - **环境控制**:开发环境下自动禁用上报,避免干扰开发
147
+ - **资源优化**:使用懒加载和按需初始化,减少初始加载时间
148
+
149
+ ## License
150
+
151
+ MIT
@@ -1,4 +1,7 @@
1
- import { AppEnv } from '../const.js';
1
+ declare enum AppEnv {
2
+ Dev = "preview",
3
+ Prod = "runtime"
4
+ }
2
5
 
3
6
  interface WebSdkConfig {
4
7
  serviceName: string;
@@ -24,10 +27,12 @@ declare class WebObservableSdk {
24
27
  private initLogs;
25
28
  private initMetrics;
26
29
  private initAutoPv;
30
+ private flushData;
31
+ private registerLifecycleListeners;
27
32
  log(level: 'INFO' | 'ERROR' | 'WARN', message: string, attributes?: Record<string, any>): void;
28
33
  addCount(name: string, value?: number, attributes?: Record<string, any>): void;
29
34
  shutdown(): Promise<void>;
30
35
  }
31
36
  declare const observable: WebObservableSdk;
32
37
 
33
- export { WebObservableSdk, type WebSdkConfig, observable };
38
+ export { AppEnv, observable };