瀏覽代碼

架构细节图

gemercheung 3 年之前
父節點
當前提交
3bc077a839

+ 150 - 2
README.md

@@ -1,2 +1,150 @@
-# 埋点SDK (代号:medici)
-> medici,美地奇
+# 埋点 SDK (代号:medici)
+
+> medici,美地奇
+
+# browser (浏览器行为)
+
+内置,取 XHR header, userAgent,os, deviceInfo, navigator,location, navigator.connection 等封装。
+
+# Event(全局事件行为类型)
+
+1. click
+2. delete
+3. upload
+
+## SDK 初始化 (monorepo)
+
+<!-- http://120.25.146.52:3090/mock/95/tracking/log/save -->
+
+> 1.普通 es 引包
+
+```js
+import * as medici from "@medici/web";
+medici.init({
+  url: "xxxxxx/tracking/log/save",
+  config: {
+    user: "xxxxxx",
+    version: "xxxxxxxx", //client version
+  },
+});
+```
+
+> 2.小程序 es
+
+```js
+import * as medici from "@medici/miniApp";
+medici.init({
+  url: "xxxxxx/tracking/log/save",
+  config: {
+    user: "xxxxxx",
+    version: "xxxxxxxx", //client version
+  },
+});
+```
+
+> 3.其他 amd 或源引入
+
+```js
+<script src="xxx/xxxx/medici-amd.js"></script>;
+medici.init({
+  url: "xxxxxx/tracking/log/save",
+  config: {
+    user: "xxxxxx",
+    version: "xxxxxxxx", //client version
+  },
+});
+```
+
+> 隐藏带上 SDK version
+
+## 页面(采集)
+
+#### 实现两种方法()
+
+1. 全局注册页面
+
+```js
+medici.setPages([
+  {
+    scene: "/scene",
+    setting: "/setting",
+  },
+]);
+```
+
+> 简单的 key:value, 影射页面采集
+
+2. 接入各 mmvm 的 router(vue-router,react-router) 或原生 history 监控。
+   以 routerName:url, 影射页面采集,
+
+## 点位(采集)
+
+> 主业务事件:eventType
+
+### 一次消费埋点
+
+```js
+medici.track("BuyProduct", {
+  eventType:"click",
+  ProductName: "MacBook Pro",
+  ProductPrice: 123.45,
+  IsAddedToFav: false,
+  ... // 其他自定业务字段
+});
+```
+
+### 二次消费埋点(闭环)
+
+> 开始,主要对接,init startTime,大部分参数等, maxWaitTime 是默认 30s,如果超过这个时间没有冲正 endTrack 的提示 warning.
+
+```js
+medici.startTrack("BuyProduct", {
+  eventType:"click",
+  maxWaitTime: 30000, //可自定义,主要是下载等行为耗时。
+  ProductName: "MacBook Pro",
+  ProductPrice: 123.45,
+  IsAddedToFav: false,
+  ... // 其他自定业务字段
+});
+
+```
+
+> 结束 ,init endTime, 后补参数
+
+```js
+medici.endTrack("BuyProduct", {
+  ... // 后补参数
+});
+
+```
+
+---
+
+## API (初定字段)
+
+|     名称     |  类型  | 是否必须 | 默认值 |                    备注                    |
+| :----------: | :----: | :------: | :----: | :----------------------------------------: |
+|   traceId    | string |   必须   |        |                 业务串联码                 |
+| requestType  | string |   必须   |        |   业务:BUSINESS(默认);心跳:HEARTBEAT    |
+|   channel    | string |   必须   |        |         渠道,例如四维看看,指房宝         |
+|    userId    | string |  非必须  |        |                                            |
+|     time     | string |  非必须  |        |                 请求时间戳                 |
+|  requestUrl  | string |  非必须  |        |                                            |
+| requestData  | string |  非必须  |        |         请求数据 ,xhr request data         |
+| TrackingType | string |  非必须  |        | 埋点类型,前端:FRONT(默认),后端:BACKEND |
+|  srcPageUrl  | string |   必须   |        |          发起请求页面 (location)           |
+|  actionType  | string |   必须   |        |                                            |
+|  actionName  | string |   必须   |        |                                            |
+|    userIP    | string |  非必须  |        |                                            |
+| userIpAdress | string |  非必须  |        |                                            |
+|  userAgent   | string |   必须   |        |                     UA                     |
+| networkType  | string |   必须   |        |                                            |
+|  requestId   | string |  非必须  |        |                                            |
+|   duration   | string |  非必须  |        |                                            |
+|    result    | string |  非必须  |        |                                            |
+|   endTime    | string |  非必须  |        |                请求结束时间                |
+
+## 其他问题.
+
+1. 脱敏处理,()crytojs,看加密级别。
+2.

