gemercheung пре 3 година
родитељ
комит
747fb7ddb4

+ 96 - 50
packages/core/src/basicTrack.ts

@@ -1,4 +1,4 @@
-import { IBaseAction, ICustomAction, TrackActionOption } from '@medici/types';
+import { IBaseAction, ICustomAction, TrackActionOption, TrackEntityType } from '@medici/types';
 import type { SDKInitConfig, PlatformType, SDKConfigType } from './sdk';
 import type { IHistory } from './history';
 import { collect } from './collector';
@@ -12,7 +12,6 @@ export class BaseTrack implements IBaseAction, ICustomAction {
     protected _config: SDKInitConfig;
     protected _history: IHistory;
     protected _endPoint: string;
-    protected _trackEndPoint: string;
     protected _appId: string;
     private _timeOut: ReturnType<typeof setTimeout>;
 
@@ -21,24 +20,59 @@ export class BaseTrack implements IBaseAction, ICustomAction {
         this._platform = params.platform;
         this._appId = params.appId;
         this._endPoint = params.endPoint;
-        this._trackEndPoint = params.trackEndPoint;
     }
     get _stopTrack() {
         return SDK._stopTrack;
     }
 
+    get trackUrl() {
+        return this._endPoint + '/tracking/log/save';
+    }
+
+    get trackPageViewUrl() {
+        return this._endPoint + '/tracking/log/save';
+    }
+
+    private toTrackEntity(params: TrackEntityType): TrackEntityType {
+        const entity = {
+            appId: this._appId,
+            module: params.module,
+            url: params.url || this._history.playload.url,
+            eventType: params.eventType,
+            referrer: params.referrer || this._history.currentRef,
+            requestData: params.requestData,
+        };
+        if (params.language) {
+            entity['language'] = params.language;
+        }
+        if (params.networkType) {
+            entity['networkType'] = params.networkType;
+        }
+        if (params.userId) {
+            entity['userId'] = params.userId;
+        }
+        return entity;
+    }
+
     public trackView(url: string, referrer: string, uuid: string): Promise<XMLHttpRequestResponseType> {
         console.log('BaseTrack-trackView', url, referrer, uuid);
         if (!this._stopTrack) {
             this._history.playload.url = url;
             const historyPlayload = cloneDeep(this._history.playload);
-            const payload = Object.assign(historyPlayload, {
-                ...this._config,
-                referrer: this._history.currentRef,
+            // const payload = Object.assign(historyPlayload, {
+            //     ...this._config,
+            //     referrer: this._history.currentRef,
+            //     url: url,
+            // });
+            const payload: TrackEntityType = {
+                module: 'pageview',
                 url: url,
-            });
+                eventType: 'pageview',
+                language: historyPlayload.language,
+                userId: this._config.user,
+            };
             console.log('send-playload', payload);
-            return collect(this._endPoint, 'pageview', payload);
+            return collect(this.trackPageViewUrl, 'pageview', this.toTrackEntity(payload));
         }
     }
 
@@ -47,61 +81,67 @@ export class BaseTrack implements IBaseAction, ICustomAction {
             console.log('BaseTrack-TrackEvent', event_name, event_data, url, uuid);
             this._history.playload.url = url;
             const historyPlayload = cloneDeep(this._history.playload);
-            const payload = Object.assign(historyPlayload, {
-                referrer: this._history.currentRef,
-                event_name: event_name,
-                url: url,
-                event_data: event_data,
-                ...this._config,
-            });
-            console.log('send-playload', payload);
-            return collect(this._endPoint, 'event', payload);
-        }
-    }
+            // const payload = Object.assign(historyPlayload, {
+            //     referrer: this._history.currentRef,
+            //     event_name: event_name,
+            //     url: url,
+            //     event_data: event_data,
+            //     ...this._config,
+            // });
 
