2121import java .util .LinkedList ;
2222import java .util .List ;
2323import java .util .Map ;
24+ import java .util .UUID ;
2425import java .util .concurrent .BlockingQueue ;
2526import java .util .concurrent .ExecutorService ;
2627import java .util .concurrent .Executors ;
@@ -40,13 +41,15 @@ public class AnalyticsClient {
4041 private static final int MSG_MAX_SIZE = 1024 * 32 ;
4142 private static final Charset ENCODING = StandardCharsets .UTF_8 ;
4243 private static Gson gsonInstance ;
44+ private static final String instanceId = UUID .randomUUID ().toString ();
4345
4446 static {
4547 Map <String , String > library = new LinkedHashMap <>();
4648 library .put ("name" , "analytics-java" );
4749 library .put ("version" , AnalyticsVersion .get ());
4850 Map <String , Object > context = new LinkedHashMap <>();
4951 context .put ("library" , Collections .unmodifiableMap (library ));
52+ context .put ("instanceId" , instanceId );
5053 CONTEXT = Collections .unmodifiableMap (context );
5154 }
5255
@@ -63,6 +66,7 @@ public class AnalyticsClient {
6366 private final ExecutorService looperExecutor ;
6467 private final ScheduledExecutorService flushScheduler ;
6568 private final AtomicBoolean isShutDown ;
69+ private final String writeKey ;
6670
6771 public static AnalyticsClient create (
6872 HttpUrl uploadUrl ,
@@ -75,7 +79,8 @@ public static AnalyticsClient create(
7579 Log log ,
7680 ThreadFactory threadFactory ,
7781 ExecutorService networkExecutor ,
78- List <Callback > callbacks ) {
82+ List <Callback > callbacks ,
83+ String writeKey ) {
7984 return new AnalyticsClient (
8085 new LinkedBlockingQueue <Message >(queueCapacity ),
8186 uploadUrl ,
@@ -88,7 +93,8 @@ public static AnalyticsClient create(
8893 threadFactory ,
8994 networkExecutor ,
9095 callbacks ,
91- new AtomicBoolean (false ));
96+ new AtomicBoolean (false ),
97+ writeKey );
9298 }
9399
94100 public AnalyticsClient (
@@ -103,7 +109,8 @@ public AnalyticsClient(
103109 ThreadFactory threadFactory ,
104110 ExecutorService networkExecutor ,
105111 List <Callback > callbacks ,
106- AtomicBoolean isShutDown ) {
112+ AtomicBoolean isShutDown ,
113+ String writeKey ) {
107114 this .messageQueue = messageQueue ;
108115 this .uploadUrl = uploadUrl ;
109116 this .service = service ;
@@ -115,6 +122,7 @@ public AnalyticsClient(
115122 this .looperExecutor = Executors .newSingleThreadExecutor (threadFactory );
116123 this .networkExecutor = networkExecutor ;
117124 this .isShutDown = isShutDown ;
125+ this .writeKey = writeKey ;
118126
119127 this .currentQueueSizeInBytes = 0 ;
120128
@@ -296,7 +304,7 @@ public void run() {
296304 Boolean isOverflow = messages .size () >= size ;
297305
298306 if (!messages .isEmpty () && (isOverflow || isBlockingSignal || batchSizeLimitReached )) {
299- Batch batch = Batch .create (CONTEXT , new ArrayList <>(messages ));
307+ Batch batch = Batch .create (CONTEXT , new ArrayList <>(messages ), writeKey );
300308 log .print (
301309 VERBOSE ,
302310 "Batching %s message(s) into batch %s." ,
0 commit comments