1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-27 08:12:57 +08:00

Merge pull request #18218 from peppy/sentry-more-context

Add more context to sentry error reports
This commit is contained in:
Dean Herbert 2022-05-12 13:59:25 +09:00 committed by GitHub
commit 4a4f6ab7d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 79 additions and 0 deletions

View File

@ -2,8 +2,10 @@
// See the LICENCE file in the repository root for full licence text.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using osu.Framework.Configuration;
using osu.Framework.Configuration.Tracking;
using osu.Framework.Extensions;
@ -164,6 +166,20 @@ namespace osu.Game.Configuration
SetDefault(OsuSetting.EditorHitAnimations, false);
}
public IDictionary<OsuSetting, string> GetLoggableState() =>
new Dictionary<OsuSetting, string>(ConfigStore.Where(kvp => !keyContainsPrivateInformation(kvp.Key)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString()));
private static bool keyContainsPrivateInformation(OsuSetting argKey)
{
switch (argKey)
{
case OsuSetting.Token:
return true;
}
return false;
}
public OsuConfigManager(Storage storage)
: base(storage)
{

View File

@ -14,6 +14,7 @@ using osu.Framework.Audio;
using osu.Framework.Bindables;
using osu.Framework.Configuration;
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Extensions.TypeExtensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
@ -56,6 +57,8 @@ using osu.Game.Updater;
using osu.Game.Users;
using osu.Game.Utils;
using osuTK.Graphics;
using Sentry;
using Logger = osu.Framework.Logging.Logger;
namespace osu.Game
{
@ -1197,6 +1200,15 @@ namespace osu.Game
private void screenChanged(IScreen current, IScreen newScreen)
{
SentrySdk.ConfigureScope(scope =>
{
scope.Contexts[@"screen stack"] = new
{
Current = newScreen?.GetType().ReadableName(),
Previous = current?.GetType().ReadableName(),
};
});
switch (newScreen)
{
case IntroScreen intro:

View File

@ -6,10 +6,19 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Logging;
using osu.Framework.Statistics;
using osu.Game.Beatmaps;
using osu.Game.Configuration;
using osu.Game.Database;
using osu.Game.Models;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays;
using osu.Game.Skinning;
using Sentry;
using Sentry.Protocol;
@ -24,8 +33,11 @@ namespace osu.Game.Utils
private readonly IDisposable? sentrySession;
private readonly OsuGame game;
public SentryLogger(OsuGame game)
{
this.game = game;
sentrySession = SentrySdk.Init(options =>
{
// Not setting the dsn will completely disable sentry.
@ -94,6 +106,45 @@ namespace osu.Game.Utils
{
Message = entry.Message,
Level = getSentryLevel(entry.Level),
}, scope =>
{
var beatmap = game.Dependencies.Get<IBindable<WorkingBeatmap>>().Value.BeatmapInfo;
scope.Contexts[@"config"] = new
{
Game = game.Dependencies.Get<OsuConfigManager>().GetLoggableState()
// TODO: add framework config here. needs some consideration on how to expose.
};
game.Dependencies.Get<RealmAccess>().Run(realm =>
{
scope.Contexts[@"realm"] = new
{
Counts = new
{
BeatmapSets = realm.All<BeatmapSetInfo>().Count(),
Beatmaps = realm.All<BeatmapInfo>().Count(),
Files = realm.All<RealmFile>().Count(),
Skins = realm.All<SkinInfo>().Count(),
}
};
});
scope.Contexts[@"global statistics"] = GlobalStatistics.GetStatistics()
.GroupBy(s => s.Group)
.ToDictionary(g => g.Key, items => items.ToDictionary(i => i.Name, g => g.DisplayValue));
scope.Contexts[@"beatmap"] = new
{
Name = beatmap.ToString(),
beatmap.OnlineID,
};
scope.Contexts[@"clocks"] = new
{
Audio = game.Dependencies.Get<MusicController>().CurrentTrack.CurrentTime,
Game = game.Clock.CurrentTime,
};
});
}
else