<structured-metrics>

<project name="FastPair">
  <owner>jackshira@chromium.org</owner>
  <owner>chromeos-cross-device-eng@google.com</owner>
  <id>none</id>
  <scope>profile</scope>
  <key-rotation>30</key-rotation>
  <summary>
    Metrics for the ChromeOS Fast Pair implementation.
  </summary>

  <event name="DiscoveryNotificationShown">
    <summary>
      The user is shown a notification which can start the pairing process.
    </summary>
    <metric name="Protocol" type="int">
      <summary>
        The pairing protocol of the discovered device.
      </summary>
    </metric>
    <metric name="FastPairVersion" type="int">
      <summary>
        The Fast Pair spec version the device implements.
      </summary>
    </metric>
    <metric name="ModelId" type="int">
      <summary>
        The model ID of the discovered device.
      </summary>
    </metric>
    <metric name="RSSI" type="int">
      <summary>
        The inquiry RSSI of the discovered device, recorded at the time of metrics
        emission, with a range of -128 to 127. If inquiry RSSI is unknown,
        we report -129.
      </summary>
    </metric>
    <metric name="TxPower" type="int">
      <summary>
        The inquiry TxPower of the discovered device, recorded at the time of
        metrics emission, with a range of -128 to 127. If inquiry TxPower is
        unknown, we report -129.
      </summary>
    </metric>
  </event>

  <event name="PairingStart">
    <summary>
      The starting of the pairing process.
    </summary>
    <metric name="Protocol" type="int">
      <summary>
        The pairing protocol being started.
      </summary>
    </metric>
    <metric name="FastPairVersion" type="int">
      <summary>
        The Fast Pair spec version the device implements.
      </summary>
    </metric>
    <metric name="ModelId" type="int">
      <summary>
        The model ID of the device being paired.
      </summary>
    </metric>
    <metric name="RSSI" type="int">
      <summary>
        The inquiry RSSI of the pairing device, recorded at the time of metrics
        emission, with a range of -128 to 127. If inquiry RSSI is unknown,
        we report -129.
      </summary>
    </metric>
    <metric name="TxPower" type="int">
      <summary>
        The inquiry TxPower of the pairing device, recorded at the time of metrics
        emission, with a range of -128 to 127. If inquiry TxPower is
        unknown, we report -129.
      </summary>
    </metric>
  </event>

  <event name="PairingComplete">
    <summary>
      The end of the pairing process.
    </summary>
    <metric name="Protocol" type="int">
      <summary>
        The pairing protocol being started.
      </summary>
    </metric>
    <metric name="FastPairVersion" type="int">
      <summary>
        The Fast Pair spec version the device implements.
      </summary>
    </metric>
    <metric name="ModelId" type="int">
      <summary>
        The model ID of the device being paired.
      </summary>
    </metric>
    <metric name="RSSI" type="int">
      <summary>
        The inquiry RSSI of the paired device, recorded at the time of metrics
        emission, with a range of -128 to 127. If inquiry RSSI is unknown,
        we report -129.
      </summary>
    </metric>
    <metric name="TxPower" type="int">
      <summary>
        The inquiry TxPower of the paired device, recorded at the time of metrics
        emission, with a range of -128 to 127. If inquiry TxPower is
        unknown, we report -129.
      </summary>
    </metric>
  </event>

  <event name="PairFailure">
    <summary>
      The pairing process failed for the provided reason.
    </summary>
    <metric name="Protocol" type="int">
      <summary>
        The pairing protocol being started.
      </summary>
    </metric>
    <metric name="FastPairVersion" type="int">
      <summary>
        The Fast Pair spec version the device implements.
      </summary>
    </metric>
    <metric name="Reason" type="int">
      <summary>
        The pairing failure reason.
      </summary>
    </metric>
    <metric name="ModelId" type="int">
      <summary>
        The model ID of the device being paired.
      </summary>
    </metric>
  </event>
</project>

