use crate::sns::report::{
SnsHostError, SnsMetricsReport, SnsMetricsRequest, SnsMetricsSource,
assemble::sns_metrics_report_from_parts, live::LiveSnsSource, lookup::resolve_sns_lookup,
model::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(&request.lookup, 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,
))
}