-
-
Notifications
You must be signed in to change notification settings - Fork 205
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Set Java/Android SDK options (#1694)
- Loading branch information
1 parent
4b52b7b
commit d39477c
Showing
14 changed files
with
701 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
using Sentry.Extensibility; | ||
|
||
namespace Sentry.Android | ||
{ | ||
internal class BeforeBreadcrumbCallback : JavaObject, Java.SentryOptions.IBeforeBreadcrumbCallback | ||
{ | ||
private readonly Func<Breadcrumb, Breadcrumb?> _beforeBreadcrumb; | ||
private readonly IDiagnosticLogger? _logger; | ||
private readonly Java.SentryOptions _javaOptions; | ||
|
||
public BeforeBreadcrumbCallback( | ||
Func<Breadcrumb, Breadcrumb?> beforeBreadcrumb, | ||
IDiagnosticLogger? logger, | ||
Java.SentryOptions javaOptions) | ||
{ | ||
_beforeBreadcrumb = beforeBreadcrumb; | ||
_logger = logger; | ||
_javaOptions = javaOptions; | ||
} | ||
|
||
public Java.Breadcrumb? Execute(Java.Breadcrumb b, Java.Hint h) | ||
{ | ||
// Note: Hint is unused due to: | ||
// https://github.com/getsentry/sentry-dotnet/issues/1469 | ||
|
||
var breadcrumb = b.ToBreadcrumb(_javaOptions); | ||
var result = _beforeBreadcrumb.Invoke(breadcrumb); | ||
return result?.ToJavaBreadcrumb(_logger, _javaOptions); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
using Sentry.Extensibility; | ||
|
||
namespace Sentry.Android | ||
{ | ||
internal class BeforeSendCallback : JavaObject, Java.SentryOptions.IBeforeSendCallback | ||
{ | ||
private readonly Func<SentryEvent, SentryEvent?> _beforeSend; | ||
private readonly IDiagnosticLogger? _logger; | ||
private readonly Java.SentryOptions _javaOptions; | ||
|
||
public BeforeSendCallback( | ||
Func<SentryEvent, SentryEvent?> beforeSend, | ||
IDiagnosticLogger? logger, | ||
Java.SentryOptions javaOptions) | ||
{ | ||
_beforeSend = beforeSend; | ||
_logger = logger; | ||
_javaOptions = javaOptions; | ||
} | ||
|
||
public Java.SentryEvent? Execute(Java.SentryEvent e, Java.Hint h) | ||
{ | ||
// Note: Hint is unused due to: | ||
// https://github.com/getsentry/sentry-dotnet/issues/1469 | ||
|
||
var evnt = e.ToSentryEvent(_javaOptions); | ||
var result = _beforeSend.Invoke(evnt); | ||
return result?.ToJavaSentryEvent(_logger, _javaOptions); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
using System.Text.Json; | ||
using Sentry.Extensibility; | ||
|
||
namespace Sentry.Android | ||
{ | ||
internal static class JavaExtensions | ||
{ | ||
public static SentryLevel ToSentryLevel(this Java.SentryLevel level) | ||
{ | ||
// note: switch doesn't work here because JNI enums are not constants | ||
if (level == Java.SentryLevel.Debug) | ||
return SentryLevel.Debug; | ||
if (level == Java.SentryLevel.Info) | ||
return SentryLevel.Info; | ||
if (level == Java.SentryLevel.Warning) | ||
return SentryLevel.Warning; | ||
if (level == Java.SentryLevel.Error) | ||
return SentryLevel.Error; | ||
if (level == Java.SentryLevel.Fatal) | ||
return SentryLevel.Fatal; | ||
|
||
throw new ArgumentOutOfRangeException(nameof(level), level, message: default); | ||
} | ||
|
||
public static Java.SentryLevel ToJavaSentryLevel(this SentryLevel level) => | ||
level switch | ||
{ | ||
SentryLevel.Debug => Java.SentryLevel.Debug!, | ||
SentryLevel.Info => Java.SentryLevel.Info!, | ||
SentryLevel.Warning => Java.SentryLevel.Warning!, | ||
SentryLevel.Error => Java.SentryLevel.Error!, | ||
SentryLevel.Fatal => Java.SentryLevel.Fatal!, | ||
_ => throw new ArgumentOutOfRangeException(nameof(level), level, message: default) | ||
}; | ||
|
||
public static SentryId ToSentryId(this Java.Protocol.SentryId sentryId) => | ||
new(Guid.Parse(sentryId.ToString())); | ||
|
||
public static SpanId ToSpanId(this Java.SpanId spanId) => | ||
new(spanId.ToString()); | ||
|
||
public static SpanStatus ToSpanStatus(this Java.SpanStatus status) | ||
{ | ||
// note: switch doesn't work here because JNI enums are not constants | ||
if (status == Java.SpanStatus.Ok) | ||
return SpanStatus.Ok; | ||
if (status == Java.SpanStatus.DeadlineExceeded) | ||
return SpanStatus.DeadlineExceeded; | ||
if (status == Java.SpanStatus.Unauthenticated) | ||
return SpanStatus.Unauthenticated; | ||
if (status == Java.SpanStatus.PermissionDenied) | ||
return SpanStatus.PermissionDenied; | ||
if (status == Java.SpanStatus.NotFound) | ||
return SpanStatus.NotFound; | ||
if (status == Java.SpanStatus.ResourceExhausted) | ||
return SpanStatus.ResourceExhausted; | ||
if (status == Java.SpanStatus.InvalidArgument) | ||
return SpanStatus.InvalidArgument; | ||
if (status == Java.SpanStatus.Unimplemented) | ||
return SpanStatus.Unimplemented; | ||
if (status == Java.SpanStatus.Unavailable) | ||
return SpanStatus.Unavailable; | ||
if (status == Java.SpanStatus.InternalError) | ||
return SpanStatus.InternalError; | ||
if (status == Java.SpanStatus.UnknownError) | ||
return SpanStatus.UnknownError; | ||
if (status == Java.SpanStatus.Cancelled) | ||
return SpanStatus.Cancelled; | ||
if (status == Java.SpanStatus.AlreadyExists) | ||
return SpanStatus.AlreadyExists; | ||
if (status == Java.SpanStatus.FailedPrecondition) | ||
return SpanStatus.FailedPrecondition; | ||
if (status == Java.SpanStatus.Aborted) | ||
return SpanStatus.Aborted; | ||
if (status == Java.SpanStatus.OutOfRange) | ||
return SpanStatus.OutOfRange; | ||
if (status == Java.SpanStatus.DataLoss) | ||
return SpanStatus.DataLoss; | ||
|
||
throw new ArgumentOutOfRangeException(nameof(status), status, message: default); | ||
} | ||
|
||
public static SentryEvent ToSentryEvent(this Java.SentryEvent sentryEvent, Java.SentryOptions javaOptions) | ||
{ | ||
using var stream = new MemoryStream(); | ||
using var streamWriter = new JavaOutputStreamWriter(stream); | ||
using var jsonWriter = new Java.JsonObjectWriter(streamWriter, javaOptions.MaxDepth); | ||
sentryEvent.Serialize(jsonWriter, javaOptions.Logger); | ||
jsonWriter.Flush(); | ||
stream.Seek(0, SeekOrigin.Begin); | ||
|
||
using var json = JsonDocument.Parse(stream); | ||
return SentryEvent.FromJson(json.RootElement, sentryEvent.Throwable); | ||
} | ||
|
||
public static Java.SentryEvent ToJavaSentryEvent(this SentryEvent sentryEvent, IDiagnosticLogger? logger, Java.SentryOptions javaOptions) | ||
{ | ||
using var stream = new MemoryStream(); | ||
using var jsonWriter = new Utf8JsonWriter(stream); | ||
sentryEvent.WriteTo(jsonWriter, logger); | ||
jsonWriter.Flush(); | ||
stream.Seek(0, SeekOrigin.Begin); | ||
|
||
using var streamReader = new JavaInputStreamReader(stream); | ||
using var jsonReader = new Java.JsonObjectReader(streamReader); | ||
using var deserializer = new Java.SentryEvent.Deserializer(); | ||
return deserializer.Deserialize(jsonReader, javaOptions.Logger); | ||
} | ||
|
||
public static Breadcrumb ToBreadcrumb(this Java.Breadcrumb breadcrumb, Java.SentryOptions javaOptions) | ||
{ | ||
using var stream = new MemoryStream(); | ||
using var streamWriter = new JavaOutputStreamWriter(stream); | ||
using var jsonWriter = new Java.JsonObjectWriter(streamWriter, javaOptions.MaxDepth); | ||
breadcrumb.Serialize(jsonWriter, javaOptions.Logger); | ||
jsonWriter.Flush(); | ||
stream.Seek(0, SeekOrigin.Begin); | ||
|
||
using var json = JsonDocument.Parse(stream); | ||
return Breadcrumb.FromJson(json.RootElement); | ||
} | ||
|
||
public static Java.Breadcrumb ToJavaBreadcrumb(this Breadcrumb breadcrumb, IDiagnosticLogger? logger, Java.SentryOptions javaOptions) | ||
{ | ||
using var stream = new MemoryStream(); | ||
using var jsonWriter = new Utf8JsonWriter(stream); | ||
breadcrumb.WriteTo(jsonWriter, logger); | ||
jsonWriter.Flush(); | ||
stream.Seek(0, SeekOrigin.Begin); | ||
|
||
using var streamReader = new JavaInputStreamReader(stream); | ||
using var jsonReader = new Java.JsonObjectReader(streamReader); | ||
using var deserializer = new Java.Breadcrumb.Deserializer(); | ||
return deserializer.Deserialize(jsonReader, javaOptions.Logger); | ||
} | ||
|
||
public static TransactionSamplingContext ToTransactionSamplingContext(this Java.SamplingContext context) | ||
{ | ||
var tc = context.TransactionContext; | ||
var transactionContext = new TransactionContext( | ||
tc.SpanId.ToSpanId(), | ||
tc.ParentSpanId?.ToSpanId(), | ||
tc.TraceId.ToSentryId(), | ||
tc.Name, | ||
tc.Operation, | ||
tc.Description, | ||
tc.Status?.ToSpanStatus(), | ||
tc.Sampled?.BooleanValue(), | ||
tc.ParentSampled?.BooleanValue()); | ||
|
||
var customContext = context.CustomSamplingContext? | ||
.Data.ToDictionary(x => x.Key, x => (object?)x.Value) | ||
?? new(capacity: 0); | ||
|
||
return new TransactionSamplingContext(transactionContext, customContext); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
namespace Sentry.Android | ||
{ | ||
internal class JavaLogger : JavaObject, Java.ILogger | ||
{ | ||
private readonly SentryOptions _options; | ||
|
||
public JavaLogger(SentryOptions options) => _options = options; | ||
|
||
public void Log(Java.SentryLevel level, string message, JavaObject[]? args) => | ||
_options.DiagnosticLogger?.Log(level.ToSentryLevel(), message, null, args?.Cast<object?>()); | ||
|
||
public void Log(Java.SentryLevel level, string message, Throwable? throwable) => | ||
_options.DiagnosticLogger?.Log(level.ToSentryLevel(), message, throwable); | ||
|
||
public void Log(Java.SentryLevel level, Throwable? throwable, string message, params JavaObject[]? args) => | ||
_options.DiagnosticLogger?.Log(level.ToSentryLevel(), message, throwable, args?.Cast<object?>()); | ||
|
||
public bool IsEnabled(Java.SentryLevel? level) => | ||
level != null && _options.DiagnosticLogger?.IsEnabled(level.ToSentryLevel()) == true; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
namespace Sentry.Android | ||
{ | ||
internal class OptionsConfigurationCallback : JavaObject, Java.Sentry.IOptionsConfiguration | ||
{ | ||
private readonly Action<SentryAndroidOptions> _configureOptions; | ||
|
||
public OptionsConfigurationCallback(Action<SentryAndroidOptions> configureOptions) => | ||
_configureOptions = configureOptions; | ||
|
||
public void Configure(JavaObject optionsObject) | ||
{ | ||
var options = (SentryAndroidOptions)optionsObject; | ||
_configureOptions(options); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.