Build Telemetry

The build system (specifically, all the build tooling hooked up to ./mach) has been configured to collect metrics data points and errors for various build system actions. This data helps drive team planning for the build team and ensure that resources are applied to build processes that need them most. You can opt-in to send telemetry to Mozilla during ./mach bootstrap or by editing your .mozbuild/machrc file.

Telemetry

The build telemetry schema can be found in-tree under python/mozbuild/mozbuild/telemetry.py in Voluptuous schema format. You can use the export_telemetry_schema.py script in that same directory to get the schema in JSON-schema format. Details of the schema are specified below:

type

object

Required

argv, build_opts, client_id, command, duration_ms, success, system, time

Properties: argv, build_opts, client_id, command, duration_ms, exception, file_types_changed, success, system, time

argv

Full mach commandline. If the commandline contains absolute paths they will be sanitized.

type

array

Every element of argv is:

type

string

build_opts

Selected build options

type

object

Properties: artifact, ccache, compiler, debug, icecream, opt, sccache

artifact

true if –enable-artifact-builds

type

boolean

ccache

true if ccache is in use (–with-ccache)

type

boolean

compiler

The compiler type in use (CC_TYPE)

Allowed values:

  • clang

  • clang-cl

  • gcc

  • msvc

debug

true if build is debug (–enable-debug)

type

boolean

icecream

true if icecream in use

type

boolean

opt

true if build is optimized (–enable-optimize)

type

boolean

sccache

true if ccache in use is sccache

type

boolean

build_attrs

Selected runtime attributes of the build

type

object

Properties: cpu_percent, clobber

cpu_percent

cpu utilization observed during the build

type

number

clobber

true if the build was a clobber/full build

type

boolean

client_id

A UUID to uniquely identify a client

type

string

command

The mach command that was invoked

type

string

duration_ms

Command duration in milliseconds

type

number

exception

If a Python exception was encountered during the execution of the command, this value contains the result of calling repr on the exception object.

type

string

file_types_changed

This array contains a list of objects with {ext, count} properties giving the count of files changed since the last invocation grouped by file type

type

array

Every element of file_types_changed is:

type

object

Required

count, ext

Properties: count, ext

count

Count of changed files with this extension

type

number

ext

File extension

type

string

success

true if the command succeeded

type

boolean

system

type

object

Required

os

Properties: cpu_brand, drive_is_ssd, logical_cores, memory_gb, os, physical_cores, virtual_machine

cpu_brand

CPU brand string from CPUID

type

string

drive_is_ssd

true if the source directory is on a solid-state disk

type

boolean

logical_cores

Number of logical CPU cores present

type

number

memory_gb

System memory in GB

type

number

os

Operating system

Allowed values:

  • windows

  • macos

  • linux

  • other

physical_cores

Number of physical CPU cores present

type

number

virtual_machine

true if the OS appears to be running in a virtual machine

type

boolean

time

Time at which this event happened

type

string

format

date-time

Error Reporting

./mach uses Sentry to automatically report errors to our issue-tracking dashboard.

Information captured

Sentry automatically collects useful information surrounding the error to help the build team discover what caused the issue and how to reproduce it. This information includes:

  • Environmental information, such as the computer name, timestamp, Python runtime and Python module versions

  • Process arguments

  • The stack trace of the error, including contextual information:

    • The data contained in the exception

    • Functions and their respective source file names, line numbers

    • Variables in each frame

  • Sentry “Breadcrumbs”, which are important events that have happened which help contextualize the error, such as:

    • An HTTP request has occurred

    • A subprocess has been spawned

    • Logging has occurred

Note that file paths may be captured, which include absolute paths (potentially including usernames).