-    public sendEvent(value: string, type: string, url?: string, uuid?: string): Promise<XMLHttpRequestResponseType> {
-        if (!this._stopTrack) {
-            console.log('BaseTrack-sendEvent', value, type, url, uuid);
-            const payload = Object.assign(this._history.playload, {
-                referrer: this._history.currentRef,
+            const payload: TrackEntityType = {
+                module: event_name,
                 url: url,
-                event_name: type,
-                event_data: value,
-                ...this._config,
-            });
-            return collect(this._endPoint, 'event', payload);
+                eventType: event_data,
+                language: historyPlayload.language,
+                userId: this._config.user,
+            };
+            console.log('send-playload', payload);
+            return collect(this.trackPageViewUrl, 'event', this.toTrackEntity(payload));
         }
     }
 
     public track(trackActionName: string, trackActionOption?: TrackActionOption): Promise<XMLHttpRequestResponseType> {
         if (!this._stopTrack) {
             const historyPlayload = cloneDeep(this._history.playload);
-            const payload = Object.assign(historyPlayload, {
-                referrer: this._history.currentRef,
-                ...trackActionOption,
-                trackActionName,
-                ...this._config,
-            });
-            return collect(this._trackEndPoint, 'track', payload);
+            const trackObj = cloneDeep(trackActionOption);
+            delete trackObj.eventType;
+            delete trackObj.maxWaitTime;
+
+            const payload: TrackEntityType = {
+                module: trackActionName,
+                eventType: trackActionOption.eventType,
+                requestData: Object.assign({ screen: historyPlayload.screen }, trackObj, this._config),
+                language: historyPlayload.language,
+                networkType: trackActionOption.networkType,
+                userId: this._config.user,
+            };
+            // this.toTrackEntity(payload);
+            return collect(this.trackUrl, 'track', this.toTrackEntity(payload));
         }
     }
 
     public startTrack(trackActionName: string, trackActionOption?: TrackActionOption): Promise<XMLHttpRequestResponseType> {
         if (!this._stopTrack) {
             const historyPlayload = cloneDeep(this._history.playload);
-            const payload = Object.assign(historyPlayload, {
-                referrer: this._history.currentRef,
-                ...trackActionOption,
-                trackActionName,
-                ...this._config,
-            });
+            const trackObj = cloneDeep(trackActionOption);
+            delete trackObj.eventType;
+            delete trackObj.maxWaitTime;
 
+            const payload: TrackEntityType = {
+                module: trackActionName,
+                eventType: trackActionOption.eventType,
+                requestData: Object.assign({}, trackObj, this._config),
+                language: historyPlayload.language,
+                networkType: trackActionOption.networkType,
+                userId: this._config.user,
+            };
             if (trackActionOption.maxWaitTime) {
                 this._timeOut = setTimeout(() => {
                     this.endTrack(trackActionName, trackActionOption);
                 }, trackActionOption.maxWaitTime);
             }
-            return collect(this._trackEndPoint, 'startTrack', payload);
+            return collect(this.trackUrl, 'startTrack', this.toTrackEntity(payload));
         }
     }
 
@@ -109,13 +149,19 @@ export class BaseTrack implements IBaseAction, ICustomAction {
         clearTimeout(this._timeOut);
         if (!this._stopTrack) {
             const historyPlayload = cloneDeep(this._history.playload);
-            const payload = Object.assign(historyPlayload, {
-                referrer: this._history.currentRef,
-                ...trackActionOption,
-                trackActionName,
-                ...this._config,
-            });
-            return collect(this._trackEndPoint, 'endTrack', payload);
+            const trackObj = cloneDeep(trackActionOption);
+            delete trackObj.eventType;
+            delete trackObj.maxWaitTime;
+
+            const payload: TrackEntityType = {
+                module: trackActionName,
+                eventType: trackActionOption.eventType,
+                requestData: Object.assign({}, trackObj, this._config),
+                language: historyPlayload.language,
+                networkType: trackActionOption.networkType,
+                userId: this._config.user,
+            };
+            return collect(this.trackUrl, 'endTrack', this.toTrackEntity(payload));
         }
     }
 }

+ 2 - 5
packages/core/src/event.ts

