# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# This file defines the metrics that are recorded by the Glean SDK.
# APIs to use these pings are automatically generated at build time using
# the `glean_parser` PyPI package.

# Metrics in this file may make use of SDK reserved ping names. See
# https://mozilla.github.io/glean/book/dev/core/internal/reserved-ping-names.html
# for additional information.

# Disable line-length rule because of links in descriptions.
# yamllint disable rule:line-length

---
$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0

glean.baseline:
  duration:
    type: timespan
    description: |
      The duration of the last foreground session.
    time_unit: second
    send_in_pings:
      - baseline
    bugs:
      - https://bugzilla.mozilla.org/1497894
      - https://bugzilla.mozilla.org/1519120
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
      - interaction
    notification_emails:
      - glean-team@mozilla.com
    expires: never

glean.internal.metrics:
  os:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The name of the operating system.
      Possible values:
      Android, iOS, Linux, Darwin, Windows,
      FreeBSD, NetBSD, OpenBSD, Solaris, Unknown
    bugs:
      - https://bugzilla.mozilla.org/1497894
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  os_version:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The user-visible version of the operating system (e.g. "1.2.3").
      If the version detection fails, this metric gets set to `Unknown`.
    bugs:
      - https://bugzilla.mozilla.org/1497894
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  windows_build_number:
    type: quantity
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The optional Windows build number, reported by Windows
      (e.g. 22000) and not set for other platforms.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1802094
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1802094
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    unit: build_number

  device_manufacturer:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The manufacturer of the device the application is running on.
      Not set if the device manufacturer can't be determined.
      Currently only collected on Android and iOS.
    bugs:
      - https://bugzilla.mozilla.org/1522552
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  device_model:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The model of the device the application is running on.
      On Android, this is Build.MODEL, the user-visible marketing name,
      like "Pixel 2 XL".
      Not set if the device model can't be determined.
      Currently only collected on Android and iOS.
    bugs:
      - https://bugzilla.mozilla.org/1522552
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  architecture:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The architecture of the device, (e.g. "arm", "x86").
    bugs:
      - https://bugzilla.mozilla.org/1497894
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  client_id:
    type: uuid
    description:
      A UUID uniquely identifying the client.
    send_in_pings:
      - glean_client_info
    lifetime: user
    bugs:
      - https://bugzilla.mozilla.org/1497894
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  app_build:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The build identifier generated by the CI system (e.g. "1234/A").
      If the value was not provided through configuration,
      this metric gets set to `Unknown`.
    bugs:
      - https://bugzilla.mozilla.org/1508305
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  app_display_version:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The user visible version string (e.g. "1.0.3").
      If the value was not provided through configuration,
      this metric gets set to `Unknown`.
    bugs:
      - https://bugzilla.mozilla.org/1508305
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1508305#c9
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  app_channel:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The channel the application is being distributed on.
    bugs:
      - https://bugzilla.mozilla.org/1520741
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1520741#c18
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  build_date:
    type: datetime
    time_unit: second
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The date & time the application was built.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1742448
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1742448#c17
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never

  first_run_date:
    type: datetime
    lifetime: user
    send_in_pings:
      - glean_client_info
    time_unit: day
    description: |
      The date of the first run of the application.
    bugs:
      - https://bugzilla.mozilla.org/1525045
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1525045#c18
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  locale:
    type: string
    lifetime: application
    send_in_pings:
      - glean_client_info
    description: |
      The locale of the application during initialization (e.g. "es-ES").
      If the locale can't be determined on the system, the value is
      ["und"](https://unicode.org/reports/tr35/#Unknown_or_Invalid_Identifiers),
      to indicate "undetermined".
    bugs:
      - https://bugzilla.mozilla.org/1601489
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1601489#c3
    data_sensitivity:
      - technical
      - interaction
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  telemetry_sdk_build:
    type: string
    lifetime: ping
    send_in_pings:
      - glean_internal_info
    description: |
      The version of the Glean SDK
      at the time the ping was collected (e.g. 25.0.0).
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1556966
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  seq:
    type: counter
    lifetime: user
    send_in_pings:
      - glean_internal_info
    description: |
      A running counter of the number of times pings of this type have been
      sent.
      This metric definition is only used for documentation purposes:
      internally, Glean instantiates the metric manually and calls it
      `sequence`.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1556964
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  experiments:
    type: string  # It's not, but we don't have a way to specify its type
    lifetime: application
    send_in_pings:
      - glean_internal_info
    description: |
      Optional. A dictionary of active experiments.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1552471
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  start_time:
    type: datetime
    time_unit: millisecond
    lifetime: user
    send_in_pings:
      - glean_internal_info
    description: |
      The time of the start of collection of the data in the ping,
      in local time and with minute precision, including timezone information.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1556966
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1827852
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  end_time:
    type: datetime
    time_unit: millisecond
    lifetime: ping
    send_in_pings:
      - glean_internal_info
    description: |
      The time of the end of collection of the data in the ping,
      in local time and with minute precision, including timezone information.
      This is also the time this ping was generated
      and is likely well before ping transmission time.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1556966
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1827852
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1512938#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  reason:
    type: string
    lifetime: ping
    send_in_pings:
      - glean_internal_info
    description: |
      The optional reason the ping was submitted.
      The specific values for reason are specific to each ping, and are
      documented in the ping's pings.yaml file.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1557048
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1609218#c4
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  server_knobs_config:
    type: object
    lifetime: application
    send_in_pings:
      - glean_internal_info
    description: |
      The Server Knobs configuration applied via applyServerKnobsConfig.
      This contains the complete configuration including metrics_enabled,
      pings_enabled, and event_threshold settings that control metric
      recording behavior through remote configuration.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2007406
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2007406
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    structure:
      type: object
      properties:
        metrics_enabled:
          type: object
          description: |
            Map of metric identifiers (category.name) to boolean values
            indicating whether the metric is enabled.
          properties:
            key:
              type: string
            value:
              type: boolean
        pings_enabled:
          type: object
          description: |
            Map of ping names to boolean values indicating whether
            the ping is enabled.
          properties:
            key:
              type: string
            value:
              type: boolean
        event_threshold:
          type: number
          description: |
            Optional threshold for event buffering before an events
            ping is collected and submitted. Can be null if not set.


glean.internal.metrics.attribution:
  source:
    type: string
    lifetime: user
    send_in_pings:
      - glean_client_info
    description: |
      The optional attribution source.
      Similar to or the same as UTM `source`.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  medium:
    type: string
    lifetime: user
    send_in_pings:
      - glean_client_info
    description: |
      The optional attribution medium.
      Similar to or the same as UTM `medium`.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  campaign:
    type: string
    lifetime: user
    send_in_pings:
      - glean_client_info
    description: |
      The optional attribution campaign.
      Similar to or the same as UTM `campaign`.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  term:
    type: string
    lifetime: user
    send_in_pings:
      - glean_client_info
    description: |
      The optional attribution term.
      Similar to or the same as UTM `term`.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  content:
    type: string
    lifetime: user
    send_in_pings:
      - glean_client_info
    description: |
      The optional attribution `content`.
      Similar to or the same as UTM `content`.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never


glean.internal.metrics.distribution:
  name:
    type: string
    lifetime: user
    send_in_pings:
      - glean_client_info
    description: |
      The optional distribution name.
      Can be a partner name, or a distribution configuration preset.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1955428
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never


glean.client.annotation:
  experimentation_id:
    type: string
    lifetime: application
    send_in_pings:
      - all-pings
    description: |
      An experimentation identifier derived and provided by the application
      for the purpose of experimentation enrollment.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1848201
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1848201#c5
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

glean.error:
  invalid_value:
    type: labeled_counter
    description: |
      Counts the number of times a metric was set to an invalid value.
      The labels are the `category.name` identifier of the metric.
    bugs:
      - https://bugzilla.mozilla.org/1499761
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1499761#c5
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    send_in_pings:
      - all-pings
    no_lint:
      - COMMON_PREFIX

  invalid_label:
    type: labeled_counter
    description: |
      Counts the number of times a metric was set with an invalid label.
      The labels are the `category.name` identifier of the metric.
    bugs:
      - https://bugzilla.mozilla.org/1499761
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1499761#c5
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    send_in_pings:
      - all-pings
    no_lint:
      - COMMON_PREFIX

  invalid_state:
    type: labeled_counter
    description: |
      Counts the number of times a timing metric was used incorrectly.
      The labels are the `category.name` identifier of the metric.
    bugs:
      - https://bugzilla.mozilla.org/1566380
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1499761#c5
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    send_in_pings:
      - all-pings
    no_lint:
      - COMMON_PREFIX

  invalid_overflow:
    type: labeled_counter
    description: |
      Counts the number of times a metric was set a value that overflowed.
      The labels are the `category.name` identifier of the metric.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1591912
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1591912#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    send_in_pings:
      - all-pings
    no_lint:
      - COMMON_PREFIX

  preinit_tasks_overflow:
    version: 1
    type: counter
    description: |
      The number of tasks that overflowed the pre-initialization buffer.
      Only sent if the buffer ever overflows.

      In Version 0 this reported the total number of tasks enqueued.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1609482
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1609482#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  io:
    type: counter
    description: |
      The number of times we encountered an IO error
      when writing a pending ping to disk.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1686233
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1686233#c2
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never

  event_timestamp_clamped:
    type: counter
    description: |
      The number of times we had to clamp an event timestamp
      for exceeding the range of a signed 64-bit integer (9223372036854775807).
    send_in_pings:
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1873482
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2047890
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1873482
      - https://github.com/mozilla/glean/pull/3500
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: 2027-06-30
    disabled: true

glean.upload:
  ping_upload_failure:
    type: labeled_counter
    description: |
      Counts the number of ping upload failures, by type of failure.
      This includes failures for all ping types,
      though the counts appear in the next successfully sent `metrics` ping.
    labels:
      - "status_code_4xx"
      - "status_code_5xx"
      - "status_code_unknown"
      - "unrecoverable"
      - "recoverable"
      - "incapable"
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1589124
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1589124#c1
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  discarded_exceeding_pings_size:
    type: memory_distribution
    description: |
      The size of pings that exceeded the maximum ping size allowed for upload.
    memory_unit: kilobyte
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1597761
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1597761#c10
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  pending_pings_directory_size:
    type: memory_distribution
    description: |
      The size of the pending pings directory upon initialization of Glean.
      This does not include the size of the deletion request pings directory.
    memory_unit: kilobyte
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1601550
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1601550#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  deleted_pings_after_quota_hit:
    type: counter
    description: |
      The number of pings deleted after the quota
      for the size of the pending pings directory or number of files is hit.
      Since quota is only calculated for the pending pings directory,
      and deletion request ping live in a different directory,
      deletion request pings are never deleted.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1601550
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1601550#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  pending_pings_deleted:
    type: labeled_counter
    labels:
      - count_quota
      - size_quota
    description: |
      The number of pings deleted because a pending pings quota was exceeded,
      labeled by which quota triggered the deletion.

      * `count_quota`: the maximum number of pending pings was reached.
      * `size_quota`: the maximum size of the pending pings directory was reached.

      Sent on the health ping only; use this metric to verify whether
      the configured limits are sufficient to survive connectivity outages.
    send_in_pings:
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2040030
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2040030
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  pending_pings:
    type: counter
    description: |
      The total number of pending pings at startup.
      This does not include deletion-request pings.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1665041
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1665041#c23
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never
    no_lint:
      - COMMON_PREFIX

  send_success:
    type: timing_distribution
    time_unit: millisecond
    description: |
      Time needed for a successful send of a ping to the servers and getting a reply back
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1814592
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1814592#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never

  send_failure:
    type: timing_distribution
    time_unit: millisecond
    description: |
      Time needed for a failed send of a ping to the servers and getting a reply back.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1814592
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1814592#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never

  in_flight_pings_dropped:
    type: counter
    description: |
      How many pings were dropped because we found them already in-flight.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1816401
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1816401
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - chutten@mozilla.com
    expires: never

  missing_send_ids:
    type: counter
    description: |
      How many ping upload responses did we not record as a success or failure
      (in `glean.upload.send_success` or `glean.upload.send_failue`,
      respectively) due to an inconsistency in our internal bookkeeping?
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1816400
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1816400
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - chutten@mozilla.com
    expires: never

glean.database:
  size:
    type: memory_distribution
    description: |
      The size of the database file at startup.
    memory_unit: byte
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1656589
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1656589#c7
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  rkv_load_error:
    type: string
    description: |
      If there was an error loading the RKV database, record it.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1815253
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1815253
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

  write_time:
    type: timing_distribution
    time_unit: microsecond
    description: |
      The time it takes for a write-commit for the Glean database.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1896193
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1896193#c4
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never
    disabled: true

glean.validation:
  foreground_count:
    type: counter
    description: |
      On mobile, the number of times the application went to foreground.
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1683707
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1685712
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1683707#c2
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires:
      never
  pings_submitted:
    type: labeled_counter
    description: |
      A count of the built-in pings submitted, by ping type.

      This metric appears in both the metrics and baseline pings.

      - On the metrics ping, the counts include the number of pings sent since
        the last metrics ping (including the last metrics ping)
      - On the baseline ping, the counts include the number of pings send since
        the last baseline ping (including the last baseline ping)

      Note: Previously this also recorded the number of submitted custom pings.
      Now it only records counts for the Glean built-in pings.
    send_in_pings:
      - metrics
      - baseline
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1586764
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1586764#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires:
      never

  shutdown_wait:
    type: timing_distribution
    time_unit: millisecond
    description: |
      Time waited for the uploader at shutdown.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1814592
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1814592#c3
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never

  shutdown_dispatcher_wait:
    type: timing_distribution
    time_unit: millisecond
    description: |
      Time waited for the dispatcher to unblock during shutdown.
      Most samples are expected to be below the 10s timeout used.
    send_in_pings:
      - metrics
      - health
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1828066
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1828066#c7
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    expires: never

glean:
  restarted:
    type: event
    description: |
      Recorded when the Glean SDK is restarted.

      Only included in custom pings that record events.

      For more information, please consult the
      [Custom Ping documentation](https://mozilla.github.io/glean/book/user/pings/custom.html#the-gleanrestarted-event).
    send_in_pings:
      - all-pings
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1716725
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1716725
    data_sensitivity:
      - technical
    notification_emails:
      - chutten@mozilla.com
      - glean-team@mozilla.com
    expires: never

  session_start:
    type: event
    description: |
      Recorded when a new session starts.

      Always emitted regardless of session sampling so analysts can
      observe all session boundaries and validate sampling rates.
    send_in_pings:
      - events
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2020962
    data_reviews:
      - "TODO data review"
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2020962
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    extra_keys:
      session_id:
        description: The unique UUID of the started session.
        type: string
      session_seq:
        description: The session sequence number (monotonically increasing across restarts).
        type: quantity
      session_start_time:
        description: |
          Wall-clock timestamp at session start (RFC 3339).
          Auxiliary only; per-event timestamps remain authoritative for
          time-based analysis.
        type: string
      sampled_in:
        description: |
          Whether this session is sampled in (true) or sampled out (false).
          Events from sampled-out sessions are suppressed; this field lets
          analysts validate that the observed sampling rate matches the
          configured rate.
        type: boolean

  session_end:
    type: event
    description: |
      Recorded when a session ends.

      Always emitted regardless of session sampling. The `reason` extra key
      describes why the session ended.
    send_in_pings:
      - events
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2020962
    data_reviews:
      - "TODO data review"
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2020962
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never
    extra_keys:
      session_id:
        description: The unique UUID of the ended session.
        type: string
      session_seq:
        description: The session sequence number (monotonically increasing across restarts).
        type: quantity
      reason:
        description: |
          Why the session ended. When in MANUAL mode, the reason can optionally
          be set by the application. Possible values set by Glean in AUTO or
          LIFECYCLE session management modes include:
          - "inactive": client went to background (LIFECYCLE mode)
          - "replaced": a new session was started while one was already active
          - "timeout": AUTO mode inactivity timeout expired
          - "abnormal": session ended due to app crash/force-close
          - "abnormal_inactive": session was inactive at time of crash
        type: string

  sessions_seen:
    type: counter
    description: |
      The total number of sessions started since the last metrics ping.
      Incremented for every session start, regardless of sampling.
      This metric is a counter and is out-of-session by default, so it
      is never suppressed by any session sampling which means it can be
      used to validate sampling rates against the events-ping session_start
      count.
    send_in_pings:
      - metrics
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2020962
    data_reviews:
      - "TODO data review"
      - https://bugzilla.mozilla.org/show_bug.cgi?id=2020962
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

glean.ping:
  uploader_capabilities:
    type: string_list
    description: |
      The list of requested uploader capabilities for the ping this is sent in.
      Should be the same as the ones defined for that particular ping.

      This metric is only attached to a ping if it already contains other data.
    send_in_pings:
      - all-pings
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1976479
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1976479#c2
    data_sensitivity:
      - technical
    notification_emails:
      - glean-team@mozilla.com
    expires: never

glean.health:
  data_directory_info:
    type: object
    description: |
      Information about the data directories and files used by FOG.

      Structure is an array of objects, each containing the following properties:
      - `dir_name`: The name of the directory. This is the subdirectory name relative to the
        FOG data directory and should only include "db", "events", and "pending_pings".
      - `dir_exists`: Whether the directory exists. This should only be false on the first
        run of FOG, or if the directory was deleted.
      - `dir_created`: The creation time of the directory, in seconds since the unix epoch. If
        the directory does not exist, this will be `null` and if the time cannot be determined,
        it will default to `0`.
      - `dir_modified`: The last modification time of the directory, in seconds since the unix
        epoch. If the directory does not exist, this will be `null` and if the time cannot be
        determined, it will default to `0`.
      - `file_count`: The number of files in the directory. If the directory does not exist,
        this will be `0`.
      - `error_message`: If there was an error accessing the directory, this will contain a
        brief description of the error. If there was no error, this will be null.
      - `files`: An array of objects, each containing:
        - `file_name`: The name of the file. Could be `data.safe.bin`, `events.safe.bin`, or
          A UUID representing the doc-id of a pending ping.
        - `file_created`: The creation time of the file, in seconds since the epoch. If the
          file does not exist, this will be `null` and if the time cannot be determined, it
          will default to `0`.
        - `file_modified`: The last modification time of the file, in seconds since the epoch.
          If the file does not exist, this will be `null` and if the time cannot be determined,
          it will default to `0`.
        - `file_size`: The size of the file in bytes. This can be just about any size but a
          `0` value indicates the file is empty.
        - `error_message`: If there was an error accessing the file, this will contain a brief
          description of the error. If there was no error, this will be null.
    notification_emails:
      - glean-team@mozilla.com
      - tlong@mozilla.com
    bugs:
      - https://bugzilla.mozilla.org/1667815
      - https://bugzilla.mozilla.org/1982711
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1982711#c3
    data_sensitivity:
      - technical
    expires: never
    send_in_pings:
      - health
      - metrics
    structure:
      type: array
      items:
        type: object
        properties:
          dir_name:
            type: string
          dir_exists:
            type: boolean
          dir_created:
            type: number
          dir_modified:
            type: number
          file_count:
            type: number
          error_message:
            type: string
          files:
            type: array
            items:
              type: object
              properties:
                file_name:
                  type: string
                file_created:
                  type: number
                file_modified:
                  type: number
                file_size:
                  type: number
                error_message:
                  type: string

  init_count:
    type: counter
    lifetime: user
    description: |
      A running count of how many times the Glean SDK has been initialized.
    notification_emails:
      - glean-team@mozilla.com
      - chutten@mozilla.com
    bugs:
      - https://bugzilla.mozilla.org/1990624
    data_reviews:
      - https://bugzilla.mozilla.org/1990624
    data_sensitivity:
      - technical
    expires: never
    send_in_pings:
      - health

  exception_state:
    type: string
    lifetime: ping
    description: |
      An exceptional state was detected upon trying to load the database.

      Valid options are:

      - `empty-db`
      - `regen-db`
      - `c0ffee-in-db`
      - `client-id-mismatch`
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757#c2
    data_sensitivity:
      - technical
    expires: never
    send_in_pings:
      - health

  recovered_client_id:
    type: uuid
    lifetime: ping
    description: |
      A client_id recovered from a `client_id.txt` file on disk.
      Only expected to have a value for the exception states `empty-db`, `c0ffee-in-db` and `client-id-mismatch`.
      See `exception_state` for different exception states when this can happen.
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757#c2
    data_sensitivity:
      - technical
    expires: never
    send_in_pings:
      - health

  file_read_error:
    type: labeled_counter
    lifetime: ping
    description: |
      Count of different errors that happened when trying to read the `client_id.txt` file from disk.
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757#c2
    data_sensitivity:
      - technical
    expires: never
    send_in_pings:
      - health
    labels:
      - parse
      - permission-denied
      - io
      - c0ffee-in-file
      - file-not-found

  file_write_error:
    type: labeled_counter
    lifetime: ping
    description: |
      Count of different errors that happened when trying to write the `client_id.txt` file to disk.
    notification_emails:
      - glean-team@mozilla.com
      - jrediger@mozilla.com
    bugs:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757
    data_reviews:
      - https://bugzilla.mozilla.org/show_bug.cgi?id=1994757#c2
    data_sensitivity:
      - technical
    expires: never
    send_in_pings:
      - health
    labels:
      - permission-denied
      - io
      - not-found
