Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import io.sentry.SentryEnvelope
import io.sentry.SentryEvent
import io.sentry.SentryLogEvent
import io.sentry.SentryLogEvents
import io.sentry.SentryMetricsEvents
import io.sentry.SentryReplayEvent
import io.sentry.Session
import io.sentry.TraceContext
Expand Down Expand Up @@ -192,6 +193,10 @@ class SessionTrackingIntegrationTest {
TODO("Not yet implemented")
}

override fun captureBatchedMetricsEvents(metricsEvents: SentryMetricsEvents) {
TODO("Not yet implemented")
}

override fun getRateLimiter(): RateLimiter? {
TODO("Not yet implemented")
}
Expand Down
98 changes: 97 additions & 1 deletion sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -1029,6 +1029,7 @@ public abstract interface class io/sentry/IScopesStorage {

public abstract interface class io/sentry/ISentryClient {
public abstract fun captureBatchedLogEvents (Lio/sentry/SentryLogEvents;)V
public abstract fun captureBatchedMetricsEvents (Lio/sentry/SentryMetricsEvents;)V
public abstract fun captureCheckIn (Lio/sentry/CheckIn;Lio/sentry/IScope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
public fun captureEnvelope (Lio/sentry/SentryEnvelope;)Lio/sentry/protocol/SentryId;
public abstract fun captureEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
Expand Down Expand Up @@ -2852,6 +2853,7 @@ public final class io/sentry/SentryBaseEvent$Serializer {
public final class io/sentry/SentryClient : io/sentry/ISentryClient {
public fun <init> (Lio/sentry/SentryOptions;)V
public fun captureBatchedLogEvents (Lio/sentry/SentryLogEvents;)V
public fun captureBatchedMetricsEvents (Lio/sentry/SentryMetricsEvents;)V
public fun captureCheckIn (Lio/sentry/CheckIn;Lio/sentry/IScope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
public fun captureEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
public fun captureEvent (Lio/sentry/SentryEvent;Lio/sentry/IScope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
Expand Down Expand Up @@ -2938,6 +2940,7 @@ public final class io/sentry/SentryEnvelopeItem {
public static fun fromClientReport (Lio/sentry/ISerializer;Lio/sentry/clientreport/ClientReport;)Lio/sentry/SentryEnvelopeItem;
public static fun fromEvent (Lio/sentry/ISerializer;Lio/sentry/SentryBaseEvent;)Lio/sentry/SentryEnvelopeItem;
public static fun fromLogs (Lio/sentry/ISerializer;Lio/sentry/SentryLogEvents;)Lio/sentry/SentryEnvelopeItem;
public static fun fromMetrics (Lio/sentry/ISerializer;Lio/sentry/SentryMetricsEvents;)Lio/sentry/SentryEnvelopeItem;
public static fun fromProfileChunk (Lio/sentry/ProfileChunk;Lio/sentry/ISerializer;)Lio/sentry/SentryEnvelopeItem;
public static fun fromProfileChunk (Lio/sentry/ProfileChunk;Lio/sentry/ISerializer;Lio/sentry/IProfileConverter;)Lio/sentry/SentryEnvelopeItem;
public static fun fromProfilingTrace (Lio/sentry/ProfilingTraceData;JLio/sentry/ISerializer;)Lio/sentry/SentryEnvelopeItem;
Expand Down Expand Up @@ -3322,6 +3325,66 @@ public final class io/sentry/SentryLongDate : io/sentry/SentryDate {
public fun nanoTimestamp ()J
}

public final class io/sentry/SentryMetricsEvent : io/sentry/JsonSerializable, io/sentry/JsonUnknown {
public fun <init> (Lio/sentry/protocol/SentryId;Lio/sentry/SentryDate;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;)V
public fun <init> (Lio/sentry/protocol/SentryId;Ljava/lang/Double;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;)V
public fun getAttributes ()Ljava/util/Map;
public fun getName ()Ljava/lang/String;
public fun getSpanId ()Lio/sentry/SpanId;
public fun getTimestamp ()Ljava/lang/Double;
public fun getType ()Ljava/lang/String;
public fun getUnit ()Ljava/lang/String;
public fun getUnknown ()Ljava/util/Map;
public fun getValue ()Ljava/lang/Double;
public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;)V
public fun setAttribute (Ljava/lang/String;Lio/sentry/SentryLogEventAttributeValue;)V
public fun setAttributes (Ljava/util/Map;)V
public fun setName (Ljava/lang/String;)V
public fun setSpanId (Lio/sentry/SpanId;)V
public fun setTimestamp (Ljava/lang/Double;)V
public fun setType (Ljava/lang/String;)V
public fun setUnit (Ljava/lang/String;)V
public fun setUnknown (Ljava/util/Map;)V
public fun setValue (Ljava/lang/Double;)V
}

public final class io/sentry/SentryMetricsEvent$Deserializer : io/sentry/JsonDeserializer {
public fun <init> ()V
public fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Lio/sentry/SentryMetricsEvent;
public synthetic fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object;
}

public final class io/sentry/SentryMetricsEvent$JsonKeys {
public static final field ATTRIBUTES Ljava/lang/String;
public static final field NAME Ljava/lang/String;
public static final field SPAN_ID Ljava/lang/String;
public static final field TIMESTAMP Ljava/lang/String;
public static final field TRACE_ID Ljava/lang/String;
public static final field TYPE Ljava/lang/String;
public static final field UNIT Ljava/lang/String;
public static final field VALUE Ljava/lang/String;
public fun <init> ()V
}

public final class io/sentry/SentryMetricsEvents : io/sentry/JsonSerializable, io/sentry/JsonUnknown {
public fun <init> (Ljava/util/List;)V
public fun getItems ()Ljava/util/List;
public fun getUnknown ()Ljava/util/Map;
public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;)V
public fun setUnknown (Ljava/util/Map;)V
}

public final class io/sentry/SentryMetricsEvents$Deserializer : io/sentry/JsonDeserializer {
public fun <init> ()V
public fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Lio/sentry/SentryMetricsEvents;
public synthetic fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object;
}

public final class io/sentry/SentryMetricsEvents$JsonKeys {
public static final field ITEMS Ljava/lang/String;
public fun <init> ()V
}

public final class io/sentry/SentryNanotimeDate : io/sentry/SentryDate {
public fun <init> ()V
public fun <init> (Ljava/util/Date;J)V
Expand Down Expand Up @@ -3698,7 +3761,7 @@ public final class io/sentry/SentryOptions$Metrics {
}

public abstract interface class io/sentry/SentryOptions$Metrics$BeforeSendMetricCallback {
public abstract fun execute (Ljava/lang/Object;)Ljava/lang/Object;
public abstract fun execute (Lio/sentry/SentryMetricsEvents;)Lio/sentry/SentryMetricsEvents;
}

public abstract interface class io/sentry/SentryOptions$OnDiscardCallback {
Expand Down Expand Up @@ -5127,20 +5190,53 @@ public final class io/sentry/logger/SentryLogParameters {
public fun setTimestamp (Lio/sentry/SentryDate;)V
}

public final class io/sentry/metrics/DefaultMetricsBatchProcessorFactory : io/sentry/metrics/IMetricsBatchProcessorFactory {
public fun <init> ()V
public fun create (Lio/sentry/SentryOptions;Lio/sentry/SentryClient;)Lio/sentry/metrics/IMetricsBatchProcessor;
}

public abstract interface class io/sentry/metrics/IMetricsApi {
public abstract fun count (Ljava/lang/String;)V
}

public abstract interface class io/sentry/metrics/IMetricsBatchProcessor {
public abstract fun add (Lio/sentry/SentryMetricsEvent;)V
public abstract fun close (Z)V
public abstract fun flush (J)V
}

public abstract interface class io/sentry/metrics/IMetricsBatchProcessorFactory {
public abstract fun create (Lio/sentry/SentryOptions;Lio/sentry/SentryClient;)Lio/sentry/metrics/IMetricsBatchProcessor;
}

public final class io/sentry/metrics/MetricsApi : io/sentry/metrics/IMetricsApi {
public fun <init> (Lio/sentry/Scopes;)V
public fun count (Ljava/lang/String;)V
}

public class io/sentry/metrics/MetricsBatchProcessor : io/sentry/metrics/IMetricsBatchProcessor {
public static final field FLUSH_AFTER_MS I
public static final field MAX_BATCH_SIZE I
public static final field MAX_QUEUE_SIZE I
protected final field options Lio/sentry/SentryOptions;
public fun <init> (Lio/sentry/SentryOptions;Lio/sentry/ISentryClient;)V
public fun add (Lio/sentry/SentryMetricsEvent;)V
public fun close (Z)V
public fun flush (J)V
}

public final class io/sentry/metrics/NoOpMetricsApi : io/sentry/metrics/IMetricsApi {
public fun count (Ljava/lang/String;)V
public static fun getInstance ()Lio/sentry/metrics/NoOpMetricsApi;
}

public final class io/sentry/metrics/NoOpMetricsBatchProcessor : io/sentry/metrics/IMetricsBatchProcessor {
public fun add (Lio/sentry/SentryMetricsEvent;)V
public fun close (Z)V
public fun flush (J)V
public static fun getInstance ()Lio/sentry/metrics/NoOpMetricsBatchProcessor;
}

public final class io/sentry/opentelemetry/OpenTelemetryUtil {
public fun <init> ()V
public static fun applyIgnoredSpanOrigins (Lio/sentry/SentryOptions;)V
Expand Down
3 changes: 3 additions & 0 deletions sentry/src/main/java/io/sentry/ISentryClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,9 @@ SentryId captureProfileChunk(
@ApiStatus.Internal
void captureBatchedLogEvents(@NotNull SentryLogEvents logEvents);

@ApiStatus.Internal
void captureBatchedMetricsEvents(@NotNull SentryMetricsEvents metricsEvents);

@ApiStatus.Internal
@Nullable
RateLimiter getRateLimiter();
Expand Down
6 changes: 6 additions & 0 deletions sentry/src/main/java/io/sentry/NoOpSentryClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,12 @@ public void captureBatchedLogEvents(@NotNull SentryLogEvents logEvents) {
// do nothing
}

@ApiStatus.Internal
@Override
public void captureBatchedMetricsEvents(@NotNull SentryMetricsEvents metricsEvents) {
// do nothing
}

@Override
public @Nullable RateLimiter getRateLimiter() {
return null;
Expand Down
26 changes: 25 additions & 1 deletion sentry/src/main/java/io/sentry/SentryClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -693,6 +693,19 @@ public void captureUserFeedback(final @NotNull UserFeedback userFeedback) {
return new SentryEnvelope(envelopeHeader, envelopeItems);
}

private @NotNull SentryEnvelope buildEnvelope(final @NotNull SentryMetricsEvents metricsEvents) {
final List<SentryEnvelopeItem> envelopeItems = new ArrayList<>();

final SentryEnvelopeItem metricsItem =
SentryEnvelopeItem.fromMetrics(options.getSerializer(), metricsEvents);
envelopeItems.add(metricsItem);

final SentryEnvelopeHeader envelopeHeader =
new SentryEnvelopeHeader(null, options.getSdkVersion(), null);

return new SentryEnvelope(envelopeHeader, envelopeItems);
}

private @NotNull SentryEnvelope buildEnvelope(
final @NotNull SentryReplayEvent event,
final @Nullable ReplayRecording replayRecording,
Expand Down Expand Up @@ -1218,7 +1231,18 @@ public void captureBatchedLogEvents(final @NotNull SentryLogEvents logEvents) {
final @NotNull SentryEnvelope envelope = buildEnvelope(logEvents);
sendEnvelope(envelope, null);
} catch (IOException e) {
options.getLogger().log(SentryLevel.WARNING, e, "Capturing log failed.");
options.getLogger().log(SentryLevel.WARNING, e, "Capturing logs failed.");
}
}

@ApiStatus.Internal
@Override
public void captureBatchedMetricsEvents(final @NotNull SentryMetricsEvents metricsEvents) {
try {
final @NotNull SentryEnvelope envelope = buildEnvelope(metricsEvents);
sendEnvelope(envelope, null);
} catch (IOException e) {
options.getLogger().log(SentryLevel.WARNING, e, "Capturing metrics failed.");
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.sentry.metrics;

import io.sentry.SentryClient;
import io.sentry.SentryOptions;
import org.jetbrains.annotations.NotNull;

public final class DefaultMetricsBatchProcessorFactory implements IMetricsBatchProcessorFactory {
@Override
public @NotNull IMetricsBatchProcessor create(
@NotNull SentryOptions options, @NotNull SentryClient client) {
return new MetricsBatchProcessor(options, client);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.sentry.metrics;

import io.sentry.SentryMetricsEvent;
import org.jetbrains.annotations.NotNull;

public interface IMetricsBatchProcessor {
void add(@NotNull SentryMetricsEvent event);

void close(boolean isRestarting);

/**
* Flushes log events.
*
* @param timeoutMillis time in milliseconds
*/
void flush(long timeoutMillis);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.sentry.metrics;

import io.sentry.SentryClient;
import io.sentry.SentryOptions;
import org.jetbrains.annotations.NotNull;

public interface IMetricsBatchProcessorFactory {

@NotNull
IMetricsBatchProcessor create(
final @NotNull SentryOptions options, final @NotNull SentryClient client);
}
Loading
Loading