This is a documentation for Board Game Arena: play board games online !

Production issues reporting

From Board Game Arena
Redirect page
Jump to navigation Jump to search

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:

Error reporting.png

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 list.png

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.

Issue details.png

This page is separated into several blocks.

Main information

Issue main informations.png

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

Issue culprit.png This summarizes where and the issue happens, with a source file position and a release.

Stack trace

Issue stack trace.png

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

Issue request details.png This block contains details on the request, namely:

  • URL: complete URL of the request, but without the query string
  • Method: could be GET or POST
  • Query: all query parameters if any
Tags

Issue tags.png

List any relevant tags regarding this event.

Statistics

Issue statistics - histogram.png

This block contains an histogram of the issue events depending, either during last day or last month. Every bar is clickable.

Issue statistics.png

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

Issue events list.png

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.