Skip to content

Commit 2477b26

Browse files
committed
log events in millisecond precision and only debounce cart events
1 parent aabe97d commit 2477b26

File tree

1 file changed

+40
-33
lines changed

1 file changed

+40
-33
lines changed

core/src/main/java/io/snabble/sdk/Events.java

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class Events {
3939
public Events(Project project) {
4040
this.project = project;
4141

42-
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
42+
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
4343
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
4444

4545
project.getShoppingCart().addListener(new ShoppingCart.SimpleShoppingCartListener() {
@@ -48,10 +48,10 @@ public void onChanged(ShoppingCart list) {
4848
if (cartId != null && !list.getId().equals(cartId)) {
4949
PayloadSessionEnd payloadSessionEnd = new PayloadSessionEnd();
5050
payloadSessionEnd.session = cartId;
51-
post(payloadSessionEnd);
51+
post(payloadSessionEnd, false);
5252
}
5353

54-
post(getPayloadCart());
54+
post(getPayloadCart(), true);
5555
}
5656
});
5757

@@ -79,12 +79,12 @@ public void updateShop(Shop newShop) {
7979

8080
PayloadSessionStart payloadSessionStart = new PayloadSessionStart();
8181
payloadSessionStart.session = cartId;
82-
post(payloadSessionStart);
83-
post(getPayloadCart());
82+
post(payloadSessionStart, false);
83+
post(getPayloadCart(), true);
8484
} else {
8585
PayloadSessionEnd payloadSessionEnd = new PayloadSessionEnd();
8686
payloadSessionEnd.session = cartId;
87-
post(payloadSessionEnd);
87+
post(payloadSessionEnd, false);
8888

8989
shop = null;
9090
}
@@ -95,10 +95,10 @@ public void logError(String format, Object... args) {
9595
error.message = String.format(format, args);
9696
error.session = cartId;
9797

98-
post(error);
98+
post(error, false);
9999
}
100100

101-
private <T extends Payload> void post(final T payload) {
101+
private <T extends Payload> void post(final T payload, boolean debounce) {
102102
if (!isResumed) {
103103
Logger.d("Could not send event, app is not active: " + payload.getEventType());
104104
return;
@@ -130,37 +130,44 @@ private <T extends Payload> void post(final T payload) {
130130
.post(requestBody)
131131
.build();
132132

133-
handler.removeCallbacksAndMessages(event.type);
134-
handler.postAtTime(new Runnable() {
135-
@Override
136-
public void run() {
137-
OkHttpClient okHttpClient = project.getOkHttpClient();
138-
okHttpClient.newCall(request).enqueue(new Callback() {
139-
@Override
140-
public void onResponse(Call call, Response response) {
141-
if (response.isSuccessful()) {
142-
Logger.d("Successfully posted event: " + payload.getEventType());
143-
} else {
144-
Logger.e("Failed to post event: " + payload.getEventType() + ", code " + response.code());
145-
}
146-
147-
response.close();
148-
}
149-
150-
@Override
151-
public void onFailure(Call call, IOException e) {
152-
Logger.e("Could not post event: " + e.toString());
153-
}
154-
});
155-
156-
}
157-
}, event.type, SystemClock.uptimeMillis() + 2000);
133+
if (debounce) {
134+
handler.removeCallbacksAndMessages(event.type);
135+
handler.postAtTime(new Runnable() {
136+
@Override
137+
public void run() {
138+
send(request, payload);
139+
}
140+
}, event.type, SystemClock.uptimeMillis() + 2000);
141+
} else {
142+
send(request, payload);
143+
}
158144

159145
if (event.type == EventType.SESSION_START) {
160146
hasSentSessionStart = true;
161147
}
162148
}
163149

150+
private <T extends Payload> void send(Request request, final T payload) {
151+
OkHttpClient okHttpClient = project.getOkHttpClient();
152+
okHttpClient.newCall(request).enqueue(new Callback() {
153+
@Override
154+
public void onResponse(Call call, Response response) {
155+
if (response.isSuccessful()) {
156+
Logger.d("Successfully posted event: " + payload.getEventType());
157+
} else {
158+
Logger.e("Failed to post event: " + payload.getEventType() + ", code " + response.code());
159+
}
160+
161+
response.close();
162+
}
163+
164+
@Override
165+
public void onFailure(Call call, IOException e) {
166+
Logger.e("Could not post event: " + e.toString());
167+
}
168+
});
169+
}
170+
164171
private PayloadCart getPayloadCart() {
165172
ShoppingCart shoppingCart = project.getShoppingCart();
166173

0 commit comments

Comments
 (0)