Skip to main content

ic_query/ic/
mod.rs

1//! Certified IC state and official Dashboard report models, adapters, builders, and renderers.
2
3mod api_boundary_node;
4#[cfg(feature = "dashboard-host")]
5mod build;
6#[cfg(feature = "dashboard-host")]
7mod live;
8mod model;
9mod node_status;
10#[cfg(feature = "dashboard-host")]
11mod source;
12mod text;
13
14pub use api_boundary_node::{
15    DEFAULT_IC_STATE_SOURCE_ENDPOINT, IC_API_BOUNDARY_NODE_REPORT_SCHEMA_VERSION,
16    IcApiBoundaryNodeReport, IcApiBoundaryNodeRequest, IcApiBoundaryNodeRow,
17    IcCertifiedStateProvenance, MAX_IC_API_BOUNDARY_NODE_ROWS, ic_api_boundary_node_report_text,
18};
19#[cfg(feature = "ic-state-host")]
20pub use api_boundary_node::{
21    IcApiBoundaryNodeHostError, IcApiBoundaryNodeSource, IcApiBoundaryNodeSourceData,
22    IcApiBoundaryNodeSourceRequest, LiveIcStateSource, build_ic_api_boundary_node_report,
23    build_ic_api_boundary_node_report_with_source,
24};
25#[cfg(feature = "dashboard-host")]
26pub use build::{
27    build_ic_boundary_node_data_centers_report,
28    build_ic_boundary_node_data_centers_report_with_source, build_ic_canister_count_report,
29    build_ic_canister_count_report_with_source, build_ic_canister_page_report,
30    build_ic_canister_page_report_with_source, build_ic_daily_stats_report,
31    build_ic_daily_stats_report_with_source, build_ic_metric_report,
32    build_ic_metric_report_with_source, build_ic_node_status_snapshot,
33    build_ic_node_status_snapshot_with_source, build_ic_replica_version_info_report,
34    build_ic_replica_version_info_report_with_source, build_ic_replica_version_list_report,
35    build_ic_replica_version_list_report_with_source, build_icrc_indexed_count_report,
36    build_icrc_indexed_count_report_with_source, build_icrc_token_value_report,
37    build_icrc_token_value_report_with_source, build_icrc_total_supply_report,
38    build_icrc_total_supply_report_with_source,
39};
40#[cfg(feature = "dashboard-host")]
41pub use build::{build_ic_canister_report, build_ic_canister_report_with_source};
42#[cfg(feature = "dashboard-host")]
43pub use live::LiveIcSource;
44pub use model::{
45    IcBoundaryNodeDataCenterRow, IcBoundaryNodeDataCentersReport, IcBoundaryNodeDataCentersRequest,
46    IcCanisterCountReport, IcCanisterCountRequest, IcCanisterFilters, IcCanisterPageController,
47    IcCanisterPageReport, IcCanisterPageRequest, IcCanisterPageRow, IcCanisterReport,
48    IcCanisterRequest, IcCanisterUpgrade, IcDailyStatsQuery, IcDailyStatsReport,
49    IcDailyStatsRequest, IcDailyStatsRow, IcDashboardReportProvenance, IcIcrcAnalyticsRequest,
50    IcIcrcIndexedCountKind, IcIcrcIndexedCountReport, IcIcrcIndexedCountRequest,
51    IcIcrcTokenValueQuery, IcIcrcTokenValueReport, IcIcrcTokenValueRequest, IcIcrcTokenValueRow,
52    IcIcrcTotalSupplyObservation, IcIcrcTotalSupplyQuery, IcIcrcTotalSupplyReport,
53    IcIcrcTotalSupplyRequest, IcMetricKind, IcMetricObservation, IcMetricQuery, IcMetricReport,
54    IcMetricRequest, IcMetricSeries, IcReplicaVersionInfoReport, IcReplicaVersionInfoRequest,
55    IcReplicaVersionListQuery, IcReplicaVersionListReport, IcReplicaVersionListRequest,
56    IcReplicaVersionListRow, IcReplicaVersionStatus, IcReplicaVersionSubnetRollout,
57};
58#[cfg(feature = "dashboard-host")]
59pub use model::{
60    IcBoundaryNodeDataCentersSourceData, IcCanisterCountSourceData, IcCanisterPageSourceData,
61    IcCanisterSourceData, IcDailyStatsSourceData, IcHostError, IcIcrcIndexedCountSourceData,
62    IcIcrcTokenValueSourceData, IcIcrcTokenValueSourceRow, IcIcrcTotalSupplySourceData,
63    IcMetricSourceData, IcReplicaVersionInfoSourceData, IcReplicaVersionListSourceData,
64    IcSourceRequest,
65};
66#[cfg(feature = "dashboard-host")]
67pub(crate) use node_status::canonicalize_node_status_rows_with_policy;
68#[cfg(feature = "dashboard-host")]
69pub(crate) use node_status::node_status_counts;
70pub use node_status::{
71    DEFAULT_IC_NODE_STATUS_REFRESH_LOCK_STALE_SECONDS, DEFAULT_IC_NODE_STATUS_STALE_AFTER_SECONDS,
72    IC_NODE_STATUS_SCHEMA_VERSION, IcNodeAssignmentStatusCounts, IcNodeCountComparison,
73    IcNodeCountComparisonCounts, IcNodeOperationalStatus, IcNodeProviderStatusReport,
74    IcNodeProviderStatusRow, IcNodeStatusCacheEvidence, IcNodeStatusCounts,
75    IcNodeStatusGroupCounts, IcNodeStatusObservation, IcNodeStatusProjectionError,
76    IcNodeStatusReport, IcNodeStatusRow, IcNodeStatusScope, IcNodeStatusSnapshot,
77    IcNodeStatusSnapshotRequest, IcNodeStatusView, IcSubnetStatusReport, IcSubnetStatusRow,
78    MAX_IC_NODE_STATUS_ROWS, ic_node_provider_status_report_from_snapshot,
79    ic_node_provider_status_report_text, ic_node_status_report_from_snapshot,
80    ic_node_status_report_text, ic_subnet_status_report_from_snapshot,
81    ic_subnet_status_report_text,
82};
83#[cfg(feature = "dashboard-host")]
84pub use node_status::{
85    IcNodeStatusCacheRequest, IcNodeStatusHostError, IcNodeStatusReadRequest,
86    IcNodeStatusRefreshReport, IcNodeStatusRefreshRequest, IcNodeStatusSourceData,
87    build_ic_node_provider_status_report, build_ic_node_provider_status_report_with_source,
88    build_ic_node_status_report, build_ic_node_status_report_with_source,
89    build_ic_subnet_status_report, build_ic_subnet_status_report_with_source,
90    ic_node_status_cache_path, ic_node_status_refresh_lock_path,
91    ic_node_status_refresh_report_text, load_cached_ic_node_status_snapshot,
92    load_or_refresh_missing_ic_node_status_snapshot,
93    load_or_refresh_missing_ic_node_status_snapshot_with_source,
94    load_or_refresh_stale_ic_node_status_snapshot,
95    load_or_refresh_stale_ic_node_status_snapshot_with_source, refresh_ic_node_status_snapshot,
96    refresh_ic_node_status_snapshot_with_source,
97};
98#[cfg(feature = "dashboard-host")]
99pub use source::{
100    IcCanisterCollectionSource, IcCanisterSource, IcIcrcAnalyticsSource, IcMetricSource,
101    IcNetworkSource, IcNodeStatusSource, IcReplicaVersionSource,
102};
103pub use text::{
104    ic_boundary_node_data_centers_report_text, ic_canister_count_report_text,
105    ic_canister_page_report_text, ic_canister_report_text, ic_daily_stats_report_text,
106    ic_metric_report_text, ic_replica_version_info_report_text,
107    ic_replica_version_list_report_text, icrc_indexed_count_report_text,
108    icrc_token_value_report_text, icrc_total_supply_report_text,
109};
110
111/// Default base endpoint for the official IC Dashboard API.
112pub const DEFAULT_IC_DASHBOARD_SOURCE_ENDPOINT: &str = "https://ic-api.internetcomputer.org/api/v3";
113
114/// Default base endpoint for official IC Dashboard canister collection queries.
115pub const DEFAULT_IC_DASHBOARD_CANISTER_COLLECTION_SOURCE_ENDPOINT: &str =
116    "https://ic-api.internetcomputer.org/api/v4";
117
118/// Default base endpoint for the official IC Dashboard Metrics API.
119pub const DEFAULT_IC_DASHBOARD_METRICS_SOURCE_ENDPOINT: &str =
120    "https://metrics-api.internetcomputer.org/api/v1";
121
122/// Default base endpoint for the official Dashboard ICRC analytics API.
123pub const DEFAULT_ICRC_ANALYTICS_SOURCE_ENDPOINT: &str =
124    "https://icrc-api.internetcomputer.org/api/v2";
125
126/// Default base endpoint for official boundary-node data-center queries.
127pub const DEFAULT_IC_BOUNDARY_NODE_DATA_CENTERS_SOURCE_ENDPOINT: &str =
128    "https://ic-api.internetcomputer.org/api/v4";
129
130/// Maximum response-body size accepted from an official Dashboard HTTP endpoint.
131pub const MAX_IC_DASHBOARD_RESPONSE_BYTES: u64 = 8 * 1024 * 1024;
132
133/// Default row limit for one official Dashboard canister page.
134pub const DEFAULT_IC_CANISTER_PAGE_LIMIT: u16 = 50;
135
136/// Maximum row limit accepted for one official Dashboard canister page.
137pub const MAX_IC_CANISTER_PAGE_LIMIT: u16 = 100;
138
139/// Default relative window for one Dashboard metric query.
140pub const DEFAULT_IC_METRIC_WINDOW_SECS: u64 = 3_600;
141
142/// Default interval between requested Dashboard metric observations.
143pub const DEFAULT_IC_METRIC_STEP_SECS: u32 = 300;
144
145/// Earliest timestamp accepted by the official Dashboard Metrics API.
146pub const MIN_IC_METRIC_TIMESTAMP: u64 = 1_620_432_000;
147
148/// Largest step accepted by the official Dashboard Metrics API.
149pub const MAX_IC_METRIC_STEP_SECS: u32 = 259_200;
150
151/// Maximum requested observations accepted per metric series.
152pub const MAX_IC_METRIC_OBSERVATIONS_PER_SERIES: u64 = 1_000;
153
154/// Default relative window for one ICRC total-supply analytics query.
155pub const DEFAULT_ICRC_TOTAL_SUPPLY_WINDOW_SECS: u64 = 30 * 24 * 60 * 60;
156
157/// Default interval between ICRC total-supply observations.
158pub const DEFAULT_ICRC_TOTAL_SUPPLY_STEP_SECS: u32 = 86_400;
159
160/// Earliest timestamp accepted by the official Dashboard ICRC analytics API.
161pub const MIN_ICRC_ANALYTICS_TIMESTAMP: u64 = 1_620_328_530;
162
163/// Maximum requested observations accepted for one ICRC analytics series.
164pub const MAX_ICRC_ANALYTICS_OBSERVATIONS: u64 = 1_000;
165
166/// Default relative window for one ICRC token-value analytics query.
167pub const DEFAULT_ICRC_TOKEN_VALUE_WINDOW_SECS: u64 = 24 * 60 * 60;
168
169/// Default row limit for one ICRC token-value analytics query.
170pub const DEFAULT_ICRC_TOKEN_VALUE_LIMIT: u16 = 1_000;
171
172/// Largest time window accepted for one ICRC token-value query.
173pub const MAX_ICRC_TOKEN_VALUE_WINDOW_SECS: u64 = 90 * 24 * 60 * 60;
174
175/// Maximum token-value rows requested or accepted by one report.
176pub const MAX_ICRC_TOKEN_VALUE_ROWS: u16 = 1_000;
177
178/// Default relative window for one Dashboard daily-statistics query.
179pub const DEFAULT_IC_DAILY_STATS_WINDOW_SECS: u64 = 7 * 24 * 60 * 60;
180
181/// Earliest timestamp accepted by the official Dashboard daily-statistics API.
182pub const MIN_IC_DAILY_STATS_TIMESTAMP: u64 = 1_620_406_800;
183
184/// Largest time window accepted by one daily-statistics request.
185pub const MAX_IC_DAILY_STATS_WINDOW_SECS: u64 = 366 * 24 * 60 * 60;
186
187/// Maximum daily-statistics rows accepted from one source response.
188pub const MAX_IC_DAILY_STATS_ROWS: usize = 366;
189
190/// Maximum boundary-node data-center rows accepted from one source response.
191pub const MAX_IC_BOUNDARY_NODE_DATA_CENTERS: usize = 1_000;
192
193/// Default row limit for one official Dashboard replica-version page.
194pub const DEFAULT_IC_REPLICA_VERSION_PAGE_LIMIT: u16 = 50;
195
196/// Maximum row limit accepted for one official Dashboard replica-version page.
197pub const MAX_IC_REPLICA_VERSION_PAGE_LIMIT: u16 = 100;
198
199#[cfg(feature = "dashboard-host")]
200pub(crate) const IC_DASHBOARD_REPORT_SCHEMA_VERSION: u32 = 1;
201#[cfg(feature = "dashboard-host")]
202pub(crate) const IC_DASHBOARD_AUTHORITY: &str = "official_ic_dashboard_api";
203#[cfg(feature = "dashboard-host")]
204pub(crate) const IC_DASHBOARD_NETWORK: &str = "ic";
205
206#[cfg(all(test, feature = "dashboard-host"))]
207mod tests;