This is a documentation for Board Game Arena: play board games online !
Production issues reporting
Redirect to:
BGA implemented several production issues reporting tools:
- Syntax errors reporting
- Unexpected errors reporting
- Backend & frontend issues reporting
All of these are available at the bottom of your game studio page. Access your game studio page (for instance: https://studio.boardgamearena.com/studiogame?game=xxx) and scroll to the "Errors in production" block:
Syntax errors reporting
This is the simplest reporting tool. It only reports PHP syntax errors. When clicking on the button, you will be redirected to a page that lists all game servers and will display any syntax error. Any of these is a fatal error and should be addressed with a new release.
Unexpected errors reporting
Same as the previous tool. It redirects to another report page that shows recent PHP (backend) errors. Only an error message with a PHP stack trace is shown for each message. For instance:
18/05 20:07:17 [error] [TXXX] [A.B.C.D] [XXX/YYY] Error (1213) while processing SQL request: Deadlock found when trying to get lock; try restarting transaction - Request: SELECT global_id, global_value FROM global WHERE 1
18/05 20:07:17 [error] [TXXXX] [A.B.C.D] [XXX/YYY] Unexpected exception: mysql_deadlock_restart_transaction (BGA service error 1747591637)
#0 /var/tournoi/release/tournoi-250505-1448-gs/www/Bga/GameFramework/Old/APP_DbObject.php(34): Bga\Services\Db->query('...')
#1 /var/tournoi/release/tournoi-250505-1448-gs/www/Bga/GameFramework/TableInfos.php(125): Bga\GameFramework\Old\APP_DbObject::DbQuery('...')
#2 /var/tournoi/release/tournoi-250505-1448-gs/www/Bga/GameFramework/TableInfos.php(91): Bga\GameFramework\TableInfos->getGlobalsFromDB(false)
#3 /var/tournoi/release/tournoi-250505-1448-gs/www/Bga/GameFramework/TableInfos.php(69): Bga\GameFramework\TableInfos->db_load(false)
#4 /var/tournoi/release/tournoi-250505-1448-gs/www/Bga/GameFramework/GameAction.php(80): Bga\GameFramework\TableInfos->get(false)
#5 /var/tournoi/release/tournoi-250505-1448-gs/www/Bga/GameFramework/GameAction.php(31): Bga\GameFramework\GameAction->initGameTableObjects()
#6 /var/tournoi/release/tournoi-250505-1448-gs/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php(129): Bga\GameFramework\GameAction->__construct()
#7 /var/tournoi/release/tournoi-250505-1448-gs/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php(56): DI\Definition\Resolver\ObjectCreator->createInstance(Object(DI\Definition\ObjectDefinition), Array)
#8 /var/tournoi/release/tournoi-250505-1448-gs/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php(62): DI\Definition\Resolver\ObjectCreator->resolve(Object(DI\Definition\ObjectDefinition), Array)
#9 /var/tournoi/release/tournoi-250505-1448-gs/vendor/php-di/php-di/src/Container.php(354): DI\Definition\Resolver\ResolverDispatcher->resolve(Object(DI\Definition\ObjectDefinition), Array)
#10 /var/tournoi/release/tournoi-250505-1448-gs/vendor/php-di/php-di/src/Container.php(184): DI\Container->resolveDefinition(Object(DI\Definition\ObjectDefinition), Array)
#11 /var/tournoi/release/tournoi-250505-1448-gs/www/include/webActionCore.inc.php(201): DI\Container->make('...')
#12 /var/tournoi/release/tournoi-250505-1448-gs/www/index.php(262): launchWebAction('...', '...', '...', false, false, NULL, true, false)
#13 {main}
Errors are unformatted and no statistics whatsoever are made. This tools is pretty raw but very low level without any filtering.
Backend & frontend issues reporting
This is the next generation reporting tool. It is based on Sentry, a tool that aggregates any frontend and backend errors encountered by users. It allows modern statistics and gives more context.
When clicking on this button, you will be redirect to another interface that allows basic Sentry querying.
Sentry concepts
When an error or a warning is caught, information is sent to Sentry in the form of an event, which is processed. Sentry then as the following concepts:
- Event: an error or warning that triggered either in the user browser or in one of BGA servers
- Issue: all events are attached to an issue. Sentry figures out how to merge then depending on the place the event has taken place in the code. Hence, false positive could happen
- Issue ID: a unique value assigned to an issue.
- Project: a software module. We currently have two projects that are exposed to the studio developers: gameserver-js (frontend) and gameserver (backend)
- Tags: metadata associated to an event, like browser version, user ID, etc. They are used to provide statistics in the issues page.
- Release: a release is a package name and a version name. It helps knowing when an issue appears, then narrowing down its cause. There are two releases set on BGA: mainsite release (our code) and game release (your code)
Views
The sentry viewer offer several views.
Issues list view
This is the landing view, it shows an issue list after a brief query on the Sentry server.
It is possible to filter out the project, depending on when you want to obtain frontend, backend or both errors (left red rectangle on the screenshot).
In the event of more than 25 issues, it is possible to paginate over them (right red rectangle). Ordering can also be changed, it can be:
- number of events: the more, the more impactful this issue is.
- last seen: last time an event has been added to this issue. The more ancient, the more likely it is fixed.
- first seen: first time an event has been recorded into this issue. This is valuable to understand when a bug was introduced (for instance, if that matches a release date)
- trend: Sentry "magic" ordering to determine which issues are currently gaining momentum.
Issues contain the following fields:
- ID: Sentry internal ID regarding this event. It is unique and starts with the project name. Hence, "
GAMESERVER-JS-XXX" is an error related to frontend (javascript) - Type: error, warning or sometimes, it contains the name of the exceptions raised
- Description: short description, normally the same error as the user experienced if that was not a silent error
- Seen: first and last times this issue has been encountered
- Status: number of events (🏴) and users (👤) affected by this.
Please note that we tried hard to limit false positives into this list, but, mainly for frontend errors, some errors can be "ours" and not your code. This can be guessed in the next screen if the stack is empty.
Issue detail view
This view shows the details of an issue. As every "specific" data is attached to an event and not an issue, this view chooses by default an event (latest one) and uses its data to fill in some fields (for instance, tags). If you navigate between events (see next view), this data is subjected to change.
This page is separated into several blocks.
Main information
This contains the main information of the issue, as seen in issues list:
- Type of error (warning, error, exception name, etc.)
- Description of error
- Error ID
- More detailed information and counters:
- Priority: Sentry estimate of the criticality of this issue
- Count: number of events
- User count: approximate number of users impacted by this issue
- First seen
- Last seen
Culprit
This summarizes where and the issue happens, with a source file position and a release.
Stack trace
This block contains information particularly useful to debug an issue. By default, only stack trace elements pertaining to the game code are shown. It is possible for frontend errors to toggle this behavior and show BGA frontend stack trace elements.
Every element of the stack trace is clickable to see a hint on exactly when the execution was. Please note that some of this code is minified and hence is not very readable. However, it can still provide useful information. We plan to perhaps unminify this code later.
Request
This block contains details on the request, namely:
- URL: complete URL of the request, but without the query string
- Method: could be
GETorPOST - Query: all query parameters if any
Tags
List any relevant tags regarding this event.
Statistics
This block contains an histogram of the issue events depending, either during last day or last month. Every bar is clickable.
Then, we have donuts-like statistics with a breakdown of the first 10 occurrences for:
- browsers
- device family
- OSes
- users
- tables
The more a stats impacts a browser, user or device brand, the more it is suspect that the issue is specific to them.
Events list view
When clicking on the "Other events" tab, you will see the following view, which allows you to inspect a specific event. Usually, it is not needed since default event provides enough context, but it can still be used to compare several events.