@@ -42,12 +42,9 @@ export class Eventer {
                 : (this.listeners[className] = () => {
                       console.log('trackEvent', event, name);
                       if (element.tagName === 'A') {
-                          // sendEvent(value, type);
-                          this._sdk.trackEvent(name, '');
+                          this._sdk.trackEvent(name, event);
                       } else {
-                          console.log('trackEvent', name, '');
-                          // trackEvent(value, type);
-                          this._sdk.trackEvent(name, '');
+                          this._sdk.trackEvent(name, event);
                       }
                   });
             // console.log('listener', listener);

+ 1 - 1
packages/core/src/sdk.ts

@@ -16,7 +16,7 @@ export interface SDKConfigType {
     platform?: PlatformType;
     autoTrack?: boolean;
     config?: SDKInitConfig;
-    trackEndPoint?: string;
+    // trackEndPoint?: string;
     stopTrack?: false;
 }
 export class SDK extends BaseTrack {

+ 1 - 1
packages/types/src/event.ts

@@ -17,7 +17,7 @@ export type EventReturnType = Promise<XMLHttpRequestResponseType>;
 export interface IBaseAction {
     trackView(url: string, referrer: string, uuid: string): EventReturnType;
     trackEvent(event_name: string, event_data: string, url?: string, uuid?: string): EventReturnType;
-    sendEvent(value: string, type: string, url?: string, uuid?: string): EventReturnType;
+    // sendEvent(value: string, type: string, url?: string, uuid?: string): EventReturnType;
 }
 
 export interface ICustomAction {

+ 14 - 0
packages/types/src/sdk.ts

@@ -10,3 +10,17 @@ export interface SDKconfigType {
     from?: string;
     appId: string;
 }
+
+export interface TrackEntityType {
+    module: string;
+    appId?: string;
+    url?: string;
+    referrer?: string;
+    eventType: string;
+    requestType?: string;
+    TrackingType?: string;
+    userId?: string;
+    language?: string;
+    networkType?: string;
+    requestData?: Record<string, object[]>;
+}

+ 1 - 2
play/src/App.vue

@@ -7,8 +7,7 @@ import * as Medici from '@medici/web';
 const medici = Medici.init({
     platform: 'web',
     appId: '7b5958d5-1ae6-4ad5-8a87-5fc8a4b92999',
-    endPoint: 'http://192.168.0.186:3000/api/collect', //服务器
-    trackEndPoint: 'http://192.168.0.186:3000/api/track',
+    endPoint: '/track_api', //服务器
     stopTrack: false,
     config: {
         user: 'testUser',

+ 24 - 26
play/src/components/custom.vue

@@ -4,9 +4,9 @@ import { ref } from 'vue';
 const t1 = `
 medici.track("BuyProduct", {
     eventType:"click",
-    ProductName: "MacBook Pro",
-    ProductPrice: 123.45,
-    IsAddedToFav: false,
+    productName: "MacBook Pro",
+    productPrice: 123.45,
+    isAddedToFav: false,
     ... // 其他自定业务字段
 });
 `;
@@ -14,9 +14,9 @@ const t2 = `
 medici.startTrack("BuyProduct", {
   eventType:"click",
   maxWaitTime: 30000, //可自定义,主要是下载等行为耗时。
-  ProductName: "MacBook Pro",
-  ProductPrice: 123.45,
-  IsAddedToFav: false,
+  productName: 'MacBook Pro',
+  productPrice: 123.45,
+  isAddedToFav: false,
   ... // 其他自定业务字段
 });
 `;
@@ -34,43 +34,41 @@ const test = ref({
 const oneTimeTrack = () => {
     (window as any).medici.track('BuyProduct', {
         eventType: 'click',
-        ProductName: 'MacBook Pro',
-        ProductPrice: 123.45,
-        IsAddedToFav: false,
+        productName: 'MacBook Pro',
+        productPrice: 123.45,
+        ssAddedToFav: false,
     });
 };
 const twoTimeStartTrack = () => {
     (window as any).medici.startTrack('BuyProduct', {
         eventType: 'click',
         maxWaitTime: 300000, //可自定义,主要是下载等行为耗时。
-        ProductName: 'MacBook Pro',
-        ProductPrice: 123.45,
-        IsAddedToFav: false,
+        productName: 'MacBook Pro',
+        productPrice: 123.45,
+        ssAddedToFav: false,
     });
 };
 const twoTimeEndTrack = () => {
-    (window as any).medici.startTrack('BuyProduct', {});
+    (window as any).medici.endTrack('BuyProduct', { backParams: 'test' });
 };
 </script>
 
 <template>
-<div class="custom">
-    <h1>custom自定义Track</h1>
-    1.一次消费埋点 <button @click="oneTimeTrack">点击触发</button>
-    <highlightjs language="js" :code="test.t1" />
-
-    2.二次消费埋点 <button @click="twoTimeStartTrack">start点击触发</button>
-    <highlightjs language="js" :code="test.t2" />
-    <button @click="twoTimeEndTrack">end点击触发</button>
-    <highlightjs language="js" :code="test.t3" />
-</div>
+    <div class="custom">
+        <h1>custom自定义Track</h1>
+        1.一次消费埋点 <button @click="oneTimeTrack">点击触发</button>
+        <highlightjs language="js" :code="test.t1" />
 
+        2.二次消费埋点 <button @click="twoTimeStartTrack">start点击触发</button>
+        <highlightjs language="js" :code="test.t2" />
+        <button @click="twoTimeEndTrack">end点击触发</button>
+        <highlightjs language="js" :code="test.t3" />
+    </div>
 </template>
 
 <style scoped>
-.custom{
-text-align: left;
-
+.custom {
+    text-align: left;
 }
 .read-the-docs {
     color: #888;

+ 10 - 0
play/vite.config.ts

@@ -4,4 +4,14 @@ import vue from '@vitejs/plugin-vue';
 // https://vitejs.dev/config/
 export default defineConfig({
     plugins: [vue()],
+    server: {
+        proxy: {
+            // with options
+            '/track_api': {
+                target: 'https://v4-test.4dkankan.com/',
+                changeOrigin: true,
+                rewrite: (path) => path.replace(/^\/track_api/, ''),
+            },
+        },
+    },
 });