fune/toolkit/components/glean/docs/code_organization.md
Jan-Erik Rediger 8c943c30d0 Bug 1623300 - Add documentation about FOG code organization. r=chutten
Document the in-progress code layout in-tree

Differential Revision: https://phabricator.services.mozilla.com/D68544

--HG--
extra : moz-landing-system : lando
2020-03-31 08:24:42 +00:00

1.7 KiB

FOG code organization

.. notnote::

    Project FOG is currently being designed and implemented.
    This documentation is incomplete and may change significantly before FOG is usable inside mozilla-central.

Modules of Project FOG

The diagram shows the different modules of Project FOG.

FOG control

This module is the glue between Firefox and Glean.

  • The code lives in toolkit/components/glean/src.
  • It is written in Rust.
  • The crate is named fog.
  • It is not published to crates.io.
  • It is not consumed by other Rust crates inside mozilla-central.

This module is responsible for

  • collecting and assembling the client information
  • configuring Glean
  • watching the Firefox Telemetry data upload preference (datareporting.healthreport.uploadEnabled)
  • scheduling builtin pings
  • controling ping upload workers

It calls into glean_core to:

  • configure and initialize Glean
  • toggle upload_enabled
  • get upload tasks

FOG API

This module provides the user-facing API for Glean inside mozilla-central.

  • The code lives in toolkit/components/glean/api.
  • It is written in Rust.
  • The crate is named glean.
  • It is not published to crates.io.
  • It can be consumed by other Rust crates inside mozilla-central for their Glean usage.
  • It will provide a build task for glean_parser integration.

This module is responsible for

  • exposing a specific metric API in Rust
  • wrapping metric implementations for handling IPC
  • exposing FFI functionality to implement other language APIs on top

It calls into glean_core for:

  • metric types (including pings)
  • querying upload_enabled status.