+ 0 - 1
package.json

@@ -14,7 +14,6 @@
     "lint": "eslint --fix --ext js,ts,tsx ."
   },
   "devDependencies": {
-    "@nighttrax/eslint-config-tsx": "~10.0.0-beta.2",
     "@typescript-eslint/parser": "^5.30.6",
     "doctoc": "~2.2.0",
     "eslint": "~8.19.0",

+ 1 - 1
packages/bar/package.json

@@ -13,7 +13,7 @@
     "prepublishOnly": "pnpm run build"
   },
   "dependencies": {
-    "@nighttrax/foo": "workspace:~1.0.0"
+    "@medici/foo": "workspace:~1.0.0"
   },
   "devDependencies": {
     "rimraf": "~3.0.2",

+ 1 - 1
packages/bar/src/index.ts

@@ -1,3 +1,3 @@
-import { meaningOfLife } from "@nighttrax/foo";
+import { meaningOfLife } from "@medici/foo";
 // eslint-disable-next-line no-console
 console.log(meaningOfLife);

+ 0 - 12
packages/components/src/button.tsx

@@ -1,12 +0,0 @@
-/* eslint-disable no-alert */
-import { meaningOfLife } from "@nighttrax/foo";
-import React from "react";
-
-export const Button = () => (
-  <button
-    type="button"
-    onClick={() => alert(`the meaning if life is ${meaningOfLife}`)}
-  >
-    Click me
-  </button>
-);

+ 0 - 7
packages/components/tsconfig.json

@@ -1,7 +0,0 @@
-{
-  "extends": "../../tsconfig.json",
-  "compilerOptions": {
-    "jsx": "react",
-    "esModuleInterop": true
-  }
-}

+ 9 - 9
packages/components/package.json

@@ -1,22 +1,22 @@
 {
-  "name": "@medici/components",
+  "name": "@medici/core",
   "version": "1.0.0",
+  "main": "dist/index",
+  "types": "dist/index",
+  "files": [
+    "dist"
+  ],
   "scripts": {
     "build": "pnpm run clean && pnpm run compile",
     "clean": "rimraf -rf ./dist",
     "compile": "tsc -p tsconfig.build.json",
     "prepublishOnly": "pnpm run build"
   },
-  "peerDependencies": {
-    "react": "~18.2.0"
-  },
   "dependencies": {
-    "@nighttrax/foo": "*"
+    "@medici/foo": "workspace:~1.0.0"
   },
   "devDependencies": {
-    "@types/react": "~18.0.15",
-    "react": "~18.2.0",
-    "react-dom": "~18.2.0",
-    "rimraf": "~3.0.2"
+    "rimraf": "~3.0.2",
+    "typescript": "~4.7.4"
   }
 }

+ 3 - 0
packages/core/src/index.ts

@@ -0,0 +1,3 @@
+import { meaningOfLife } from "@medici/foo";
+// eslint-disable-next-line no-console
+console.log(meaningOfLife);

+ 3 - 0
packages/core/src/xhr.ts

@@ -0,0 +1,3 @@
+import { meaningOfLife } from "@medici/foo";
+// eslint-disable-next-line no-console
+console.log(meaningOfLife);

+ 1 - 3
packages/components/tsconfig.build.json

@@ -2,9 +2,7 @@
   "extends": "../../tsconfig.build.json",
 
   "compilerOptions": {
-    "outDir": "./dist",
-    "jsx": "react",
-    "esModuleInterop": true
+    "outDir": "./dist"
   },
 
   "include": [

+ 3 - 0
packages/core/tsconfig.json

@@ -0,0 +1,3 @@
+{
+  "extends": "../../tsconfig.json"
+}

文件差異過大導致無法顯示
+ 1143 - 17433
pnpm-lock.yaml