Skip to main content

Technical Dashboard

Monitor game performance, track errors and crashes, and maintain a healthy player experience.


Overview

The Technical Dashboard provides real-time visibility into your game's health:

  • Health Score -- Composite metric based on stability and performance
  • System Uptime -- Availability across your player base
  • Performance Score -- FPS and memory efficiency
  • Error Rates and Trends -- Error frequency over time
  • Crash Rates and Trends -- Crash frequency and resolution tracking
  • Error Analysis -- Patterns, categories, and root-cause grouping

Required Events

EventSDK MethodAuto-TrackedPriority
FPS samplesGRMetricsCollectorYesRequired
Memory samplesGRMetricsCollectorYesRequired
log (errors)TrackLog()NoRecommended
log (crashes)TrackLog()NoRecommended

FPS and memory are tracked automatically by the GRMetricsCollector component, which the SDK creates on successful initialization. Error and crash logging requires manual instrumentation.


Event Implementation

Performance Metrics (Automatic)

The GRMetricsCollector MonoBehaviour is auto-created as a hidden, persistent GameObject after Initialize() succeeds. It records:

  • FPS -- Every frame via GameRebellion.RecordFrame(fps).
  • Memory -- Sampled locally at a configurable interval (default 0.5s) via GameRebellion.RecordMemory(memoryMB). Metrics are sent to the server once per 30 seconds (controlled by the batch flush interval).

You can customize its behavior by adding it manually to a GameObject:

var collector = gameObject.AddComponent<GRMetricsCollector>();
collector.trackFPS = true;
collector.trackMemory = true;
collector.memorySampleInterval = 0.5f; // seconds between memory samples
collector.logMetrics = false; // set true to print metrics to console
collector.logInterval = 5f; // seconds between console logs

Error Tracking

Track application errors to power the Error Timeline and Error Analysis panels.

using GameRebellionSdk.Unity;

// Network error
GameRebellion.TrackLog(new GrLogEvent
{
Type = "error",
Category = "network",
Message = "API request failed: 503 Service Unavailable",
ErrorCode = "HTTP_503",
FeatureName = "leaderboard",
MethodName = "FetchLeaderboard",
IsUserAffected = true
});

// Gameplay error
GameRebellion.TrackLog(new GrLogEvent
{
Type = "error",
Category = "gameplay",
Message = "Invalid item reference in inventory",
ErrorCode = "ITEM_NOT_FOUND",
ErrorDomain = "inventory_system",
FeatureName = "inventory"
});

Crash Tracking

Log unhandled exceptions and crashes for the Crash Timeline panel.

// Hook into Unity's unhandled exception handler
Application.logMessageReceived += (message, stackTrace, type) =>
{
if (type == LogType.Exception)
{
GameRebellion.TrackLog(new GrLogEvent
{
Type = "crash",
Category = "unhandled_exception",
Message = message,
StackTrace = stackTrace,
ExceptionType = "UnhandledException",
IsUserAffected = true
});
}
};

Warning / Debug Logs

For non-critical issues that you want to track patterns on:

GameRebellion.TrackLog(new GrLogEvent
{
Type = "warning",
Category = "performance",
Message = "Frame drop detected: 8 FPS for 2 seconds",
FeatureName = "rendering"
});

GrLogEvent Fields

FieldTypeRequiredDescription
TypestringYesSeverity: "error", "crash", "warning", "info", "debug".
CategorystringNoGrouping (e.g., "network", "gameplay", "rendering").
MessagestringNoHuman-readable description.
DescriptionstringNoAdditional context.
ErrorCodestringNoMachine-readable error code.
ErrorDomainstringNoSystem or module where the error originated.
FeatureNamestringNoFeature affected by the issue.
StackTracestringNoStack trace for debugging.
ExceptionTypestringNoException class name.
MethodNamestringNoMethod where the error occurred.
LineNumberdouble?NoSource line number.
ThreadIdstringNoThread identifier.
IsUserAffectedbool?NoWhether the issue impacted the player's experience.

Metrics Unlocked

MetricDescriptionEvent Source
Health ScoreComposite stability metricAll technical events
System UptimeAvailability percentageSessions + crash data
Performance ScoreFPS and memory efficiencyFPS + memory samples
Error RateErrors per sessionlog (type: error)
Error TimelineError frequency over timelog (type: error)
Error AnalysisGrouped by category, code, featurelog (type: error)
Crash RateCrashes per sessionlog (type: crash)
Crash TimelineCrash frequency over timelog (type: crash)
Resolution TimeTime to fix issues (tracked over deploys)log events
Technical IssuesActive issues listAll log events

Best Practices

  • Categorize consistently. Use a fixed set of categories ("network", "gameplay", "rendering", "audio", "storage") so the Error Analysis panel can group issues meaningfully.
  • Include error codes. Machine-readable codes ("HTTP_503", "ITEM_NOT_FOUND") enable automated grouping and alerting.
  • Track user impact. Set IsUserAffected = true when the error degrades the player experience. This helps prioritize fixes.
  • Hook into Unity's exception handler. The Application.logMessageReceived callback captures unhandled exceptions that would otherwise go untracked.
  • Avoid logging high-frequency debug events in production. Use Type = "debug" sparingly to prevent noise in your dashboard.

Implementation Checklist

  • SDK initialized (FPS + memory tracked automatically)
  • TrackLog() added for caught errors with category and error codes
  • Unhandled exception handler connected via Application.logMessageReceived
  • Consistent category and error code naming convention established