<project name="Hindsight">
  <owner>charleszhao@chromium.org</owner>
  <owner>tby@chromium.org</owner>
  <id>per-project</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for recording CrOSActions.
  </summary>

  <event name="CrOSActionEvent.FileOpened">
    <summary>
      Records whenever a file is opened in the File App on ChromeOS.
    </summary>
    <metric name="Filename" type="hmac-string">
      <summary>
        The absolute path of the file.
      </summary>
    </metric>
    <metric name="OpenType" type="int">
      <summary>
        The type of file open, defined in FileTaskObserver::OpenType.
      </summary>
    </metric>
    <metric name="SequenceId" type="int">
      <summary>
        Sequence of this action across all CrOSActionEvent.
      </summary>
    </metric>
    <metric name="TimeSinceLastAction" type="int">
      <summary>
        Time in milliseconds since last CrOSActionLogging.
      </summary>
    </metric>
  </event>

  <event name="CrOSActionEvent.SearchResultLaunched">
    <summary>
      Records information about the launch of an item from ChromeOS launcher.
    </summary>
    <metric name="Query" type="hmac-string">
      <summary>
        The search query associated with this launch.
      </summary>
    </metric>
    <metric name="ResultType" type="int">
      <summary>
        Which type of search provider the launched result was created by.
      </summary>
    </metric>
    <metric name="SearchResultId" type="hmac-string">
      <summary>
        The ID of the launched result result. For example, the app ID for app
        results, or the URL for omnibox results.
      </summary>
    </metric>
    <metric name="SequenceId" type="int">
      <summary>
        Sequence of this action across all CrOSActionEvent.
      </summary>
    </metric>
    <metric name="TimeSinceLastAction" type="int">
      <summary>
        Time in milliseconds since last CrOSActionLogging.
      </summary>
    </metric>
  </event>

  <event name="CrOSActionEvent.SettingChanged">
    <summary>
      Records when a setting is changed; only records quick settings for now.
    </summary>
    <metric name="CurrentValue" type="int">
      <summary>
        Value of the setting after the change.
      </summary>
    </metric>
    <metric name="PreviousValue" type="int">
      <summary>
        Value of the setting before the change.
      </summary>
    </metric>
    <metric name="SequenceId" type="int">
      <summary>
        Sequence of this action across all CrOSActionEvent.
      </summary>
    </metric>
    <metric name="SettingId" type="int">
      <summary>
        The setting id (in ash::ml::UserSettingsEvent::Event::SettingId) that
        represents the type of the changed setting.
      </summary>
    </metric>
    <metric name="SettingType" type="int">
      <summary>
        Enum that represents where the settings event originated from (in
        ash::ml::UserSettingsEvent::Event::SettingType).
      </summary>
    </metric>
    <metric name="TimeSinceLastAction" type="int">
      <summary>
        Time in milliseconds since last CrOSActionLogging.
      </summary>
    </metric>
  </event>

  <event name="CrOSActionEvent.TabEvent.TabNavigated">
    <summary>
      Records a tab activity of navigating to a new url.
    </summary>
    <metric name="PageTransition" type="int">
      <summary>
        The types of transition between pages. See more on ui::PageTransition.
      </summary>
    </metric>
    <metric name="SequenceId" type="int">
      <summary>
        Sequence of this action across all CrOSActionEvent.
      </summary>
    </metric>
    <metric name="TimeSinceLastAction" type="int">
      <summary>
        Time in milliseconds since last CrOSActionLogging.
      </summary>
    </metric>
    <metric name="URL" type="hmac-string">
      <summary>
        The URL of the current event.
      </summary>
    </metric>
    <metric name="Visibility" type="int">
      <summary>
        The visibility of this url, see more on content::Visibility.
      </summary>
    </metric>
  </event>

  <event name="CrOSActionEvent.TabEvent.TabOpened">
    <summary>
      Records a tab activity of opening a new url with ctrl+click.
    </summary>
    <metric name="SequenceId" type="int">
      <summary>
        Sequence of this action across all CrOSActionEvent.
      </summary>
    </metric>
    <metric name="TimeSinceLastAction" type="int">
      <summary>
        Time in milliseconds since last CrOSActionLogging.
      </summary>
    </metric>
    <metric name="URL" type="hmac-string">
      <summary>
        The URL of the current event.
      </summary>
    </metric>
    <metric name="URLOpened" type="hmac-string">
      <summary>
        The URL that is opened from the current url.
      </summary>
    </metric>
    <metric name="WindowOpenDisposition" type="int">
      <summary>
        Enum that indicates where the new tab is opened, see more on
        WindowOpenDisposition.
      </summary>
    </metric>
  </event>

  <event name="CrOSActionEvent.TabEvent.TabReactivated">
    <summary>
      Records a tab activity of reactivating an existing tab.
    </summary>
    <metric name="SequenceId" type="int">
      <summary>
        Sequence of this action across all CrOSActionEvent.
      </summary>
    </metric>
    <metric name="TimeSinceLastAction" type="int">
      <summary>
        Time in milliseconds since last CrOSActionLogging.
      </summary>
    </metric>
    <metric name="URL" type="hmac-string">
      <summary>
        The URL of the current event.
      </summary>
    </metric>
  </event>
</project>

