@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 +151 -1
- package/dist/{lib/core/sdk.d.ts → index.d.ts} +7 -2
- package/dist/index.js +548 -0
- package/package.json +5 -6
- package/dist/lib/const.d.ts +0 -11
- package/dist/lib/const.js +0 -34
- package/dist/lib/core/instrumentation/PvInstrumentation.d.ts +0 -17
- package/dist/lib/core/instrumentation/PvInstrumentation.js +0 -61
- package/dist/lib/core/log-exporter.d.ts +0 -25
- package/dist/lib/core/log-exporter.js +0 -135
- package/dist/lib/core/metric-exporter.d.ts +0 -42
- package/dist/lib/core/metric-exporter.js +0 -219
- package/dist/lib/core/resource-detector.d.ts +0 -21
- package/dist/lib/core/resource-detector.js +0 -60
- package/dist/lib/core/sdk.js +0 -151
- package/dist/lib/index.d.ts +0 -2
- package/dist/lib/index.js +0 -26
- package/dist/lib/types.d.ts +0 -336
- package/dist/lib/types.js +0 -29
- package/dist/lib/utils/convertAllAttrIntoString.d.ts +0 -3
- package/dist/lib/utils/convertAllAttrIntoString.js +0 -37
- package/dist/lib/utils/generateUUID.d.ts +0 -3
- package/dist/lib/utils/generateUUID.js +0 -35
- package/dist/lib/utils/getDefaultAttr.d.ts +0 -14
- package/dist/lib/utils/getDefaultAttr.js +0 -36
- package/dist/lib/utils/getDeviceID.d.ts +0 -3
- package/dist/lib/utils/getDeviceID.js +0 -33
- package/dist/lib/utils/getDeviceTypeByAgent.d.ts +0 -11
- package/dist/lib/utils/getDeviceTypeByAgent.js +0 -36
- package/dist/lib/utils/hrTimeToNanoNumber.d.ts +0 -10
- package/dist/lib/utils/hrTimeToNanoNumber.js +0 -29
package/README.md
CHANGED
|
@@ -1 +1,151 @@
|
|
|
1
|
-
# @lark-apaas/
|
|
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
|
-
|
|
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 {
|
|
38
|
+
export { AppEnv, observable };
|