Download

Basics

Tecken handles requests for symbols files. Tecken takes the request, figures out which bucket the file is in, and returns a redirect to that bucket. This allows us to use multiple buckets for symbols without requiring everyone to maintain lists of buckets.

For example, at the time of this writing doing a GET for https://symbols.mozilla.org/firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym will return a 302 Found redirect to https://s3-us-west-2.amazonaws.com/org.mozilla.crash-stats.symbols-public/v1/firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym.

In addition to finding symbols files and returning redirects, Tecken keeps track of which files ending with .pdb and .sym that it couldn’t find. These are known as “missing symbols”.

Try Builds

By default, when you request to download a symbol, Tecken will iterate through a list of available S3 configurations.

To download symbols that might be part of a Try build you have to pass an optional query string key try or you can prefix the URL with /try. For example:

$ curl --user-agent "example/1.0" https://symbols.mozilla.org/tried.pdb/HEX/tried.sym?try
...302 Found...

$ curl --user-agent "example/1.0" https://symbols.mozilla.org/try/tried.pdb/HEX/tried.sym
...302 Found...

If you specify that you’re requesting a try build, Tecken will look at all the S3 bucket locations as well as all the try locations in those S3 buckets.

Symbols from Try builds is always tried last! So if there’s a known symbol called foo.pdb/HEX/foo.sym and someone triggers a Try build (which uploads its symbols) with the exact same name (and build ID) and even if you use https://symbols.mozilla.org/foo.pdb/HEX/foo.sym?try the existing (non-Try build) symbol will be matched first.

Downloading API

HEAD /<DEBUG_FILENAME>/<DEBUG_ID>/<SYMBOL_FILE>

Determine whether the symbol file exists or not.

Request Headers
  • Debug

    if true, includes a Debug-Time header in the response.

    If Debug-Time is 0.0`: symbol file ends in an unsupported extension

  • User-Agent – please provide a unique user agent to make it easier for us to help you debug problems

Query Parameters
  • try – use try=1 to download Try symbols

  • _refresh – use _refresh=1 to force Tecken to look for the symbol file in the AWS S3 buckets and update the cache

Status Codes
GET /<DEBUG_FILENAME>/<DEBUG_ID>/<SYMBOL_FILE>

Download a symbol file.

Request Headers
  • Debug

    if true, includes a Debug-Time header in the response.

    If Debug-Time is 0.0`: symbol file ends in an unsupported extension

  • User-Agent – please provide a unique user agent to make it easier for us to help you debug problems

Query Parameters
  • try – use try=1 to download Try symbols

  • _refresh – use _refresh=1 to force Tecken to look for the symbol file in the AWS S3 buckets and update the cache

Status Codes
HEAD /try/<DEBUG_FILENAME>/<DEBUG_ID>/<SYMBOL_FILE>

Same as HEAD /<DEBUG_FILENAME>/<DEBUG_ID>/<SYMBOL_FILE>, but for try symbols.

GET /try/<DEBUG_FILENAME>/<DEBUG_ID>/<SYMBOL_FILE>

Same as GET /<DEBUG_FILENAME>/<DEBUG_ID>/<SYMBOL_FILE>, but for try symbols.

Missing symbols APIs

GET /missingsymbols.csv

Download missing symbol information as a CSV.

Format:

debug_file,debug_id,code_file,code_id
Request Headers
  • User-Agent – please provide a unique user agent to make it easier for us to help you debug problems

Status Codes
GET /missingsymbols/

Download missing symbol information.

For example:

curl --user-agent "example/1.0" \
   'https://symbols.mozilla.org/missingsymbols/?filename=libxul'
Request Headers
  • User-Agent – please provide a unique user agent to make it easier for us to help you debug problems

Query Parameters
  • symbol – (optional) the symbol to filter on by substring match

  • debugid – (optional) the debugid to filter on by substring match

  • filename – (optional) the filename to filter on by substring match

  • code_file – (optional) the code_file to filter on by substring match

  • code_id – (optional) the code_id to filter on by substring match

  • modified_at

    (optional) comma-separated date filters for modified_at timestamp

    Valid comparisons: <=, >=, =, <, >

    Example: modified_at=>=2020-09-01,<2020-09-02 (url-encoded modified_at=%3E%3D=2020-09-01%2C%3C2020-09-02)

  • created_at

    (optional) comma-separated date filters for created_at timestamp

    Valid comparisons: <=, >=, =, <, >

    Example: created_at=>=2020-09-01,<2020-09-02 (url-encoded created_at=%3E%3D=2020-09-01%2C%3C2020-09-02)

  • sort – (optional) the field to sort by; defaults to modified_at

  • reverse – (optional) if you want the sort reversed; defaults to false

Response Headers
Response JSON Object
  • order_by (obj) –

    sort specification

    sort (str)

    the sort field

    reverse (bool)

    whether or not it’s reversed

  • batch_size (int) – the number of records in a page

  • page (int) – the page being returned

  • total_count (int) – the total number of records in the query

  • records (array) –

    the list of records where each record consists of

    id (int)

    the record id

    symbol (str)

    the debug symbol

    debugid (str)

    the debug id

    filename (str)

    the filename

    code_file (str)

    the code_file or null

    code_id (str)

    the code_id or null

    count (int)

    how many times this symbol file was requested

    modified_at (timestamp)

    the last time this symbol file was requested; iso8601 in UTC; YYYY-MM-DDThh:mm:ss.sssZ

    created_at (timestamp)

    the first time this symbol file was requested; iso8601 in UTC; YYYY-MM-DDThh:mm:ss.sssZ

Status Codes