Files
sbox-public/engine/Launcher/CrashReporter/Program.cs
Matt Stevens 1b80ecd2e9 Managed CrashReporter (#3595)
Remove C++ crashreporter and reimplement in C#, add various session id tags and send payload to our own API
2025-12-10 16:32:17 +00:00

58 lines
1.4 KiB
C#

using System.Diagnostics;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
namespace CrashReporter;
class Program
{
static async Task<int> Main( string[] args )
{
if ( args.Length < 1 )
{
Console.WriteLine( "Usage: CrashReporter.exe <path to envelope>" );
return 1;
}
using var stream = File.OpenRead( args[0] );
var envelope = await Envelope.FromFileStreamAsync( stream );
var dsn = envelope.TryGetDsn();
var event_id = envelope.TryGetEventId();
// Submit to Sentry
await SentryClient.SubmitEnvelopeAsync( dsn!, envelope );
// Submit to our own API
var sentryEvent = envelope.TryGetEvent()?.TryParseAsJson();
if ( sentryEvent is not null )
{
var tags = sentryEvent["tags"];
var payload = new
{
sentry_event_id = event_id,
timestamp = sentryEvent["timestamp"],
version = sentryEvent["release"],
session_id = tags?["session_id"],
activity_session_id = tags?["activity_session_id"],
launch_guid = tags?["launch_guid"],
gpu = tags?["gpu"],
cpu = tags?["cpu"],
mode = tags?["mode"],
};
// Submit to our API
using var client = new HttpClient();
await client.PostAsJsonAsync( "https://services.facepunch.com/sbox/event/crash/1/", payload );
}
// Open browser to crash report page
Process.Start( new ProcessStartInfo( $"https://sbox.game/crashes/{event_id}" ) { UseShellExecute = true } );
return 0;
}
}