diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index eecce47f87..8895e4db9b 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -2955,6 +2955,7 @@ public final class io/sentry/SentryEnvelopeItem { public fun getEvent (Lio/sentry/ISerializer;)Lio/sentry/SentryEvent; public fun getHeader ()Lio/sentry/SentryEnvelopeItemHeader; public fun getLogs (Lio/sentry/ISerializer;)Lio/sentry/SentryLogEvents; + public fun getMetrics (Lio/sentry/ISerializer;)Lio/sentry/SentryMetricsEvents; public fun getTransaction (Lio/sentry/ISerializer;)Lio/sentry/protocol/SentryTransaction; } diff --git a/sentry/src/main/java/io/sentry/JsonSerializer.java b/sentry/src/main/java/io/sentry/JsonSerializer.java index 65e672bea1..bdcfb970f9 100644 --- a/sentry/src/main/java/io/sentry/JsonSerializer.java +++ b/sentry/src/main/java/io/sentry/JsonSerializer.java @@ -120,6 +120,7 @@ public JsonSerializer(@NotNull SentryOptions options) { deserializersByClass.put(SentryLevel.class, new SentryLevel.Deserializer()); deserializersByClass.put(SentryLockReason.class, new SentryLockReason.Deserializer()); deserializersByClass.put(SentryLogEvents.class, new SentryLogEvents.Deserializer()); + deserializersByClass.put(SentryMetricsEvents.class, new SentryMetricsEvents.Deserializer()); deserializersByClass.put(SentryPackage.class, new SentryPackage.Deserializer()); deserializersByClass.put(SentryRuntime.class, new SentryRuntime.Deserializer()); deserializersByClass.put(SentryReplayEvent.class, new SentryReplayEvent.Deserializer()); diff --git a/sentry/src/main/java/io/sentry/SentryEnvelopeItem.java b/sentry/src/main/java/io/sentry/SentryEnvelopeItem.java index 155c40ae7c..58d150886d 100644 --- a/sentry/src/main/java/io/sentry/SentryEnvelopeItem.java +++ b/sentry/src/main/java/io/sentry/SentryEnvelopeItem.java @@ -158,6 +158,17 @@ public final class SentryEnvelopeItem { } } + public @Nullable SentryMetricsEvents getMetrics(final @NotNull ISerializer serializer) + throws Exception { + if (header == null || header.getType() != SentryItemType.TraceMetric) { + return null; + } + try (final Reader eventReader = + new BufferedReader(new InputStreamReader(new ByteArrayInputStream(getData()), UTF_8))) { + return serializer.deserialize(eventReader, SentryMetricsEvents.class); + } + } + public static SentryEnvelopeItem fromUserFeedback( final @NotNull ISerializer serializer, final @NotNull UserFeedback userFeedback) { Objects.requireNonNull(serializer, "ISerializer is required.");