diff options
Diffstat (limited to 'build/docs/telemetry.rst')
-rw-r--r-- | build/docs/telemetry.rst | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/build/docs/telemetry.rst b/build/docs/telemetry.rst new file mode 100644 index 0000000000..a036cd1871 --- /dev/null +++ b/build/docs/telemetry.rst @@ -0,0 +1,393 @@ +.. _buildtelemetry: + +=============== +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: + +.. _telemetry.json#/: + +:type: ``object`` + +:Required: :ref:`telemetry.json#/properties/argv`, :ref:`telemetry.json#/properties/build_opts`, :ref:`telemetry.json#/properties/client_id`, :ref:`telemetry.json#/properties/command`, :ref:`telemetry.json#/properties/duration_ms`, :ref:`telemetry.json#/properties/success`, :ref:`telemetry.json#/properties/system`, :ref:`telemetry.json#/properties/time` + +**Properties:** :ref:`telemetry.json#/properties/argv`, :ref:`telemetry.json#/properties/build_opts`, :ref:`telemetry.json#/properties/client_id`, :ref:`telemetry.json#/properties/command`, :ref:`telemetry.json#/properties/duration_ms`, :ref:`telemetry.json#/properties/exception`, :ref:`telemetry.json#/properties/file_types_changed`, :ref:`telemetry.json#/properties/success`, :ref:`telemetry.json#/properties/system`, :ref:`telemetry.json#/properties/time` + + +.. _telemetry.json#/properties/argv: + +argv +++++ + +Full mach commandline. If the commandline contains absolute paths they will be sanitized. + +:type: ``array`` + +.. container:: sub-title + + Every element of **argv** is: + +:type: ``string`` + + +.. _telemetry.json#/properties/build_opts: + +build_opts +++++++++++ + +Selected build options + +:type: ``object`` + +**Properties:** :ref:`telemetry.json#/properties/build_opts/properties/artifact`, :ref:`telemetry.json#/properties/build_opts/properties/ccache`, :ref:`telemetry.json#/properties/build_opts/properties/compiler`, :ref:`telemetry.json#/properties/build_opts/properties/debug`, :ref:`telemetry.json#/properties/build_opts/properties/icecream`, :ref:`telemetry.json#/properties/build_opts/properties/opt`, :ref:`telemetry.json#/properties/build_opts/properties/sccache` + + +.. _telemetry.json#/properties/build_opts/properties/artifact: + +artifact +######## + +true if --enable-artifact-builds + +:type: ``boolean`` + + +.. _telemetry.json#/properties/build_opts/properties/ccache: + +ccache +###### + +true if ccache is in use (--with-ccache) + +:type: ``boolean`` + + +.. _telemetry.json#/properties/build_opts/properties/compiler: + +compiler +######## + +The compiler type in use (CC_TYPE) + +**Allowed values:** + +- clang +- clang-cl +- gcc +- msvc + + +.. _telemetry.json#/properties/build_opts/properties/debug: + +debug +##### + +true if build is debug (--enable-debug) + +:type: ``boolean`` + + +.. _telemetry.json#/properties/build_opts/properties/icecream: + +icecream +######## + +true if icecream in use + +:type: ``boolean`` + + +.. _telemetry.json#/properties/build_opts/properties/opt: + +opt +### + +true if build is optimized (--enable-optimize) + +:type: ``boolean`` + + +.. _telemetry.json#/properties/build_opts/properties/sccache: + +sccache +####### + +true if ccache in use is sccache + +:type: ``boolean`` + + +.. _telemetry.json#/properties/build_attrs: + +build_attrs ++++++++++++ + +Selected runtime attributes of the build + +:type: ``object`` + +**Properties:** :ref:`telemetry.json#/properties/build_attrs/properties/cpu_percent`, :ref:`telemetry.json#/properties/build_attrs/properties/clobber` + +.. _telemetry.json#/properties/build_attrs/properties/cpu_percent: + +cpu_percent +########### + +cpu utilization observed during the build + +:type: ``number`` + +.. _telemetry.json#/properties/build_attrs/properties/clobber: + +clobber +####### + +true if the build was a clobber/full build + +:type: ``boolean`` + + +.. _telemetry.json#/properties/client_id: + +client_id ++++++++++ + +A UUID to uniquely identify a client + +:type: ``string`` + + +.. _telemetry.json#/properties/command: + +command ++++++++ + +The mach command that was invoked + +:type: ``string`` + + +.. _telemetry.json#/properties/duration_ms: + +duration_ms ++++++++++++ + +Command duration in milliseconds + +:type: ``number`` + + +.. _telemetry.json#/properties/exception: + +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`` + + +.. _telemetry.json#/properties/file_types_changed: + +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`` + +.. container:: sub-title + + Every element of **file_types_changed** is: + +:type: ``object`` + +:Required: :ref:`telemetry.json#/properties/file_types_changed/items/properties/count`, :ref:`telemetry.json#/properties/file_types_changed/items/properties/ext` + +**Properties:** :ref:`telemetry.json#/properties/file_types_changed/items/properties/count`, :ref:`telemetry.json#/properties/file_types_changed/items/properties/ext` + + +.. _telemetry.json#/properties/file_types_changed/items/properties/count: + +count +##### + +Count of changed files with this extension + +:type: ``number`` + + +.. _telemetry.json#/properties/file_types_changed/items/properties/ext: + +ext +### + +File extension + +:type: ``string`` + + +.. _telemetry.json#/properties/success: + +success ++++++++ + +true if the command succeeded + +:type: ``boolean`` + + +.. _telemetry.json#/properties/system: + +system +++++++ + +:type: ``object`` + +:Required: :ref:`telemetry.json#/properties/system/properties/os` + +**Properties:** :ref:`telemetry.json#/properties/system/properties/cpu_brand`, :ref:`telemetry.json#/properties/system/properties/drive_is_ssd`, :ref:`telemetry.json#/properties/system/properties/logical_cores`, :ref:`telemetry.json#/properties/system/properties/memory_gb`, :ref:`telemetry.json#/properties/system/properties/os`, :ref:`telemetry.json#/properties/system/properties/physical_cores`, :ref:`telemetry.json#/properties/system/properties/virtual_machine` + + +.. _telemetry.json#/properties/system/properties/cpu_brand: + +cpu_brand +######### + +CPU brand string from CPUID + +:type: ``string`` + + +.. _telemetry.json#/properties/system/properties/drive_is_ssd: + +drive_is_ssd +############ + +true if the source directory is on a solid-state disk + +:type: ``boolean`` + + +.. _telemetry.json#/properties/system/properties/logical_cores: + +logical_cores +############# + +Number of logical CPU cores present + +:type: ``number`` + + +.. _telemetry.json#/properties/system/properties/memory_gb: + +memory_gb +######### + +System memory in GB + +:type: ``number`` + + +.. _telemetry.json#/properties/system/properties/os: + +os +## + +Operating system + +**Allowed values:** + +- windows +- macos +- linux +- other + + +.. _telemetry.json#/properties/system/properties/physical_cores: + +physical_cores +############## + +Number of physical CPU cores present + +:type: ``number`` + + +.. _telemetry.json#/properties/system/properties/virtual_machine: + +virtual_machine +############### + +true if the OS appears to be running in a virtual machine + +:type: ``boolean`` + + +.. _telemetry.json#/properties/time: + +time +++++ + +Time at which this event happened + +:type: ``string`` + +:format: ``date-time`` + + +Glean Telemetry +=============== + +In addition to the existing build-specific telemetry, Mozbuild is also reporting data using +`Glean <https://mozilla.github.io/glean/>`_ via :ref:`mach_telemetry`. +The metrics collected are documented :ref:`here<metrics>`. +As Python 2 is phased out, the old telemetry will be replaced by the new Glean implementation. + + +Error Reporting +=============== + +``./mach`` uses `Sentry <https://sentry.io/welcome/>`_ +to automatically report errors to `our issue-tracking dashboard +<https://sentry.prod.mozaws.net/operations/mach/>`_. + +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" <https://docs.sentry.io/platforms/python/default-integrations/>`_, + 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). |