probeinfo_api.yaml (1,067 lines of code) (raw):

--- # This file is used both to generate API docs and as the source for schema # definitions. Note that OpenAPI has a concept of component schemas that is # very similar to, but not quite JSON Schema. We use a standard jsonschema # validation library in this codebase, so we need to be careful to keep the # schema definitions here to the subset supported by both JSON schema and # OpenAPI. There are some comments below to describe the few places where # that becomes an issue. # Docs for supported keywords: # https://swagger.io/docs/specification/data-models/keywords/ # Docs for ReDoc-specific keywords (x-*): # https://github.com/Redocly/redoc#configuration openapi: "3.0.3" info: title: "Probe-Info Service API" description: | Mozilla's [probe-scraper machinery](https://github.com/mozilla/probe-scraper) stores its output as JSON files in S3, exposed to the web under probeinfo.telemetry.mozilla.org. These API docs are automatically generated from the schema definitions in probe-scraper. servers: - url: https://probeinfo.telemetry.mozilla.org tags: - name: library x-displayName: The repositories.yaml Library Format description: | <SchemaDefinition schemaRef="#/components/schemas/LibraryYaml" /> - name: application x-displayName: The repositories.yaml Application Format description: | <SchemaDefinition schemaRef="#/components/schemas/ApplicationYaml" /> - name: telemetry x-displayName: v1 Legacy telemetry endpoints - name: v1 x-displayName: v1 Glean probeinfo endpoints - name: v2 x-displayName: v2 Glean probeinfo endpoints description: | **⚠** The v2 API is in-development and subject to change without notice. **Do not** depend on it in production! x-tagGroups: - name: Input Formats tags: - library - application - name: API tags: - telemetry - v1 - v2 paths: /firefox/general: get: summary: "Telemetry scraping general properties" tags: - telemetry description: | Provides general properties related to the scraping process. operationId: "getGeneral" responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/GeneralFile" /firefox/revisions: get: summary: "Revision hashes listing" tags: - telemetry description: | Contains the revision hashes of the changesets for the probe files that were scraped. These hashes are mapped to a human-readable version string. operationId: "getGeneral" responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/RevisionsFile" example: $ref: "#/components/examples/RevisionsFile" /firefox/{channel}/main/all_probes: get: summary: "Probe listing" tags: - telemetry description: | Refer to the [Telemetry data collection documentation](https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/collection/index.html) for a detailed explanation of the field information reported for each probe (e.g. `cpp_guard`). operationId: "getMetrics" parameters: - name: channel in: path description: Firefox application channel required: true schema: type: string responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/TelemetryProbesFile" example: $ref: "#/components/examples/TelemetryProbesFile" /glean/{v1_name}/general: get: summary: "Glean repo general properties" tags: - v1 description: | Provides general properties related to the scraping process. operationId: "getGeneral" parameters: - name: v1_name in: path description: v1_name from repositories.yaml required: true schema: type: string responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/GeneralFile" /glean/{v1_name}/metrics: get: summary: "Glean repo metrics" tags: - v1 description: "" operationId: "getMetrics" parameters: - name: v1_name in: path description: v1_name from repositories.yaml required: true schema: type: string responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/GleanMetricsFile" example: $ref: "#/components/examples/GleanMetricsFile" /glean/{v1_name}/dependencies: get: summary: "Glean repo dependencies" tags: - v1 description: | Provides information about the dependencies of an application. Each entry in the top-level object represents a dependency of the application. operationId: "getDependencies" parameters: - name: v1_name in: path description: v1_name from repositories.yaml required: true schema: type: string responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/DependenciesFile" example: $ref: "#/components/examples/DependenciesFile" /glean/repositories: get: summary: "List Glean repositories" tags: - v1 description: "Includes both applications and libraries" operationId: "getRepos" responses: "200": description: "successful operation" content: application/json: schema: $ref: "#/components/schemas/RepositoriesV1" /v2/glean/app-listings: get: summary: "v2 Glean app listings" tags: - v2 description: | Flattened view of all Glean app listings (one entry per `app_id`). No libraries are included, and this will eventually link to new v2 per-app endpoints that include information pulled from dependencies. **⚠** The v2 API is in-development and subject to change without notice. **Do not** depend on it in production! operationId: "getAppListings" responses: "200": description: "successful operation" content: application/json: schema: type: array items: $ref: "#/components/schemas/AppListing" /v2/glean/library-variants: get: summary: "v2 Glean library variants" tags: - v2 description: | Flattened view of all Glean library variant (one entry per `dependency_name`). **⚠** The v2 API is in-development and subject to change without notice. **Do not** depend on it in production! operationId: "getLibraryVariants" responses: "200": description: "successful operation" content: application/json: schema: type: array items: $ref: "#/components/schemas/LibraryVariant" components: schemas: RepositoriesYamlV1: type: object # OpenAPI validation does not support propertyNames, so we relax this. # But we validate these names before downgrading to the v1 format anyway. # propertyNames: # pattern: "^[a-z][a-z0-9-]{0,29}$" additionalProperties: type: object additionalProperties: false required: - app_id - description - url - notification_emails properties: app_id: type: string pattern: "^[a-z][a-z-]{0,1023}$" description: $ref: "#/components/schemas/AppDescription" channel: $ref: "#/components/schemas/AppChannel" deprecated: $ref: "#/components/schemas/DeprecatedBool" notification_emails: $ref: "#/components/schemas/NotificationEmails" url: $ref: "#/components/schemas/RepoUrl" branch: $ref: "#/components/schemas/RepoBranch" tag_files: $ref: "#/components/schemas/TagFiles" metrics_files: $ref: "#/components/schemas/MetricsFiles" ping_files: $ref: "#/components/schemas/PingFiles" dependencies: $ref: "#/components/schemas/Dependencies" library_names: $ref: "#/components/schemas/LibraryNames" prototype: $ref: "#/components/schemas/PrototypeBool" moz_pipeline_metadata_defaults: $ref: "#/components/schemas/MozPipelineMetadataDefaults" moz_pipeline_metadata: $ref: "#/components/schemas/MozPipelineMetadata" skip_documentation: $ref: "#/components/schemas/SkipDocumentationBool" RepositoriesV1: type: array items: type: object additionalProperties: false properties: name: $ref: "#/components/schemas/V1Name" app_id: type: string pattern: "^[a-z][a-z-]{0,1023}$" description: type: string channel: $ref: "#/components/schemas/AppChannel" deprecated: $ref: "#/components/schemas/DeprecatedBool" notification_emails: $ref: "#/components/schemas/NotificationEmails" url: $ref: "#/components/schemas/RepoUrl" branch: $ref: "#/components/schemas/RepoBranch" tag_files: $ref: "#/components/schemas/TagFiles" metrics_files: $ref: "#/components/schemas/MetricsFiles" ping_files: $ref: "#/components/schemas/PingFiles" dependencies: $ref: "#/components/schemas/Dependencies" library_names: $ref: "#/components/schemas/LibraryNames" prototype: $ref: "#/components/schemas/PrototypeBool" moz_pipeline_metadata_defaults: $ref: "#/components/schemas/MozPipelineMetadataDefaults" moz_pipeline_metadata: $ref: "#/components/schemas/MozPipelineMetadata" skip_documentation: $ref: "#/components/schemas/SkipDocumentationBool" RepositoriesYamlV2: type: object additionalProperties: false properties: version: type: string description: Used to distinguish from the legacy repositories.yaml format enum: - "2" libraries: type: array description: Repositories that define Glean dependencies items: $ref: "#/components/schemas/LibraryYaml" applications: type: array description: Repositories that define Glean applications items: $ref: "#/components/schemas/ApplicationYaml" ApplicationYaml: type: object additionalProperties: false required: - app_name - canonical_app_name - app_description - url - channels properties: app_name: $ref: "#/components/schemas/AppName" canonical_app_name: $ref: "#/components/schemas/CanonicalAppName" app_description: $ref: "#/components/schemas/AppDescription" notification_emails: $ref: "#/components/schemas/NotificationEmails" url: $ref: "#/components/schemas/RepoUrl" branch: $ref: "#/components/schemas/RepoBranch" tag_files: $ref: "#/components/schemas/TagFiles" metrics_files: $ref: "#/components/schemas/MetricsFiles" ping_files: $ref: "#/components/schemas/PingFiles" dependencies: $ref: "#/components/schemas/Dependencies" deprecated: $ref: "#/components/schemas/DeprecatedBool" prototype: $ref: "#/components/schemas/PrototypeBool" moz_pipeline_metadata_defaults: $ref: "#/components/schemas/MozPipelineMetadataDefaults" moz_pipeline_metadata: $ref: "#/components/schemas/MozPipelineMetadata" skip_documentation: $ref: "#/components/schemas/SkipDocumentationBool" channels: type: array description: >- Information for each of the concrete channels that make up this logical application. Most applications will only have a single concrete listing that represents all channels, but Android and iOS applications in particular may need to publish several listings with different `app_id` values in order to make multiple channels available in their respective app stores. Note that optional fields here are redundant. If a value is specified for a specific channel, it will override any value set at the overall application level. items: type: object additionalProperties: false required: - app_id - v1_name properties: app_id: $ref: "#/components/schemas/AppId" v1_name: $ref: "#/components/schemas/V1Name" app_channel: $ref: "#/components/schemas/AppChannel" description: $ref: "#/components/schemas/Description" deprecated: $ref: "#/components/schemas/DeprecatedBool" additional_dependencies: type: array default: [] items: type: string LibraryYaml: type: object additionalProperties: false required: - library_name - description - notification_emails - url - variants properties: library_name: $ref: "#/components/schemas/LibraryName" description: $ref: "#/components/schemas/Description" notification_emails: $ref: "#/components/schemas/NotificationEmails" url: $ref: "#/components/schemas/RepoUrl" tag_files: $ref: "#/components/schemas/TagFiles" metrics_files: $ref: "#/components/schemas/MetricsFiles" ping_files: $ref: "#/components/schemas/PingFiles" variants: $ref: "#/components/schemas/LibraryVariantsYaml" AppListing: type: object additionalProperties: false required: - app_id - document_namespace - bq_dataset_family - app_name - v1_name - url properties: app_id: $ref: "#/components/schemas/AppId" document_namespace: $ref: "#/components/schemas/DocumentNamespace" bq_dataset_family: $ref: "#/components/schemas/BqDatasetFamily" app_name: $ref: "#/components/schemas/AppName" canonical_app_name: $ref: "#/components/schemas/CanonicalAppName" app_description: $ref: "#/components/schemas/AppDescription" v1_name: $ref: "#/components/schemas/V1Name" app_channel: $ref: "#/components/schemas/AppId" description: type: string notification_emails: $ref: "#/components/schemas/NotificationEmails" url: $ref: "#/components/schemas/RepoUrl" branch: $ref: "#/components/schemas/RepoBranch" tag_files: $ref: "#/components/schemas/TagFiles" metrics_files: $ref: "#/components/schemas/MetricsFiles" ping_files: $ref: "#/components/schemas/PingFiles" dependencies: $ref: "#/components/schemas/Dependencies" deprecated: $ref: "#/components/schemas/DeprecatedBool" prototype: $ref: "#/components/schemas/PrototypeBool" moz_pipeline_metadata_defaults: $ref: "#/components/schemas/MozPipelineMetadataDefaults" moz_pipeline_metadata: $ref: "#/components/schemas/MozPipelineMetadata" skip_documentation: $ref: "#/components/schemas/SkipDocumentationBool" LibraryVariant: type: object additionalProperties: false required: - library_name - description - notification_emails - url - dependency_name - v1_name properties: library_name: $ref: "#/components/schemas/LibraryName" description: $ref: "#/components/schemas/Description" notification_emails: $ref: "#/components/schemas/NotificationEmails" url: $ref: "#/components/schemas/RepoUrl" tag_files: $ref: "#/components/schemas/TagFiles" metrics_files: $ref: "#/components/schemas/MetricsFiles" ping_files: $ref: "#/components/schemas/PingFiles" v1_name: $ref: "#/components/schemas/V1Name" deprecated: $ref: "#/components/schemas/DeprecatedBool" branch: $ref: "#/components/schemas/RepoBranch" dependency_name: $ref: "#/components/schemas/DependencyName" V1Name: type: string pattern: "^[a-z][a-z0-9-]{0,39}$" description: Identifier used in v1 URI paths that reference a specific repository example: firefox-android-beta Description: type: string description: A brief free-text description of this application variant. AppDescription: type: string description: | A brief free-text description of an application, applicable across any variants. This should not be materialized in ETL, but rather only made available in user-facing views since it may be verbose and it may change over time. example: The desktop version of Firefox AppName: type: string pattern: "^[a-z][a-z0-9_]{0,39}$" description: | A lowercase_with_underscores name that is short and unambiguous. It needs to be something that can be used both in a generated table name in BigQuery or as a value in an `app_name` string field in a derived table. BigQuery users might be using this literal name in a `WHERE` clause, so it should feel reasonable for that use case. Examples: `fenix`, `firefox_ios`. This is an "end-to-end identifier": wherever there is a field called `app_name` from probe scraping to user-facing derived tables in BigQuery, it should reflect this exact value. example: firefox_ios CanonicalAppName: type: string description: | How we would formally name this application in marketing copy or in a dashboard. This should not be materialized in ETL, but rather only made available in user-facing views since it may be verbose and it may change over time. Examples: Firefox for Android, Firefox for Android (Legacy Fennec), Firefox for Desktop, Firefox Focus for iOS This is an "end-to-end identifier": wherever there is a field called `canonical_app_name` from probe scraping to user-facing derived tables in BigQuery, it should reflect this exact value. example: Firefox for iOS AppChannel: type: string enum: - release - beta - nightly - esr description: | The release channel. If this is not specified, then we assume the application provides a reasonable channel value in `client_info.app_channel` in its pings. AppId: type: string pattern: '^[a-z][a-zA-Z0-9._-]{0,1023}$' description: | The app's identifier exactly as it appears in the relevant app store listing (for relevant platforms) or in the app's Glean initialization call (for other platforms). In the case of the Google Play store, it may contain both dots and dashes. For applicable platforms, you should be able to construct an app store URL from this value. This is an "end-to-end identifier": wherever there is a field called `app_id` from probe scraping to user-facing derived tables in BigQuery, it should reflect this exact value. example: "org.mozilla.firefox_beta" DocumentNamespace: type: string pattern: "^[a-z][a-z-]{0,1023}$" description: | Derived from `app_id`, this is the lowercase-with-dashes value that appears as the `document_namespace` element of the submission URI for a ping. example: org-mozilla-firefox-beta BqDatasetFamily: type: string pattern: "^[a-z][a-z_]{0,1023}$" description: | Derived from `app_id`, this is the lowercase-with-underscores prefix for the BigQuery datasets where decoded ping data is written by the pipeline. example: org_mozilla_firefox_beta TagFiles: type: array description: A list of relative paths to `tags.yaml` files default: [] items: type: string pattern: .+\.yaml$ example: app/tags.yaml MetricsFiles: type: array description: A list of relative paths to `metrics.yaml` files in the repo default: [] items: type: string pattern: .+\.yaml$ example: app/metrics.yaml PingFiles: type: array description: A list of relative paths to `pings.yaml` files default: [] items: type: string pattern: .+\.yaml$ example: app/pings.yaml RepoBranch: type: string default: master description: The branch in the repository to use. RepoUrl: type: string format: uri description: The URL of the repository to scrape. It should be able to be cloned directly from that URL. example: https://github.com/mozilla-mobile/firefox-ios NotificationEmails: type: array description: | Where emails about probe-scraper failures and improper files will be forwarded to. These will be just about your specific repository. items: type: string format: email example: nobody@mozilla.com PrototypeBool: type: boolean default: false description: Set to `true` if the application is still under development. DeprecatedBool: type: boolean default: false description: Set to `true` if the repo corresponds to a deprecated product or library. LibraryName: type: string description: | A unique identifier for this library, applicable across all variants of it. example: glean-core LibraryVariantsYaml: type: array description: | Variants of this library. items: type: object additionalProperties: false required: - dependency_name - v1_name properties: v1_name: $ref: "#/components/schemas/V1Name" description: $ref: "#/components/schemas/Description" deprecated: $ref: "#/components/schemas/DeprecatedBool" branch: $ref: "#/components/schemas/RepoBranch" dependency_name: $ref: "#/components/schemas/DependencyName" LibraryNames: type: array description: | All the build-specific library names defined in this repository, used as keys to match with the `dependencies` values declared by applications. A single repository could present multiple library names for different platforms, thus there may be multiple values here. items: type: string example: org.mozilla.components:service-glean OverrideAttributes: type: array description: | Mappings of Pub/Sub attribute names to static values; these are applied in the Decoder immediately before incorporating metadata into the payload, so can be used to overwrite values calculated in the pipeline; a null value will cause the pipeline to drop the named attribute; some attribute names differ from the nested metadata format in BigQuery, so for example you must use \"geo_city\" here in order to manipulate the value that shows up as metadata.geo.city; implemented for bug 1742172. items: type: object additionalProperties: false properties: name: type: string required: true enum: - geo_city - geo_subdivision1 - geo_subdivision2 - normalized_channel value: type: [ string, "null" ] required: true ExpirationPolicy: type: object description: | Various options controlling data lifecycle. additionalProperties: false properties: collect_through_date: type: string description: | If present, the pipeline will reject new data with submission_timestamp after the given date, sending it to error output. Example: `2025-12-31` pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" example: "2025-12-31" delete_after_days: type: integer description: | The number of days to retain decoded ping data received for this application. If not specified, retention will be unlimited. JweMappings: type: array description: | Mappings of encrypted JWE field paths to destinations where the value decrypted by the pipeline should be placed; initial use case is Account Ecosystem Telemetry; paths must be in [JSON Pointer format](https://tools.ietf.org/html/rfc6901) like '/payload/ecosystemAnonId'. items: type: object additionalProperties: false properties: decrypted_field_path: type: string required: true default: "" source_field_path: type: string required: true pattern: "^/.*$" default: "/payload" MozPipelineMetadataDefaults: type: object description: | Container for per-doctype metadata that can affect how pings are processed in the pipeline. additionalProperties: false properties: expiration_policy: $ref: "#/components/schemas/ExpirationPolicy" geoip_skip_entries: type: integer description: | If specified, pipeline will skip a number of IP address entries from X-Forwarded-For header before GeoIP decoding. Intended for use with proxies that add their own IP addresses to the header. jwe_mappings: $ref: "#/components/schemas/JweMappings" override_attributes: $ref: "#/components/schemas/OverrideAttributes" submission_timestamp_granularity: type: string description: | If specified, the submission_timestamp field will be truncated to the specified granularity in the pipeline before being output to BigQuery; this can be used to reduce the potential for using time-based attacks to correlate datasets using different client-level identifiers; see Java's ChronoUnit for additional granularities that could be considered for inclusion; implemented for bug 1742172. enum: - millis - seconds - minutes - hours - days MozPipelineMetadata: type: object description: | Allows ping level override of metadata values. additionalProperties: type: object description: Override default metadata values for the specified ping name. Note this is the document type (kebab-case) not the BigQuery table name (snake_case). x-additionalPropertiesName: ping-name additionalProperties: false properties: expiration_policy: $ref: "#/components/schemas/ExpirationPolicy" geoip_skip_entries: type: integer description: | If specified, pipeline will skip a number of IP address entries from X-Forwarded-For header before GeoIP decoding. Intended for use with proxies that add their own IP addresses to the header. jwe_mappings: $ref: "#/components/schemas/JweMappings" override_attributes: $ref: "#/components/schemas/OverrideAttributes" submission_timestamp_granularity: type: string description: | If specified, the submission_timestamp field will be truncated to the specified granularity in the pipeline before being output to BigQuery; this can be used to reduce the potential for using time-based attacks to correlate datasets using different client-level identifiers; see Java's ChronoUnit for additional granularities that could be considered for inclusion; implemented for bug 1742172. enum: - millis - seconds - minutes - hours - days SkipDocumentationBool: type: boolean default: false description: | Set to `true` if the application does not want to show up in automated documentation tools (e.g. the Glean Dictionary). DependencyName: type: string description: | Build system-specific name of this dependency, to be referenced by the `dependencies` section of an application's definition. example: org.mozilla.components:browser-engine-gecko Dependencies: type: array default: [] description: | List of libraries that this application imports. The values here must match a value defined under `dependency_name` by a library variant. items: type: string example: org.mozilla.components:service-glean GeneralFile: type: object required: - lastUpdate properties: lastUpdate: type: string description: timestamp when scraping was performed format: date-time RevisionsFile: type: object additionalProperties: type: object x-additionalPropertiesName: channel additionalProperties: type: object x-additionalPropertiesName: revision hash properties: version: type: string TelemetryProbesFile: type: object additionalProperties: type: object x-additionalPropertiesName: <probe type>/<probe name> properties: name: type: string type: type: string history: type: object additionalProperties: x-additionalPropertiesName: channel type: array items: type: object properties: cpp_guard: type: string nullable: true description: type: string example: The duration of the last foreground session details: type: object properties: record_in_processes: type: array items: type: string additionalProperties: x-additionalPropertiesName: type-specific detail type: string expiry_version: type: string optout: type: boolean revisions: type: object properties: first: type: string example: "9aa4f48e77001058c05f3d3182228706720bf87a" last: type: string example: "69c485078950fb09ee2cef609b75ea9dd30d249b" versions: type: object properties: first: type: string example: "56" last: type: string example: "59" GleanMetricsFile: type: object additionalProperties: type: object x-additionalPropertiesName: metric name properties: name: type: string type: type: string history: type: array items: type: object properties: type: type: string example: timespan description: type: string example: The duration of the last foreground session send_in_pings: type: array items: type: string example: baseline bugs: type: array items: type: integer example: 1497894 data_reviews: type: array items: type: string example: baseline notification_emails: $ref: "#/components/schemas/NotificationEmails" dates: type: object properties: first: type: string format: date-time last: type: string format: date-time git-commits: type: object properties: first: type: string example: "9aa4f48e77001058c05f3d3182228706720bf87a" last: type: string example: "69c485078950fb09ee2cef609b75ea9dd30d249b" DependenciesFile: type: object additionalProperties: type: object x-additionalPropertiesName: library name properties: name: type: string type: type: string history: type: array items: type: object properties: dates: type: object properties: first: type: string format: date-time last: type: string format: date-time git-commits: type: object properties: first: type: string example: "9aa4f48e77001058c05f3d3182228706720bf87a" last: type: string example: "69c485078950fb09ee2cef609b75ea9dd30d249b" examples: TelemetryProbesFile: value: histogram/A11Y_CONSUMERS: history: nightly: - cpp_guard: description: | A list of known accessibility clients that inject into Firefox process space (see https://dxr.mozilla.org/mozilla-central/source/accessible/windows/msaa/Compatibility.h). details: high: 11 keyed: false kind: enumerated low: 1 n_buckets: 12 expiry_version: never optout: true revisions: first: 320642944e42a889db13c6c55b404e32319d4de6 last: 6f5fac320fcb6625603fa8a744ffa8523f8b3d71 versions: first: '56' last: '59' name: A11Y_CONSUMERS type: histogram RevisionsFile: value: aurora: 1196bf3032e1bce1fb07a01fd9082a767426c5fb: version: 51 DependenciesFile: value: org.mozilla.deprecated:glean: name: org.mozilla.deprecated:glean type: dependency GleanMetricsFile: value: app.opened_as_default_browser: history: - _config: allow_reserved: false do_not_disable_expired: true bugs: - https://github.com/mozilla-mobile/firefox-ios/issues/7151 data_reviews: - https://github.com/mozilla-mobile/firefox-ios/pull/7245 dates: first: '2020-09-02 22:57:11' last: '2021-01-13 23:05:09' description: | Recorded when a preference is changed and includes the preference that changed as well as the value changed to recorded in the extra keys. disabled: false expires: '2021-03-01' gecko_datapoint: '' git-commits: first: ecd3060791ba43162afc0718cac76c7599c62686 last: b274ef21927c892e6f87fd7d7b8a04a594acb9f9 lifetime: ping no_lint: [] notification_emails: - firefox-ios@mozilla.com reflog-index: first: 8 last: 0 send_in_pings: - metrics type: counter version: 0 name: app.opened_as_default_browser type: counter LibraryVariant: value: v1_name: glean-core description: Modern cross-platform telemetry (core library) notification_emails: - frank@mozilla.com - mdroettboom@mozilla.com url: https://github.com/mozilla/glean branch: main tag_files: - glean-core/tags.yaml metrics_files: - glean-core/metrics.yaml ping_files: - glean-core/pings.yaml library_names: - glean-core