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 fn build_sns_metrics_report(
request: &SnsMetricsRequest,
) -> Result<SnsMetricsReport, SnsHostError> {
build_sns_metrics_report_with_source(request, &LiveSnsSource)
}
pub 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)?;
let mut metrics = source.fetch_sns_metrics(
&lookup.fetch_request,
&lookup.sns,
request.time_window_seconds,
)?;
canonicalize_mainnet_sns_metrics(
&mut metrics,
&lookup.sns.governance_canister_id,
request.time_window_seconds,
)?;
Ok(sns_metrics_report_from_parts(
lookup.list,
lookup.id,
lookup.sns,
metrics,
))
}