Showing
7 changed files
with
45 additions
and
5 deletions
@@ -40,6 +40,7 @@ class _MyAppState extends State<MyApp> { | @@ -40,6 +40,7 @@ class _MyAppState extends State<MyApp> { | ||
40 | void initState() { | 40 | void initState() { |
41 | AutoTrack() | 41 | AutoTrack() |
42 | .config(AutoTrackConfig( // 其余配置可查看AutoTrackConfig类 | 42 | .config(AutoTrackConfig( // 其余配置可查看AutoTrackConfig类 |
43 | + samplingRate: 0.9, // 采样率 | ||
43 | host: 'http://localhost:3000/api/track', | 44 | host: 'http://localhost:3000/api/track', |
44 | eventHandler: (model) => { | 45 | eventHandler: (model) => { |
45 | // 事件触发会调用此方法,可自行处理 | 46 | // 事件触发会调用此方法,可自行处理 |
@@ -90,6 +91,20 @@ class _MyAppState extends State<MyApp> { | @@ -90,6 +91,20 @@ class _MyAppState extends State<MyApp> { | ||
90 | } | 91 | } |
91 | 92 | ||
92 | ``` | 93 | ``` |
94 | +##### 更新采样率 | ||
95 | +```dart | ||
96 | +AutoTrack().updateSampleRate(0.5); | ||
97 | +``` | ||
98 | +##### 登录后更新用户id | ||
99 | +```dart | ||
100 | +AutoTrack().updateUserId('userId'); | ||
101 | +``` | ||
102 | +##### 采样错误信息 | ||
103 | +```dart | ||
104 | +FlutterError.onError = (details) { | ||
105 | + Track.instance.reportError(details, details.stack!); | ||
106 | +}; | ||
107 | +``` | ||
93 | 108 | ||
94 | #### 具体使用 | 109 | #### 具体使用 |
95 | ```dart | 110 | ```dart |
@@ -19,9 +19,8 @@ class _MyAppState extends State<MyApp> { | @@ -19,9 +19,8 @@ class _MyAppState extends State<MyApp> { | ||
19 | void initState() { | 19 | void initState() { |
20 | AutoTrack() | 20 | AutoTrack() |
21 | .config(AutoTrackConfig( | 21 | .config(AutoTrackConfig( |
22 | - eventHandler: (model) => { | ||
23 | - print('event handler ${model.type}') | ||
24 | - }, | 22 | + samplingRate: 0.9, // 采样率 |
23 | + eventHandler: (model) => {print('event handler ${model.type}')}, | ||
25 | pageConfigs: [ | 24 | pageConfigs: [ |
26 | AutoTrackPageConfig<PageA>( | 25 | AutoTrackPageConfig<PageA>( |
27 | pageID: 'page_a', | 26 | pageID: 'page_a', |
@@ -34,8 +33,15 @@ class _MyAppState extends State<MyApp> { | @@ -34,8 +33,15 @@ class _MyAppState extends State<MyApp> { | ||
34 | .enableDrag() | 33 | .enableDrag() |
35 | .enableIgnoreNullKey() | 34 | .enableIgnoreNullKey() |
36 | .enableLog(); | 35 | .enableLog(); |
37 | - | ||
38 | super.initState(); | 36 | super.initState(); |
37 | + | ||
38 | + // AutoTrack().updateSampleRate(0.5); 更新采样率 | ||
39 | + // AutoTrack().updateUserId('xxxxxx'); 用户登录后设置用户id | ||
40 | + // | ||
41 | + // 采样错误信息 | ||
42 | + // FlutterError.onError = (details) { | ||
43 | + // Track.instance.reportError(details, details.stack!); | ||
44 | + // }; | ||
39 | } | 45 | } |
40 | 46 | ||
41 | @override | 47 | @override |
@@ -11,6 +11,7 @@ class AutoTrackConfig { | @@ -11,6 +11,7 @@ class AutoTrackConfig { | ||
11 | AutoTrackConfig({ | 11 | AutoTrackConfig({ |
12 | this.host, // 数据上报地址 | 12 | this.host, // 数据上报地址 |
13 | this.uploadInterval, // 数据上报间隔 | 13 | this.uploadInterval, // 数据上报间隔 |
14 | + this.samplingRate = 1, // 采样率 | ||
14 | this.appKey = '', // 数据上报时根据key和secret生成签名 | 15 | this.appKey = '', // 数据上报时根据key和secret生成签名 |
15 | this.appSecret = '', | 16 | this.appSecret = '', |
16 | this.signature, // 签名生成方法,默认使用sha256对key、时间戳和secret进行签名 | 17 | this.signature, // 签名生成方法,默认使用sha256对key、时间戳和secret进行签名 |
@@ -40,6 +41,9 @@ class AutoTrackConfig { | @@ -40,6 +41,9 @@ class AutoTrackConfig { | ||
40 | String? userId; | 41 | String? userId; |
41 | String? uniqueId; | 42 | String? uniqueId; |
42 | 43 | ||
44 | + /// 采样率,默认 1 (100%) | ||
45 | + double samplingRate; | ||
46 | + | ||
43 | int? uploadInterval; | 47 | int? uploadInterval; |
44 | 48 | ||
45 | Function? signature; | 49 | Function? signature; |
@@ -62,6 +62,10 @@ class AutoTrackConfigManager { | @@ -62,6 +62,10 @@ class AutoTrackConfigManager { | ||
62 | _config.userId = userId; | 62 | _config.userId = userId; |
63 | } | 63 | } |
64 | 64 | ||
65 | + void updateSampleRate(double rate) { | ||
66 | + _config.samplingRate = rate; | ||
67 | + } | ||
68 | + | ||
65 | void updatePageConfigs(List<AutoTrackPageConfig> pageConfigs) { | 69 | void updatePageConfigs(List<AutoTrackPageConfig> pageConfigs) { |
66 | _config.pageConfigs = pageConfigs; | 70 | _config.pageConfigs = pageConfigs; |
67 | } | 71 | } |
1 | import 'dart:async'; | 1 | import 'dart:async'; |
2 | +import 'dart:math'; | ||
2 | 3 | ||
3 | import 'package:auto_track/auto_track/config/manager.dart'; | 4 | import 'package:auto_track/auto_track/config/manager.dart'; |
4 | import 'package:auto_track/auto_track/utils/track_model.dart'; | 5 | import 'package:auto_track/auto_track/utils/track_model.dart'; |
@@ -39,6 +40,12 @@ class AutoTrackQueue { | @@ -39,6 +40,12 @@ class AutoTrackQueue { | ||
39 | _queue.clear(); | 40 | _queue.clear(); |
40 | final config = AutoTrackConfigManager.instance.config; | 41 | final config = AutoTrackConfigManager.instance.config; |
41 | final host = config.host; | 42 | final host = config.host; |
43 | + if (config.samplingRate != 1) { | ||
44 | + if (Random().nextDouble() > config.samplingRate) { | ||
45 | + // 不在采样范围不上传 | ||
46 | + return; | ||
47 | + } | ||
48 | + } | ||
42 | if (host != null) { | 49 | if (host != null) { |
43 | final t = DateTime.now().millisecondsSinceEpoch; | 50 | final t = DateTime.now().millisecondsSinceEpoch; |
44 | dio.post(host, data: { | 51 | dio.post(host, data: { |
@@ -19,6 +19,10 @@ class AutoTrack { | @@ -19,6 +19,10 @@ class AutoTrack { | ||
19 | AutoTrackConfigManager.instance.updateUserId(id); | 19 | AutoTrackConfigManager.instance.updateUserId(id); |
20 | } | 20 | } |
21 | 21 | ||
22 | + void updateSampleRate(double rate) { | ||
23 | + AutoTrackConfigManager.instance.updateSampleRate(rate); | ||
24 | + } | ||
25 | + | ||
22 | AutoTrack config(AutoTrackConfig? config) { | 26 | AutoTrack config(AutoTrackConfig? config) { |
23 | if (config != null) { | 27 | if (config != null) { |
24 | AutoTrackConfigManager.instance.updateConfig(config); | 28 | AutoTrackConfigManager.instance.updateConfig(config); |
-
Please register or login to post a comment