11package com .sensorsdata .analytics .javasdk ;
22
3- import static com .sensorsdata .analytics .javasdk .SensorsConst .APP_VERSION_SYSTEM_ATTR ;
4- import static com .sensorsdata .analytics .javasdk .SensorsConst .BIND_ID_ACTION_TYPE ;
5- import static com .sensorsdata .analytics .javasdk .SensorsConst .LIB ;
6- import static com .sensorsdata .analytics .javasdk .SensorsConst .LIB_SYSTEM_ATTR ;
7- import static com .sensorsdata .analytics .javasdk .SensorsConst .LIB_VERSION_SYSTEM_ATTR ;
8- import static com .sensorsdata .analytics .javasdk .SensorsConst .LOGIN_SYSTEM_ATTR ;
9- import static com .sensorsdata .analytics .javasdk .SensorsConst .PROJECT_SYSTEM_ATTR ;
10- import static com .sensorsdata .analytics .javasdk .SensorsConst .SDK_VERSION ;
11- import static com .sensorsdata .analytics .javasdk .SensorsConst .TIME_SYSTEM_ATTR ;
12- import static com .sensorsdata .analytics .javasdk .SensorsConst .TOKEN_SYSTEM_ATTR ;
133import static com .sensorsdata .analytics .javasdk .SensorsConst .TRACK_ACTION_TYPE ;
144import static com .sensorsdata .analytics .javasdk .SensorsConst .TRACK_SIGN_UP_ACTION_TYPE ;
15- import static com .sensorsdata .analytics .javasdk .SensorsConst .UNBIND_ID_ACTION_TYPE ;
165
17- import com .sensorsdata .analytics .javasdk .bean .SensorsAnalyticsIdentity ;
186import com .sensorsdata .analytics .javasdk .consumer .Consumer ;
19- import com .sensorsdata .analytics .javasdk .util .SensorsAnalyticsUtil ;
207
218import lombok .NonNull ;
229import lombok .extern .slf4j .Slf4j ;
2310
24- import java .util .Date ;
25- import java .util .HashMap ;
2611import java .util .Map ;
27- import java .util .concurrent .ConcurrentHashMap ;
2812
2913@ Slf4j
3014class SensorsAnalyticsWorker {
3115
3216 private final Consumer consumer ;
3317
34- private final Map <String , Object > superProperties = new ConcurrentHashMap <>();
35-
36- private boolean enableTimeFree = false ;
18+ private boolean timeFree = false ;
3719
3820 public SensorsAnalyticsWorker (Consumer consumer ) {
3921 this .consumer = consumer ;
40- clearSuperProperties ();
4122 Runtime .getRuntime ().addShutdownHook (new Thread (new Runnable () {
4223 @ Override
4324 public void run () {
@@ -47,51 +28,13 @@ public void run() {
4728 }));
4829 }
4930
50- void setEnableTimeFree (boolean enableTimeFree ) {
51- log .info ("Call setEnableTimeFree method with param:{}" , enableTimeFree );
52- this .enableTimeFree = enableTimeFree ;
53- }
54-
55- void setSuperProperties (Map <String , Object > superProperties ) {
56- this .superProperties .putAll (superProperties );
57- }
58-
59- void clearSuperProperties () {
60- this .superProperties .clear ();
61- this .superProperties .put (LIB_SYSTEM_ATTR , LIB );
62- this .superProperties .put (LIB_VERSION_SYSTEM_ATTR , SDK_VERSION );
63- log .info ("Call clearSuperProperties method." );
64- }
65-
66- void doAddEvent (String distinctId , boolean isLoginId , String originDistinctId , String actionType , String eventName ,
67- Map <String , Object > properties ) {
68- this .consumer .send (
69- generateEventMap (distinctId , isLoginId , originDistinctId , null , actionType , eventName , properties ));
70- }
71-
72-
73-
7431 void doAddData (@ NonNull SensorsData sensorsData ) {
75- //enable history data import
76- if (enableTimeFree ) {
77- sensorsData .getProperties ().put ("time_free" , true );
78- }
79- //check properties
80- final Map <String , Object > properties = sensorsData .getProperties ();
81- //check common properties contains $app_version
82- if (this .superProperties .containsKey (APP_VERSION_SYSTEM_ATTR )) {
83- sensorsData .getLib ().put (APP_VERSION_SYSTEM_ATTR , (String ) this .superProperties .get (APP_VERSION_SYSTEM_ATTR ));
84- }
85- // 只有 track 和 track_signup 事件才需要设置公共属性
86- if (sensorsData .getType ().startsWith (TRACK_ACTION_TYPE )) {
87- for (Map .Entry <String , Object > entry : superProperties .entrySet ()) {
88- if (!properties .containsKey (entry .getKey ())) {
89- properties .put (entry .getKey (), entry .getValue ());
90- }
91- }
32+ Map <String , Object > data = SensorsData .generateData (sensorsData );
33+ if (timeFree && (TRACK_ACTION_TYPE .equals (sensorsData .getType ()))
34+ || TRACK_SIGN_UP_ACTION_TYPE .equals (sensorsData .getType ())) {
35+ data .put ("time_free" , true );
9236 }
93- //event or profile
94- this .consumer .send (SensorsData .generateData (sensorsData ));
37+ this .consumer .send (data );
9538 }
9639
9740 void flush () {
@@ -102,104 +45,17 @@ void shutdown() {
10245 this .consumer .close ();
10346 }
10447
105- /**
106- * 非 IDM 模式下 identity 一定为 null
107- *
108- * @param distinctId 登录 ID
109- * @param isLoginId 是否登录ID
110- * @param originDistinctId 匿名ID
111- * @param identity ID-Mapping 身份标识
112- * @param actionType 行为类型
113- * @param eventName 事件名
114- * @param properties 属性
115- * @return Map<String, Object>
116- */
117- private Map <String , Object > generateEventMap (String distinctId , Boolean isLoginId , String originDistinctId ,
118- Map <String , String > identity , String actionType , String eventName , Map <String , Object > properties ) {
119- Map <String , Object > eventMap = new HashMap <>();
120- eventMap .put ("_track_id" , SensorsAnalyticsUtil .getTrackId (properties , distinctId ));
121- eventMap .put ("type" , actionType );
122- eventMap .put ("lib" , getLibProperties ());
123- //开启历史数据导入
124- if (enableTimeFree ) {
125- eventMap .put ("time_free" , true );
126- }
127- HashMap <String , Object > eventProperties = new HashMap <>();
128- //普通模式
129- if (identity == null ) {
130- eventMap .put ("distinct_id" , distinctId );
131- if (isLoginId ) {
132- eventProperties .put (LOGIN_SYSTEM_ATTR , true );
133- }
134- } else {// id-mapping 模式
135- eventMap .put ("identities" , identity );
136- if (distinctId != null ) {
137- eventMap .put ("distinct_id" , distinctId );
138- eventProperties .put (LOGIN_SYSTEM_ATTR , false );
139- } else {
140- if (identity .containsKey (SensorsAnalyticsIdentity .LOGIN_ID )) {
141- eventProperties .put (LOGIN_SYSTEM_ATTR , true );
142- eventMap .put ("distinct_id" , identity .get (SensorsAnalyticsIdentity .LOGIN_ID ));
143- } else {
144- eventProperties .put (LOGIN_SYSTEM_ATTR , false );
145- String firstKey = identity .keySet ().iterator ().next ();
146- eventMap .put ("distinct_id" , String .format ("%s+%s" , firstKey , identity .get (firstKey )));
147- }
148- }
149- }
150- //检查自定义属性
151- if (properties != null && !properties .isEmpty ()) {
152- for (Map .Entry <String , Object > entry : properties .entrySet ()) {
153- switch (entry .getKey ()) {
154- case TIME_SYSTEM_ATTR :
155- eventMap .put ("time" , ((Date ) entry .getValue ()).getTime ());
156- break ;
157- case PROJECT_SYSTEM_ATTR :
158- eventMap .put ("project" , entry .getValue ());
159- break ;
160- case TOKEN_SYSTEM_ATTR :
161- eventMap .put ("token" , entry .getValue ());
162- break ;
163- default :
164- eventProperties .put (entry .getKey (), entry .getValue ());
165- break ;
166- }
167- }
168- }
169- //操作类型
170- if (actionType != null ) {
171- switch (actionType ) {
172- case TRACK_SIGN_UP_ACTION_TYPE :
173- eventMap .put ("original_id" , originDistinctId );
174- case TRACK_ACTION_TYPE :
175- case BIND_ID_ACTION_TYPE :
176- case UNBIND_ID_ACTION_TYPE :
177- eventMap .put ("event" , eventName );
178- eventProperties .putAll (superProperties );
179- break ;
180- }
181- }
182- //最终校验是否有 time 属性
183- if (!eventMap .containsKey ("time" )) {
184- eventMap .put ("time" , System .currentTimeMillis ());
185- }
186- eventMap .put ("properties" , eventProperties );
187- return eventMap ;
188- }
18948
190- private Map <String , String > getLibProperties () {
191- Map <String , String > libInfo = SensorsAnalyticsUtil .generateLibInfo ();
192- if (this .superProperties .containsKey (APP_VERSION_SYSTEM_ATTR )) {
193- libInfo .put (APP_VERSION_SYSTEM_ATTR , (String ) this .superProperties .get (APP_VERSION_SYSTEM_ATTR ));
49+ public void doSchemaData (@ NonNull SensorsSchemaData schemaData ) {
50+ Map <String , Object > sensorsData = schemaData .generateData ();
51+ if (timeFree && (TRACK_ACTION_TYPE .equals (schemaData .getType ()))
52+ || TRACK_SIGN_UP_ACTION_TYPE .equals (schemaData .getType ())) {
53+ sensorsData .put ("time_free" , true );
19454 }
195- return libInfo ;
55+ this . consumer . send ( sensorsData ) ;
19656 }
19757
198- public void doSchemaData (@ NonNull SensorsSchemaData schemaData ) {
199- // 开启历史数据导入,兼容之前接口逻辑
200- if (enableTimeFree && schemaData .isEventSchemaData ()) {
201- schemaData .getProperties ().put ("time_free" , true );
202- }
203- this .consumer .send (schemaData .generateData ());
58+ public void setEnableTimeFree (boolean enableTimeFree ) {
59+ this .timeFree = enableTimeFree ;
20460 }
20561}
0 commit comments