<project name="LauncherUsage">
  <owner>tby@chromium.org</owner>
  <id>per-project</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    See event summary.
  </summary>

  <event name="LauncherUsage">
    <summary>
      Records information about the launch of an item (such as an app or a file)
      from the ChromeOS launcher. One event is recorded for every launch
      originating from any launcher UI component, and this is the only
      circumstance that records events.
    </summary>
    <metric name="App" type="hmac-string">
      <summary>
        App ID of the most-recently-opened app when this launch occured. This can be
        an app ID of a Chrome app, Arc++ app, or PWA.
      </summary>
    </metric>
    <metric name="Domain" type="hmac-string">
      <summary>
        The most-recently-visited domain when this launch ocurred.
      </summary>
    </metric>
    <metric name="Hour" type="int">
      <summary>
        The hour of launch. This is the user's local time rounded to the nearest
        hour, 0 to 23 inclusive.
      </summary>
    </metric>
    <metric name="ProviderType" type="int">
      <summary>
        Which type of search provider the launched result was created by. This comes
        from the AppListSearchResultType enum.
      </summary>
    </metric>
    <metric name="Score" type="int">
      <summary>
        The relevance score of the launched result. This is a double multiplied by
        1000 and cast to an int64. Results that don't have a score report 0.
      </summary>
    </metric>
    <metric name="SearchQuery" type="hmac-string">
      <summary>
        The search query associated with this launch. Before hashing, the query is
        the empty string if there was no search query.
      </summary>
    </metric>
    <metric name="SearchQueryLength" type="int">
      <summary>
        String length of the search query associated with this launch. If there was
        no query, this is zero.
      </summary>
    </metric>
    <metric name="Target" type="hmac-string">
      <summary>
        The target item of this launch, eg. an app ID, filepath, or omnibox URL.
      </summary>
    </metric>
  </event>
</project>

<project name="NeutrinoDevices">
  <owner>pdyson@chromium.org</owner>
  <id>per-project</id>
  <scope>device</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for recording events to monitor the creation of Neutrino Devices.
  </summary>

  <event name="ClientIdChanged">
    <summary>
      Records the client id being changed to a new value. This does not include
      when the client id is cleared (see ClientIdCleared below).
    </summary>
    <metric name="InitialClientId" type="hmac-string">
      <summary>
        The client id before it is changed.
      </summary>
    </metric>
    <metric name="FinalClientId" type="hmac-string">
      <summary>
        The client id after it is changed.
      </summary>
    </metric>
    <metric name="Log2TimeSinceInstallation" type="int">
      <summary>
        The time since installation. Recorded as the integer floor of the log
        base 2 of the time duration measured in days. Negative values indicate
        periods shorter than one day.
      </summary>
    </metric>
    <metric name="Log2TimeSinceMetricsEnabled" type="int">
      <summary>
        The time since metrics enabled. Recorded as the integer floor of the log
        base 2 of the time duration measured in days. Negative values indicate
        periods shorter than one day.
      </summary>
    </metric>
    <metric name="Location" type="int">
      <summary>
        An integer indicating the location in the code. This can be used to perform
        a partial stack trace to see which code was executed in the lead up to the
        client id being changed.
      </summary>
    </metric>
    <metric name="DaysSinceKeyRotation" type="int">
      <summary>
        The number of days since the key was rotated.
      </summary>
    </metric>
  </event>

  <event name="ClientIdCleared">
    <summary>
      Records when the client id is cleared.
    </summary>
    <metric name="InitialClientId" type="hmac-string">
      <summary>
        The client id before it is changed.
      </summary>
    </metric>
    <metric name="Log2TimeSinceInstallation" type="int">
      <summary>
        The time since installation. Recorded as the integer floor of the log
        base 2 of the time duration measured in days. Negative values indicate
        periods shorter than one day.
      </summary>
    </metric>
    <metric name="Log2TimeSinceMetricsEnabled" type="int">
      <summary>
        The time since metrics enabled. Recorded as the integer floor of the log
        base 2 of the time duration measured in days. Negative values indicate
        periods shorter than one day.
      </summary>
    </metric>
  </event>

  <event name="Enrollment">
    <summary>
      Records the enrollment status, either managed or unmanaged.
    </summary>
    <metric name="ClientId" type="hmac-string">
      <summary>
        The client id.
      </summary>
    </metric>
    <metric name="Location" type="int">
      <summary>
        An integer indicating the location in the code. This can be used to perform
        a partial stack trace to see which code was executed in the lead up to the
        client id being changed.
      </summary>
    </metric>
    <metric name="IsManagedDevice" type="int">
      <summary>
        Whether the device is managed. 1: Managed, 0: Unmanaged.
      </summary>
    </metric>
    <metric name="IsManagedPolicy" type="int">
      <summary>
        Whether the metrics reporting policy is managed. 1: Managed, 0:
        Unmanaged.
      </summary>
    </metric>
  </event>

  <event name="CodePoint">
    <summary>
      Records that execution reached a particular point in the code.
    </summary>
    <metric name="ClientId" type="hmac-string">
      <summary>
        The client id.
      </summary>
    </metric>
    <metric name="Location" type="int">
      <summary>
        An integer indicating the location in the code. This can be used to perform
        a partial stack trace to see which code was executed in the lead up to the
        client id being changed.
      </summary>
    </metric>
  </event>
