about summary refs log tree commit diff
path: root/MatrixUtils.Desktop/SentryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MatrixUtils.Desktop/SentryService.cs')
-rw-r--r--MatrixUtils.Desktop/SentryService.cs29
1 files changed, 29 insertions, 0 deletions
diff --git a/MatrixUtils.Desktop/SentryService.cs b/MatrixUtils.Desktop/SentryService.cs
new file mode 100644
index 0000000..c965632
--- /dev/null
+++ b/MatrixUtils.Desktop/SentryService.cs
@@ -0,0 +1,29 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Sentry;
+
+namespace MatrixUtils.Desktop;
+
+public class SentryService : IDisposable {
+    private IDisposable? _sentrySdkDisposable;
+    public SentryService(IServiceScopeFactory scopeFactory, ILogger<SentryService> logger) {
+        var config = scopeFactory.CreateScope().ServiceProvider.GetRequiredService<RMUDesktopConfiguration>();
+        if (config.SentryDsn is null) {
+            logger.LogWarning("Sentry DSN is not set, skipping Sentry initialisation");
+            return;
+        }
+        _sentrySdkDisposable = SentrySdk.Init(o => {
+            o.Dsn = config.SentryDsn;
+            // When configuring for the first time, to see what the SDK is doing:
+            o.Debug = true;
+            // Set traces_sample_rate to 1.0 to capture 100% of transactions for performance monitoring.
+            // We recommend adjusting this value in production.
+            o.TracesSampleRate = 1.0;
+            // Enable Global Mode if running in a client app
+            o.IsGlobalModeEnabled = true;
+        });
+    }
+
+    /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
+    public void Dispose() => _sentrySdkDisposable?.Dispose();
+}