blob: e6abada41c7929ffc8f4df16ce61eb1fa7f5f82e [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
anyhow::{Context, Error},
base64,
fidl_fuchsia_feedback::{DataProviderMarker, GetSnapshotParameters},
fuchsia_component::client::connect_to_service,
fuchsia_zircon::DurationNum,
serde_json,
};
/// Facade providing access to feedback interface.
#[derive(Debug)]
pub struct FeedbackDataProviderFacade {}
impl FeedbackDataProviderFacade {
pub fn new() -> FeedbackDataProviderFacade {
FeedbackDataProviderFacade {}
}
pub async fn get_snapshot(&self) -> Result<serde_json::Value, Error> {
let data_provider =
connect_to_service::<DataProviderMarker>().context("connect to DataProvider")?;
let params = GetSnapshotParameters {
collection_timeout_per_data: Some(2.minutes().into_nanos()),
..GetSnapshotParameters::EMPTY
};
let snapshot = data_provider.get_snapshot(params).await.context("get snapshot")?;
match snapshot.archive {
Some(archive) => {
let mut buf = vec![0; archive.value.size as usize];
archive.value.vmo.read(&mut buf, 0).context("reading vmo")?;
let result = base64::encode(&buf);
return Ok(serde_json::json!({
"zip": result,
}));
}
None => Err(format_err!("No zip file data in the snapshot response")),
}
}
}