Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
e156d3c
Metrics Options
adinauer Dec 17, 2025
b0ec8eb
MetricsApi stub
adinauer Dec 17, 2025
a4b97cc
Add transport types for metrics
adinauer Dec 17, 2025
d3c7452
Enable metrics by default
adinauer Dec 17, 2025
14ea96a
Format code
getsentry-bot Dec 22, 2025
ff0fe29
Add batch processor for Metrics
adinauer Dec 18, 2025
4605172
Wire up Metrics parts
adinauer Dec 18, 2025
38a5226
Metrics counter basic API
adinauer Dec 18, 2025
557f6dd
Metrics Count API
adinauer Dec 18, 2025
661415a
Metrics Distribution API
adinauer Dec 18, 2025
ece88f1
Metrics Gauge API
adinauer Dec 19, 2025
5aed561
Metrics Envelope item deserialization
adinauer Dec 19, 2025
0107c8e
Record client report for discarded metrics envelope item
adinauer Dec 19, 2025
cceb10f
Metrics external options
adinauer Dec 19, 2025
870ba66
Metrics Manifest options for Android
adinauer Dec 19, 2025
56879b3
Android Metrics batch processor and factory
adinauer Dec 19, 2025
15ec6da
Only send user attributes if sendDefaultPii is true
adinauer Dec 22, 2025
52863e3
Remove Experimental Annotation from Metrics Options
adinauer Dec 22, 2025
a79f91b
Add unit tests for Metrics
adinauer Jan 5, 2026
d3cadef
Create SentryMetricsParameters for Metrics
adinauer Jan 5, 2026
75beb08
Use uv for managing python version
adinauer Jan 8, 2026
924a40c
fix
lcian Jan 8, 2026
301f9a2
Add device and OS attributes to metrics
adinauer Jan 7, 2026
af4f8c4
Add AI rules files for Metrics (and update feature flags rule)
adinauer Jan 7, 2026
8330a3e
Close and flush MetricsBatchProcessor from SentryClient
adinauer Jan 8, 2026
53ea75b
fix
lcian Jan 8, 2026
9988b7e
Add E2E tests for Metrics
adinauer Jan 8, 2026
f502ffe
Final keyword in Metrics methods
adinauer Jan 8, 2026
76e7b2c
Add Hint to Metrics
adinauer Jan 12, 2026
5bfb646
SentryMetricsParameters create shortcut for attributes map
adinauer Jan 12, 2026
4d16452
Automatically use SentryOptions.Metrics.BeforeSendMetricCallback Spri…
adinauer Jan 12, 2026
6913b95
Rename sample API param, remove sleep
adinauer Jan 13, 2026
81e4b6a
Create MetricsUnit constants
adinauer Jan 13, 2026
735f8f1
Format code
getsentry-bot Jan 13, 2026
e7b20a0
Metrics Options (#4980)
adinauer Jan 14, 2026
1c96999
feat(metrics): [Trace Metrics 2] MetricsApi stub (#4981)
adinauer Jan 14, 2026
29af336
Merge branch 'feat/trace-metrics' into 12-17-enable_metrics_by_default
adinauer Jan 14, 2026
20376f7
Merge pull request #4982 from getsentry/12-17-enable_metrics_by_default
adinauer Jan 14, 2026
b8f9218
Merge pull request #4983 from getsentry/12-17-add_transport_types_for…
adinauer Jan 14, 2026
b3e9f9d
Merge pull request #4984 from getsentry/12-18-add_batch_processor_for…
adinauer Jan 14, 2026
21e0687
Merge pull request #4985 from getsentry/12-18-wire_up_metrics_parts
adinauer Jan 14, 2026
d4f469f
Merge pull request #4986 from getsentry/12-18-metrics_counter_basic_api
adinauer Jan 14, 2026
2d8889f
Merge pull request #4987 from getsentry/12-18-metrics_count_api
adinauer Jan 14, 2026
236a3a8
Merge pull request #4988 from getsentry/12-18-metrics_distribution_api
adinauer Jan 14, 2026
9443344
Merge pull request #4989 from getsentry/12-19-metrics_gauge_api
adinauer Jan 14, 2026
78bfea0
Merge pull request #4990 from getsentry/12-19-metrics_envelope_item_d…
adinauer Jan 14, 2026
7a122ec
Merge pull request #4991 from getsentry/12-19-record_client_report_fo…
adinauer Jan 14, 2026
c02f059
Merge pull request #4992 from getsentry/12-19-metrics_external_options
adinauer Jan 14, 2026
5cd1a70
Merge pull request #4993 from getsentry/12-19-metrics_manifest_option…
adinauer Jan 14, 2026
dc0107f
Merge pull request #4994 from getsentry/12-19-android_metrics_batch_p…
adinauer Jan 14, 2026
e396044
Merge pull request #4995 from getsentry/12-22-only_send_user_attribut…
adinauer Jan 14, 2026
9e12f62
Merge pull request #4996 from getsentry/12-22-remove_experimental_ann…
adinauer Jan 14, 2026
6511ed5
Merge pull request #5005 from getsentry/01-05-add_unit_tests_for_metrics
adinauer Jan 14, 2026
a9786bd
Merge pull request #5006 from getsentry/01-05-create_sentrymetricspar…
adinauer Jan 14, 2026
d265938
Merge pull request #5007 from getsentry/01-07-add_device_and_os_attri…
adinauer Jan 14, 2026
82249fc
Merge pull request #5008 from getsentry/01-07-add_ai_rules_files_for_…
adinauer Jan 14, 2026
7f42e1f
Merge pull request #5010 from getsentry/01-08-close_and_flush_metrics…
adinauer Jan 14, 2026
bea07c7
Merge pull request #5009 from getsentry/01-08-use_uv_for_managing_pyt…
adinauer Jan 14, 2026
386b53d
Merge pull request #5011 from getsentry/01-08-add_e2e_tests_for_metrics
adinauer Jan 14, 2026
552940b
Final keyword in Metrics methods (#5013)
adinauer Jan 14, 2026
6f439ac
Merge pull request #5019 from getsentry/01-12-add_hint_to_metrics
adinauer Jan 14, 2026
9fddc10
Merge pull request #5020 from getsentry/01-12-sentrymetricsparameters…
adinauer Jan 14, 2026
a930276
Merge pull request #5021 from getsentry/01-12-automatically_use_sentr…
adinauer Jan 14, 2026
f2dca3b
Merge pull request #5024 from getsentry/01-13-rename_sample_api_param…
adinauer Jan 14, 2026
1737697
Merge pull request #5025 from getsentry/01-13-create_metricsunit_cons…
adinauer Jan 14, 2026
c791f64
Merge branch 'main' into feat/trace-metrics
adinauer Jan 14, 2026
0d16364
More PR review changes (#5028)
adinauer Jan 14, 2026
de58ea0
changelog
adinauer Jan 14, 2026
e8963d8
non nullable trace id
adinauer Jan 14, 2026
11a2ea8
error log now says metric instead of log
adinauer Jan 14, 2026
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,8 @@ import io.sentry.SentryEnvelope
import io.sentry.SentryEvent
import io.sentry.SentryLogEvent
import io.sentry.SentryLogEvents
import io.sentry.SentryMetricsEvent
import io.sentry.SentryMetricsEvents
import io.sentry.SentryReplayEvent
import io.sentry.Session
import io.sentry.TraceContext
Expand Down Expand Up @@ -192,6 +194,14 @@ class SessionTrackingIntegrationTest {
TODO("Not yet implemented")
}

override fun captureMetric(event: SentryMetricsEvent, scope: IScope?) {
TODO("Not yet implemented")
}

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

override fun getRateLimiter(): RateLimiter? {
TODO("Not yet implemented")
}
Expand Down
141 changes: 137 additions & 4 deletions sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,7 @@ public abstract interface class io/sentry/EventProcessor {
public fun getOrder ()Ljava/lang/Long;
public fun process (Lio/sentry/SentryEvent;Lio/sentry/Hint;)Lio/sentry/SentryEvent;
public fun process (Lio/sentry/SentryLogEvent;)Lio/sentry/SentryLogEvent;
public fun process (Lio/sentry/SentryMetricsEvent;)Lio/sentry/SentryMetricsEvent;
public fun process (Lio/sentry/SentryReplayEvent;Lio/sentry/Hint;)Lio/sentry/SentryReplayEvent;
public fun process (Lio/sentry/protocol/SentryTransaction;Lio/sentry/Hint;)Lio/sentry/protocol/SentryTransaction;
}
Expand Down Expand Up @@ -661,6 +662,7 @@ public final class io/sentry/HubAdapter : io/sentry/IHub {
public fun isHealthy ()Z
public fun logger ()Lio/sentry/logger/ILoggerApi;
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public fun metrics ()Lio/sentry/metrics/IMetricsApi;
public fun popScope ()V
public fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -732,6 +734,7 @@ public final class io/sentry/HubScopesWrapper : io/sentry/IHub {
public fun isHealthy ()Z
public fun logger ()Lio/sentry/logger/ILoggerApi;
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public fun metrics ()Lio/sentry/metrics/IMetricsApi;
public fun popScope ()V
public fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -992,6 +995,7 @@ public abstract interface class io/sentry/IScopes {
public fun isNoOp ()Z
public abstract fun logger ()Lio/sentry/logger/ILoggerApi;
public abstract fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public abstract fun metrics ()Lio/sentry/metrics/IMetricsApi;
public abstract fun popScope ()V
public abstract fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public abstract fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -1026,6 +1030,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 All @@ -1041,6 +1046,7 @@ public abstract interface class io/sentry/ISentryClient {
public abstract fun captureLog (Lio/sentry/SentryLogEvent;Lio/sentry/IScope;)V
public fun captureMessage (Ljava/lang/String;Lio/sentry/SentryLevel;)Lio/sentry/protocol/SentryId;
public fun captureMessage (Ljava/lang/String;Lio/sentry/SentryLevel;Lio/sentry/IScope;)Lio/sentry/protocol/SentryId;
public abstract fun captureMetric (Lio/sentry/SentryMetricsEvent;Lio/sentry/IScope;)V
public abstract fun captureProfileChunk (Lio/sentry/ProfileChunk;Lio/sentry/IScope;)Lio/sentry/protocol/SentryId;
public abstract fun captureReplayEvent (Lio/sentry/SentryReplayEvent;Lio/sentry/IScope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
public fun captureSession (Lio/sentry/Session;)V
Expand Down Expand Up @@ -1565,6 +1571,7 @@ public final class io/sentry/NoOpHub : io/sentry/IHub {
public fun isNoOp ()Z
public fun logger ()Lio/sentry/logger/ILoggerApi;
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public fun metrics ()Lio/sentry/metrics/IMetricsApi;
public fun popScope ()V
public fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -1741,6 +1748,7 @@ public final class io/sentry/NoOpScopes : io/sentry/IScopes {
public fun isNoOp ()Z
public fun logger ()Lio/sentry/logger/ILoggerApi;
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public fun metrics ()Lio/sentry/metrics/IMetricsApi;
public fun popScope ()V
public fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -2456,6 +2464,7 @@ public final class io/sentry/Scopes : io/sentry/IScopes {
public fun isHealthy ()Z
public fun logger ()Lio/sentry/logger/ILoggerApi;
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public fun metrics ()Lio/sentry/metrics/IMetricsApi;
public fun popScope ()V
public fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -2528,6 +2537,7 @@ public final class io/sentry/ScopesAdapter : io/sentry/IScopes {
public fun isHealthy ()Z
public fun logger ()Lio/sentry/logger/ILoggerApi;
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
public fun metrics ()Lio/sentry/metrics/IMetricsApi;
public fun popScope ()V
public fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -2648,6 +2658,7 @@ public final class io/sentry/Sentry {
public static fun isEnabled ()Z
public static fun isHealthy ()Z
public static fun logger ()Lio/sentry/logger/ILoggerApi;
public static fun metrics ()Lio/sentry/metrics/IMetricsApi;
public static fun popScope ()V
public static fun pushIsolationScope ()Lio/sentry/ISentryLifecycleToken;
public static fun pushScope ()Lio/sentry/ISentryLifecycleToken;
Expand Down Expand Up @@ -2844,11 +2855,13 @@ 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;
public fun captureFeedback (Lio/sentry/protocol/Feedback;Lio/sentry/Hint;Lio/sentry/IScope;)Lio/sentry/protocol/SentryId;
public fun captureLog (Lio/sentry/SentryLogEvent;Lio/sentry/IScope;)V
public fun captureMetric (Lio/sentry/SentryMetricsEvent;Lio/sentry/IScope;)V
public fun captureProfileChunk (Lio/sentry/ProfileChunk;Lio/sentry/IScope;)Lio/sentry/protocol/SentryId;
public fun captureReplayEvent (Lio/sentry/SentryReplayEvent;Lio/sentry/IScope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
public fun captureSession (Lio/sentry/Session;Lio/sentry/Hint;)V
Expand Down Expand Up @@ -2930,6 +2943,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 @@ -3314,6 +3328,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 @@ -3420,6 +3494,7 @@ public class io/sentry/SentryOptions {
public fun getMaxRequestBodySize ()Lio/sentry/SentryOptions$RequestSize;
public fun getMaxSpans ()I
public fun getMaxTraceFileSize ()J
public fun getMetrics ()Lio/sentry/SentryOptions$Metrics;
public fun getModulesLoader ()Lio/sentry/internal/modules/IModulesLoader;
public fun getOnDiscard ()Lio/sentry/SentryOptions$OnDiscardCallback;
public fun getOnOversizedEvent ()Lio/sentry/SentryOptions$OnOversizedEventCallback;
Expand Down Expand Up @@ -3572,6 +3647,7 @@ public class io/sentry/SentryOptions {
public fun setMaxRequestBodySize (Lio/sentry/SentryOptions$RequestSize;)V
public fun setMaxSpans (I)V
public fun setMaxTraceFileSize (J)V
public fun setMetrics (Lio/sentry/SentryOptions$Metrics;)V
public fun setModulesLoader (Lio/sentry/internal/modules/IModulesLoader;)V
public fun setOnDiscard (Lio/sentry/SentryOptions$OnDiscardCallback;)V
public fun setOnOversizedEvent (Lio/sentry/SentryOptions$OnOversizedEventCallback;)V
Expand Down Expand Up @@ -3626,10 +3702,6 @@ public abstract interface class io/sentry/SentryOptions$BeforeBreadcrumbCallback
public abstract fun execute (Lio/sentry/Breadcrumb;Lio/sentry/Hint;)Lio/sentry/Breadcrumb;
}

public abstract interface class io/sentry/SentryOptions$BeforeEmitMetricCallback {
public abstract fun execute (Ljava/lang/String;Ljava/util/Map;)Z
}

public abstract interface class io/sentry/SentryOptions$BeforeEnvelopeCallback {
public abstract fun execute (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)V
}
Expand Down Expand Up @@ -3683,6 +3755,20 @@ public abstract interface class io/sentry/SentryOptions$Logs$BeforeSendLogCallba
public abstract fun execute (Lio/sentry/SentryLogEvent;)Lio/sentry/SentryLogEvent;
}

public final class io/sentry/SentryOptions$Metrics {
public fun <init> ()V
public fun getBeforeSend ()Lio/sentry/SentryOptions$Metrics$BeforeSendMetricCallback;
public fun getMetricsBatchProcessorFactory ()Lio/sentry/metrics/IMetricsBatchProcessorFactory;
public fun isEnabled ()Z
public fun setBeforeSend (Lio/sentry/SentryOptions$Metrics$BeforeSendMetricCallback;)V
public fun setEnabled (Z)V
public fun setMetricsBatchProcessorFactory (Lio/sentry/metrics/IMetricsBatchProcessorFactory;)V
}

public abstract interface class io/sentry/SentryOptions$Metrics$BeforeSendMetricCallback {
public abstract fun execute (Lio/sentry/SentryMetricsEvent;)Lio/sentry/SentryMetricsEvent;
}

public abstract interface class io/sentry/SentryOptions$OnDiscardCallback {
public abstract fun execute (Lio/sentry/clientreport/DiscardReason;Lio/sentry/DataCategory;Ljava/lang/Long;)V
}
Expand Down Expand Up @@ -5113,6 +5199,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
11 changes: 11 additions & 0 deletions sentry/src/main/java/io/sentry/EventProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,17 @@ default SentryLogEvent process(@NotNull SentryLogEvent event) {
return event;
}

/**
* May mutate or drop a SentryMetricsEvent
*
* @param event the SentryMetricsEvent
* @return the event itself, a mutated SentryMetricsEvent or null
*/
@Nullable
default SentryMetricsEvent process(@NotNull SentryMetricsEvent event) {
return event;
}

/**
* Controls when this EventProcessor is invoked.
*
Expand Down
6 changes: 6 additions & 0 deletions sentry/src/main/java/io/sentry/HubAdapter.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.sentry;

import io.sentry.logger.ILoggerApi;
import io.sentry.metrics.IMetricsApi;
import io.sentry.protocol.Feedback;
import io.sentry.protocol.SentryId;
import io.sentry.protocol.SentryTransaction;
Expand Down Expand Up @@ -389,6 +390,11 @@ public void reportFullyDisplayed() {
return Sentry.getCurrentScopes().logger();
}

@Override
public @NotNull IMetricsApi metrics() {
return Sentry.getCurrentScopes().metrics();
}

@Override
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {
Sentry.addFeatureFlag(flag, result);
Expand Down
6 changes: 6 additions & 0 deletions sentry/src/main/java/io/sentry/HubScopesWrapper.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.sentry;

import io.sentry.logger.ILoggerApi;
import io.sentry.metrics.IMetricsApi;
import io.sentry.protocol.Feedback;
import io.sentry.protocol.SentryId;
import io.sentry.protocol.SentryTransaction;
Expand Down Expand Up @@ -374,6 +375,11 @@ public void reportFullyDisplayed() {
return scopes.logger();
}

@Override
public @NotNull IMetricsApi metrics() {
return scopes.metrics();
}

@Override
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {
scopes.addFeatureFlag(flag, result);
Expand Down
4 changes: 4 additions & 0 deletions sentry/src/main/java/io/sentry/IScopes.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.sentry;

import io.sentry.logger.ILoggerApi;
import io.sentry.metrics.IMetricsApi;
import io.sentry.protocol.Feedback;
import io.sentry.protocol.SentryId;
import io.sentry.protocol.SentryTransaction;
Expand Down Expand Up @@ -744,5 +745,8 @@ default boolean isNoOp() {
@NotNull
ILoggerApi logger();

@NotNull
IMetricsApi metrics();

void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result);
}
5 changes: 5 additions & 0 deletions sentry/src/main/java/io/sentry/ISentryClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -305,9 +305,14 @@ SentryId captureProfileChunk(

void captureLog(@NotNull SentryLogEvent logEvent, @Nullable IScope scope);

void captureMetric(@NotNull SentryMetricsEvent logEvent, @Nullable IScope scope);

@ApiStatus.Internal
void captureBatchedLogEvents(@NotNull SentryLogEvents logEvents);

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

@ApiStatus.Internal
@Nullable
RateLimiter getRateLimiter();
Expand Down
Loading
Loading