use super::requests::{
IcCanisterFilters, IcDailyStatsQuery, IcIcrcAccountListQuery, IcIcrcHolderListQuery,
IcIcrcIndexedCountKind, IcIcrcTokenValueQuery, IcIcrcTotalSupplyQuery, IcMetricQuery,
IcNodeProviderRewardHistoryQuery, IcNodeProviderRewardListQuery, IcReplicaVersionListQuery,
};
use serde::Serialize;
use std::{collections::BTreeMap, 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 IcIcrcAccountRow {
pub account_id: String,
pub owner: String,
pub subaccount: String,
pub balance_base_units: String,
pub total_transactions: u64,
pub created_at_unix_secs: u64,
pub created_at_subsec_nanos: u32,
pub ledger_canister_id: String,
pub latest_transaction_index: u64,
pub dashboard_updated_at: String,
pub active_fee_collector: bool,
pub fee_collector_block_ranges: Vec<Vec<serde_json::Value>>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcAccountListReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub ledger_canister_id: String,
#[serde(flatten)]
pub query: IcIcrcAccountListQuery,
pub returned_count: usize,
pub previous_cursor: Option<String>,
pub next_cursor: Option<String>,
pub rows: Vec<IcIcrcAccountRow>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcAccountInfoReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub account: IcIcrcAccountRow,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcHolderRow {
pub principal: String,
pub balance_base_units: String,
pub total_transactions: u64,
pub created_at_unix_secs: u64,
pub created_at_subsec_nanos: u32,
pub ledger_canister_id: String,
pub latest_transaction_index: u64,
pub percentage: serde_json::Value,
pub value_usd: serde_json::Value,
pub dashboard_updated_at: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcIcrcHolderListReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
pub ledger_canister_id: String,
#[serde(flatten)]
pub query: IcIcrcHolderListQuery,
pub returned_count: usize,
pub previous_cursor: Option<String>,
pub next_cursor: Option<String>,
pub rows: Vec<IcIcrcHolderRow>,
}
#[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, Debug, Eq, PartialEq, Serialize)]
pub struct IcNodeProviderRewardXdrConversionRate {
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp_unix_secs: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub xdr_permyriad_per_icp: Option<u64>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcNodeProviderRewardRow {
pub reward_id: u64,
pub amount_e8s: u64,
pub details: BTreeMap<String, serde_json::Value>,
pub maximum_node_provider_rewards_e8s: Option<u64>,
pub minimum_xdr_permyriad_per_icp: Option<u64>,
pub node_provider_id: String,
pub proposal_id: Option<u64>,
pub registry_version: Option<u64>,
pub reward_mode: String,
pub reward_timestamp_unix_secs: u64,
pub dashboard_updated_at: String,
pub xdr_conversion_rate: IcNodeProviderRewardXdrConversionRate,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcNodeProviderRewardListReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub query: IcNodeProviderRewardListQuery,
pub resolved_max_reward_index: u64,
pub total_reward_records: u64,
pub returned_count: usize,
pub next_offset_hint: Option<u64>,
pub pages_may_overlap: bool,
pub rows: Vec<IcNodeProviderRewardRow>,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcNodeProviderRewardInfoReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub reward: IcNodeProviderRewardRow,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcNodeProviderRewardHistoryObservation {
pub timestamp_unix_secs: u64,
pub amount_e8s: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
pub struct IcNodeProviderRewardHistoryReport {
#[serde(flatten)]
pub provenance: IcDashboardReportProvenance,
#[serde(flatten)]
pub query: IcNodeProviderRewardHistoryQuery,
pub requested_observation_limit: u64,
pub returned_observation_count: usize,
pub observations: Vec<IcNodeProviderRewardHistoryObservation>,
}
#[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>,
}