cobalt/
lib.rs

1// Copyright 2025 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use anyhow::{anyhow, Result};
6use memory_metrics_registry::cobalt_registry;
7
8use fidl_fuchsia_metrics as fmetrics;
9
10mod buckets;
11mod stalls;
12
13pub use buckets::collect_metrics_forever;
14pub use stalls::collect_stalls_forever;
15
16fn error_from_metrics_error(error: fmetrics::Error) -> anyhow::Error {
17    anyhow!("{:?}", error)
18}
19
20/// Provided a connection to a MetricEventLoggerFactory, request a MetricEventLogger appropriately
21/// configured to log memory metrics.
22pub async fn create_metric_event_logger(
23    factory: fmetrics::MetricEventLoggerFactoryProxy,
24) -> Result<fmetrics::MetricEventLoggerProxy> {
25    let project_spec = fmetrics::ProjectSpec {
26        customer_id: Some(cobalt_registry::CUSTOMER_ID),
27        project_id: Some(cobalt_registry::PROJECT_ID),
28        ..Default::default()
29    };
30    let (metric_event_logger, server_end) = fidl::endpoints::create_proxy();
31    factory
32        .create_metric_event_logger(&project_spec, server_end)
33        .await?
34        .map_err(error_from_metrics_error)?;
35    Ok(metric_event_logger)
36}