Add heuristics for delayed notifications.

This commit is contained in:
Clark
2023-07-28 13:11:46 -04:00
committed by Greyson Parrelli
parent c012ead143
commit 66792f2d56
8 changed files with 189 additions and 14 deletions

View File

@@ -87,14 +87,15 @@ object LocalMetrics {
*
* If an event with the provided ID does not exist, this is effectively a no-op.
*/
fun splitWithDuration(id: String, split: String, duration: Long) {
val time = System.currentTimeMillis()
@JvmOverloads
fun splitWithDuration(id: String, split: String, duration: Long, timeunit: TimeUnit = TimeUnit.MILLISECONDS) {
val time = SystemClock.elapsedRealtimeNanos()
executor.execute {
val lastTime: Long? = lastSplitTimeById[id]
val splitDoesNotExist: Boolean = eventsById[id]?.splits?.none { it.name == split } ?: true
if (lastTime != null && splitDoesNotExist) {
eventsById[id]?.splits?.add(LocalMetricsSplit(split, duration))
eventsById[id]?.splits?.add(LocalMetricsSplit(split, TimeUnit.NANOSECONDS.convert(duration, timeunit)))
lastSplitTimeById[id] = time
}
}

View File

@@ -203,9 +203,51 @@ public final class SignalLocalMetrics {
}
}
public static final class MessageLatency {
public static final String NAME = "message-latency";
private static final String SPLIT_LATENCY = "latency";
public static void onMessageReceived(long serverReceiveTimestamp, long serverDeliverTimestamp) {
long latency = serverDeliverTimestamp - serverReceiveTimestamp;
String id = NAME + System.currentTimeMillis();
LocalMetrics.getInstance().start(id, NAME);
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_LATENCY, latency);
LocalMetrics.getInstance().end(id);
}
}
public static final class FcmServiceStartFailure {
public static final String NAME = "fcm-service-start-failure";
private static final String SPLIT_EVENT = "event";
public static void onFcmFailedToStart() {
String id = NAME + System.currentTimeMillis();
LocalMetrics.getInstance().start(id, NAME);
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_EVENT, 1);
LocalMetrics.getInstance().end(id);
}
}
public static final class FcmServiceStartSuccess {
public static final String NAME = "fcm-service-start-success";
private static final String SPLIT_EVENT = "event";
public static void onFcmStarted() {
String id = NAME + System.currentTimeMillis();
LocalMetrics.getInstance().start(id, NAME);
LocalMetrics.getInstance().splitWithDuration(id, SPLIT_EVENT, 1);
LocalMetrics.getInstance().end(id);
}
}
public static final class PushWebsocketFetch {
private static final String SUCCESS_EVENT = "push-websocket-fetch";
private static final String TIMEOUT_EVENT = "timed-out-fetch";
public static final String SUCCESS_EVENT = "push-websocket-fetch";
public static final String TIMEOUT_EVENT = "timed-out-fetch";
private static final String SPLIT_BATCH_PROCESSED = "batches-processed";
private static final String SPLIT_PROCESS_TIME = "fetch-time";