use super::requests::{
IcCanisterFilters, IcDailyStatsQuery, IcIcrcIndexedCountKind, IcIcrcTokenValueQuery,
IcIcrcTotalSupplyQuery, IcMetricQuery, IcReplicaVersionListQuery,
};
use serde::Serialize;
use std::fmt;
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcCanisterUpgrade {
pub executed_timestamp_seconds: u64,
pub module_hash: String,
pub proposal_id: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcDashboardReportProvenance {
pub schema_version: u32,
pub network: String,
pub authority: String,
pub source_endpoint: String,
pub fetched_at: String,
pub fetched_by: String,
pub certified: bool,
pub point_in_time_guaranteed: bool,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcMetricObservation {
pub timestamp_unix_secs: u64,
pub value: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcMetricSeries {
pub name: String,
pub observations: Vec<IcMetricObservation>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcMetricReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub query: IcMetricQuery,
pub returned_series_count: usize,
pub returned_observation_count: usize,
pub series: Vec<IcMetricSeries>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcTotalSupplyObservation {
pub timestamp_unix_secs: u64,
pub total_supply_base_units: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcTotalSupplyReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub ledger_canister_id: String,
#[serde(flatten)]
pub query: IcIcrcTotalSupplyQuery,
pub requested_observation_limit: u64,
pub returned_observation_count: usize,
pub observations: Vec<IcIcrcTotalSupplyObservation>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcIndexedCountReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub ledger_canister_id: String,
pub kind: IcIcrcIndexedCountKind,
pub total: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcTokenValueRow {
pub price: Option<String>,
pub volume_24h: Option<String>,
pub price_usd: Option<String>,
pub volume_24h_usd: Option<String>,
pub source: Option<String>,
pub source_url: Option<String>,
pub timestamp_unix_secs: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcTokenValueReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub ledger_canister_id: String,
#[serde(flatten)]
pub query: IcIcrcTokenValueQuery,
pub returned_row_count: usize,
pub limit_reached: bool,
pub rows: Vec<IcIcrcTokenValueRow>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcDailyStatsRow {
pub day: String,
pub timestamp_unix_secs: u64,
pub average_query_transactions_per_second: String,
pub average_update_transactions_per_second: String,
pub average_transactions_per_second: String,
pub max_query_transactions_per_second: String,
pub max_update_transactions_per_second: String,
pub max_total_transactions_per_second: String,
pub blocks_per_second_average: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcDailyStatsReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub query: IcDailyStatsQuery,
pub returned_day_count: usize,
pub rows: Vec<IcDailyStatsRow>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcBoundaryNodeDataCenterRow {
pub dc_id: String,
pub name: String,
pub owner: String,
pub region: String,
pub latitude: String,
pub longitude: String,
pub total_nodes: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcBoundaryNodeDataCentersReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub data_center_count: usize,
pub total_node_count: u64,
pub rows: Vec<IcBoundaryNodeDataCenterRow>,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum IcReplicaVersionStatus {
Adopted,
Executed,
Open,
}
impl IcReplicaVersionStatus {
#[must_use]
pub const fn as_dashboard_value(self) -> &'static str {
match self {
Self::Adopted => "ADOPTED",
Self::Executed => "EXECUTED",
Self::Open => "OPEN",
}
}
}
impl fmt::Display for IcReplicaVersionStatus {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str(self.as_dashboard_value())
}
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcReplicaVersionSubnetRollout {
pub subnet_id: String,
pub proposal_id: u64,
pub executed_timestamp_seconds: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcReplicaVersionListRow {
pub replica_version_id: String,
pub proposal_id: u64,
pub executed_timestamp_seconds: u64,
pub status: IcReplicaVersionStatus,
pub title: String,
pub url: String,
pub subnet_count: usize,
pub subnets: Vec<IcReplicaVersionSubnetRollout>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcReplicaVersionListReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub query: IcReplicaVersionListQuery,
pub resolved_max_proposal_index: u64,
pub total_proposals: u64,
pub returned_count: usize,
pub next_offset: Option<u64>,
pub rows: Vec<IcReplicaVersionListRow>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcReplicaVersionInfoReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub replica_version_id: String,
pub proposal_id: u64,
pub executed_timestamp_seconds: u64,
pub title: String,
pub url: String,
pub summary: String,
pub subnet_count: usize,
pub subnets: Vec<IcReplicaVersionSubnetRollout>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcCanisterReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub canister_id: String,
pub dashboard_id: u64,
pub canister_type: Option<String>,
pub name: String,
pub subnet_id: String,
pub controllers: Vec<String>,
pub language: String,
pub module_hash: String,
pub dashboard_updated_at: String,
pub upgrade_count: Option<usize>,
pub upgrades: Option<Vec<IcCanisterUpgrade>>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcCanisterCountReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub filters: IcCanisterFilters,
pub total: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcCanisterPageController {
pub principal_id: String,
pub raw_metadata: Option<String>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcCanisterPageRow {
pub canister_id: String,
pub dashboard_id: u64,
pub canister_type: Option<String>,
pub name: String,
pub subnet_id: String,
pub controllers: Vec<IcCanisterPageController>,
pub language: String,
pub module_hash: String,
pub dashboard_updated_at: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcCanisterPageReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub filters: IcCanisterFilters,
pub requested_limit: u16,
pub returned_count: usize,
pub after: Option<String>,
pub before: Option<String>,
pub previous_cursor: Option<String>,
pub next_cursor: Option<String>,
pub rows: Vec<IcCanisterPageRow>,
}