use crate::sns::report::{
SnsHostError, SnsMetricsReport, SnsMetricsRequest, SnsMetricsSource,
assemble::sns_metrics_report_from_parts,
live::LiveSnsSource,
lookup::resolve_sns_lookup,
model::{sns_metrics_lookup_request, validate_sns_metrics_request},
source::canonicalize_mainnet_sns_metrics,
};
pub async fn build_sns_metrics_report(
request: &SnsMetricsRequest,
) -> Result<SnsMetricsReport, SnsHostError> {
build_sns_metrics_report_with_source(request, &LiveSnsSource::default()).await
}
pub async fn build_sns_metrics_report_with_source(
request: &SnsMetricsRequest,
source: &dyn SnsMetricsSource,
) -> Result<SnsMetricsReport, SnsHostError> {
validate_sns_metrics_request(request)?;
let lookup = resolve_sns_lookup(&sns_metrics_lookup_request(request), source).await?;
let mut metrics = source
.fetch_sns_metrics(
&lookup.fetch_request,
&lookup.sns,
request.time_window_seconds,
)
.await?;
canonicalize_mainnet_sns_metrics(
&mut metrics,
&lookup.sns.governance_canister_id,
request.time_window_seconds,
)?;
Ok(sns_metrics_report_from_parts(
lookup.fetch_request,
lookup.sns,
metrics,
))
}