</project>

<project name="StructuredMetrics">
  <owner>jongahn@chromium.org</owner>
  <owner>tby@chromium.org</owner>
  <id>per-project</id>
  <scope>device</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Structured Metrics is a logging framework for events. This project is used
    for monitoring the framework itself.
  </summary>

  <event name="Initialization">
    <summary>
      Records metadata about initialization of Structured Metrics and will be
      recorded immediately after initialization is successful. Will be sent once
      per initialization during browser process initialization.
    </summary>
    <metric name="Platform" type="int">
      <summary>
        The platform for which the client is initialized on. 0: Uninitialized, 1:
        ASH_CHROME, 2: LACROS_CHROME.
      </summary>
    </metric>
  </event>
</project>

<project name="CrOSEvents" cros_events="true">
  <owner>jongahn@chromium.org</owner>
  <id>per-project</id>
  <scope>device</scope>
  <key-rotation>120</key-rotation>
  <summary>
    Project used to record a sequence of events that are related to each other.
  </summary>

  <event name="AppDiscovery.AppInstalled">
    <summary>
      Recorded whenever a new app is installed on Chrome OS.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Key that identifies an app.
      </summary>
    </metric>
    <metric name="AppType" type="int">
      <summary>
        The type of app that was installed (ie ARC, native, Crostini, etc.).
      </summary>
    </metric>
    <metric name="InstallSource" type="int">
      <summary>
        Origin from which the app was installed (ie launcher, playstore).
      </summary>
    </metric>
    <metric name="InstallReason" type="int">
      <summary>
        Reason for which the app was installed.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.AppLaunched">
    <summary>
      Recorded whenever a new app is launched on Chrome OS.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Key that identifies an app.
      </summary>
    </metric>
    <metric name="AppType" type="int">
      <summary>
        The type of app that was installed (ie ARC, native, Crostini, etc.).
      </summary>
    </metric>
    <metric name="LaunchSource" type="int">
      <summary>
        From where the app was launched from (ie launcher, shelf).
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.AppUninstall">
    <summary>
      Recorded whenever an app is uninstalled on Chrome OS.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Key that identifies an app.
      </summary>
    </metric>
    <metric name="AppType" type="int">
      <summary>
        The type of app that was installed (ie ARC, native, Crostini, etc.).
      </summary>
    </metric>
    <metric name="UninstallSource" type="int">
      <summary>
        From where the app was uninstalled.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.AppStateChanged">
    <summary>
      Recorded when a change in an app state has been detected.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Key that identifies an app.
      </summary>
    </metric>
    <metric name="AppState" type="int">
      <summary>
        Denotes a change in an app state. 0 - INACTIVE, 1 - ACTIVE, 2 - CLOSED.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.LauncherOpen">
    <summary>
      Event collected if the launcher is opened. This is recorded when a zero-
      state query is initiated.
    </summary>

  </event>

  <event name="AppDiscovery.AppLauncherResultOpened">
    <summary>
      Event collected if a result iis opened in the launcher.
    </summary>
    <metric name="FuzzyStringMatch" type="double">
      <summary>
        Score that represents how close the initial query was to the app result
        selected. A score of 1.0 represents an exact match.
      </summary>
    </metric>
    <metric name="AppId" type="raw-string">
      <summary>
        App ID that identifies an app on the client. This will only be recorded if
        the user has consented into app-sync.
      </summary>
    </metric>
    <metric name="AppName" type="raw-string">
      <summary>
        Name of the app that was launched. Names are UTF-16 string encoding.
      </summary>
    </metric>
    <metric name="ResultCategory" type="int">
      <summary>
        Enum representing the category of app the result is. This enum should map to
        ash::SearchResultType.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.Browser.OmniboxInstallIconClicked">
    <summary>
      Event recorded when the PWA Install Icon is clicked.
    </summary>
    <metric name="IPHShown" type="int">
      <summary>
        Boolean if the IPH (In-product help) was shown when the icon was clicked.
        1 if the IPH was shown 0 otherwise.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.Browser.AppInstallDialogShown">
    <summary>
      Event recorded when the PWA confirmation dialog is shown.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Identifier of the app for which the bubble view is shown.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.Browser.AppInstallDialogResult">
    <summary>
      Event capturing the result of the app install dialog shown in the browser.
      This event will be captured if the install is accepted or cancelled. If a
      user switches to a different tab, this will result in a "cancel".
    </summary>
    <metric name="WebAppInstallStatus" type="int">
      <summary>
        1 if accepted. 0 if cancelled. The status is considered cancelled if the
        bubble dialog is closed before an "Accept" status has been detected.
      </summary>
    </metric>
    <metric name="AppId" type="raw-string">
      <summary>
        Identifier of the app for which the bubble view is shown.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.Browser.ClickInstallAppFromMenu">
    <summary>
      Event recorded when a PWA is installed from the browser menu.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Identifier of the app that is being installed.
      </summary>
    </metric>
  </event>

  <event name="AppDiscovery.Browser.CreateShortcut">
    <summary>
      Event recorded when a web app or PWA is installed by creating a shortcut.
    </summary>
    <metric name="AppId" type="raw-string">
      <summary>
        Identifier of the app that is being installed.
      </summary>
    </metric>
  </event>

  <event name="UserLogin">
    <summary>
      An event to signify a user is using the system.
    </summary>

  </event>

  <event name="UserLogout">
    <summary>
      An event to signify a user explicitly logged out of the system.
    </summary>

  </event>

  <event name="SystemSuspended">
    <summary>
      An event to signify the system has gone to sleep.
    </summary>
    <metric name="Reason" type="int">
      <summary>
        The reason the system was suspended, maps to the SuspendImminent::Reason.
      </summary>
    </metric>
  </event>

  <event name="Test1">
    <summary>
      Test event used for unit tests to ensure that the code-gen for the event
      sequence project is working properly.
    </summary>
    <metric name="Metric1" type="double">
      <summary>
        Test metric1
      </summary>
    </metric>
  </event>

  <event name="NoMetricsEvent">
    <summary>
      Test event for events without metrics.
    </summary>

  </event>
</project>

<project name="TestProjectOne">
  <owner>tby@chromium.org</owner>
  <id>per-project</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for unit testing, do not use.
  </summary>

  <event name="TestEventOne">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricOne" type="hmac-string">
      <summary>
        A per-user keyed hashed value.
      </summary>
    </metric>
    <metric name="TestMetricTwo" type="int">
      <summary>
        An unhashed value, recorded as-is.
      </summary>
    </metric>
  </event>
</project>

<project name="TestProjectTwo">
  <owner>tby@chromium.org</owner>
  <id>per-project</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for unit testing, do not use.
  </summary>

  <event name="TestEventThree">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricFour" type="hmac-string">
      <summary>
        A per-user keyed hashed value.
      </summary>
    </metric>
  </event>

  <event name="TestEventTwo">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricThree" type="hmac-string">
      <summary>
        A per-user keyed hashed value.
      </summary>
    </metric>
  </event>
</project>

<project name="TestProjectThree">
  <owner>tby@chromium.org</owner>
  <id>uma</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for unit testing, do not use.
  </summary>

  <event name="TestEventFour">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricFour" type="int">
      <summary>
        An unhashed value, recorded as-is.
      </summary>
    </metric>
  </event>
</project>

<project name="TestProjectFour">
  <owner>tby@chromium.org</owner>
  <id>per-project</id>
  <scope>device</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for unit testing, do not use.
  </summary>

  <event name="TestEventFive">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricFive" type="hmac-string">
      <summary>
        A per-device keyed hashed value.
      </summary>
    </metric>
  </event>
</project>

<project name="TestProjectFive">
  <owner>tby@chromium.org</owner>
  <id>none</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for unit testing, do not use.
  </summary>

  <event name="TestEventSix">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricSix" type="raw-string">
      <summary>
        A unhashed string value.
      </summary>
    </metric>
  </event>
</project>

<project name="TestProjectSix">
  <owner>andrewbregger@google.com</owner>
  <id>none</id>
  <scope>profile</scope>
  <key-rotation>90</key-rotation>
  <summary>
    Project for unit testing, do not use.
  </summary>

  <event name="TestEventSeven">
    <summary>
      Event for unit testing, do not use.
    </summary>
    <metric name="TestMetricSeven" type="double">
      <summary>
        A floating point value.
      </summary>
    </metric>
  </event>
</project>

</structured-metrics>