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_provider_reward_history_report,
33    build_ic_node_provider_reward_history_report_with_source,
34    build_ic_node_provider_reward_info_report,
35    build_ic_node_provider_reward_info_report_with_source,
36    build_ic_node_provider_reward_list_report,
37    build_ic_node_provider_reward_list_report_with_source, build_ic_node_status_snapshot,
38    build_ic_node_status_snapshot_with_source, build_ic_replica_version_info_report,
39    build_ic_replica_version_info_report_with_source, build_ic_replica_version_list_report,
40    build_ic_replica_version_list_report_with_source, build_icrc_account_info_report,
41    build_icrc_account_info_report_with_source, build_icrc_account_list_report,
42    build_icrc_account_list_report_with_source, build_icrc_holder_list_report,
43    build_icrc_holder_list_report_with_source, build_icrc_indexed_count_report,
44    build_icrc_indexed_count_report_with_source, build_icrc_token_value_report,
45    build_icrc_token_value_report_with_source, build_icrc_total_supply_report,
46    build_icrc_total_supply_report_with_source,
47};
48#[cfg(feature = "dashboard-host")]
49pub use build::{build_ic_canister_report, build_ic_canister_report_with_source};
50#[cfg(feature = "dashboard-host")]
51pub use live::LiveIcSource;
52pub use model::{
53    IcBoundaryNodeDataCenterRow, IcBoundaryNodeDataCentersReport, IcCanisterCountReport,
54    IcCanisterCountRequest, IcCanisterFilters, IcCanisterPageController, IcCanisterPageReport,
55    IcCanisterPageRequest, IcCanisterPageRow, IcCanisterReport, IcCanisterRequest,
56    IcCanisterUpgrade, IcDailyStatsQuery, IcDailyStatsReport, IcDailyStatsRequest, IcDailyStatsRow,
57    IcDashboardReportProvenance, IcDashboardRequest, IcIcrcAccountInfoReport,
58    IcIcrcAccountInfoRequest, IcIcrcAccountListQuery, IcIcrcAccountListReport,
59    IcIcrcAccountListRequest, IcIcrcAccountRow, IcIcrcAccountSort, IcIcrcAnalyticsRequest,
60    IcIcrcHolderListQuery, IcIcrcHolderListReport, IcIcrcHolderListRequest, IcIcrcHolderRow,
61    IcIcrcHolderSort, IcIcrcIndexedCountKind, IcIcrcIndexedCountReport, IcIcrcIndexedCountRequest,
62    IcIcrcTokenValueQuery, IcIcrcTokenValueReport, IcIcrcTokenValueRequest, IcIcrcTokenValueRow,
63    IcIcrcTotalSupplyObservation, IcIcrcTotalSupplyQuery, IcIcrcTotalSupplyReport,
64    IcIcrcTotalSupplyRequest, IcMetricKind, IcMetricObservation, IcMetricQuery, IcMetricReport,
65    IcMetricRequest, IcMetricSeries, IcNodeProviderRewardHistoryObservation,
66    IcNodeProviderRewardHistoryQuery, IcNodeProviderRewardHistoryReport,
67    IcNodeProviderRewardHistoryRequest, IcNodeProviderRewardInfoReport,
68    IcNodeProviderRewardInfoRequest, IcNodeProviderRewardListQuery, IcNodeProviderRewardListReport,
69    IcNodeProviderRewardListRequest, IcNodeProviderRewardRow,
70    IcNodeProviderRewardXdrConversionRate, IcReplicaVersionInfoReport, IcReplicaVersionInfoRequest,
71    IcReplicaVersionListQuery, IcReplicaVersionListReport, IcReplicaVersionListRequest,
72    IcReplicaVersionListRow, IcReplicaVersionStatus, IcReplicaVersionSubnetRollout,
73};
74#[cfg(feature = "dashboard-host")]
75pub use model::{
76    IcBoundaryNodeDataCentersSourceData, IcCanisterCountSourceData, IcCanisterPageSourceData,
77    IcCanisterSourceData, IcDailyStatsSourceData, IcHostError, IcIcrcAccountInfoSourceData,
78    IcIcrcAccountListSourceData, IcIcrcAccountSourceRow, IcIcrcHolderListSourceData,
79    IcIcrcHolderSourceRow, IcIcrcIndexedCountSourceData, IcIcrcTokenValueSourceData,
80    IcIcrcTokenValueSourceRow, IcIcrcTotalSupplySourceData, IcMetricSourceData,
81    IcNodeProviderRewardHistorySourceData, IcNodeProviderRewardInfoSourceData,
82    IcNodeProviderRewardListSourceData, IcReplicaVersionInfoSourceData,
83    IcReplicaVersionListSourceData, IcSourceRequest,
84};
85#[cfg(feature = "dashboard-host")]
86pub(crate) use node_status::canonicalize_node_status_rows_with_policy;
87#[cfg(feature = "dashboard-host")]
88pub(crate) use node_status::node_status_counts;
89pub use node_status::{
90    DEFAULT_IC_NODE_STATUS_STALE_AFTER_SECONDS, IC_NODE_STATUS_SCHEMA_VERSION,
91    IcNodeAssignmentStatusCounts, IcNodeCountComparison, IcNodeCountComparisonCounts,
92    IcNodeOperationalStatus, IcNodeProviderStatusReport, IcNodeProviderStatusRow,
93    IcNodeStatusCacheEvidence, IcNodeStatusCounts, IcNodeStatusGroupCounts,
94    IcNodeStatusObservation, IcNodeStatusProjectionError, IcNodeStatusReport, IcNodeStatusRow,
95    IcNodeStatusScope, IcNodeStatusSnapshot, IcNodeStatusView, IcSubnetStatusReport,
96    IcSubnetStatusRow, MAX_IC_NODE_STATUS_ROWS, ic_node_provider_status_report_from_snapshot,
97    ic_node_provider_status_report_text, ic_node_status_report_from_snapshot,
98    ic_node_status_report_text, ic_subnet_status_report_from_snapshot,
99    ic_subnet_status_report_text,
100};
101#[cfg(feature = "dashboard-host")]
102pub use node_status::{
103    IcNodeStatusCacheRequest, IcNodeStatusHostError, IcNodeStatusReadRequest,
104    IcNodeStatusRefreshReport, IcNodeStatusRefreshRequest, IcNodeStatusSourceData,
105    build_ic_node_provider_status_report, build_ic_node_provider_status_report_with_source,
106    build_ic_node_status_report, build_ic_node_status_report_with_source,
107    build_ic_subnet_status_report, build_ic_subnet_status_report_with_source,
108    ic_node_status_cache_path, ic_node_status_refresh_lock_path,
109    ic_node_status_refresh_report_text, load_cached_ic_node_status_snapshot,
110    load_or_refresh_missing_ic_node_status_snapshot,
111    load_or_refresh_missing_ic_node_status_snapshot_with_source,
112    load_or_refresh_stale_ic_node_status_snapshot,
113    load_or_refresh_stale_ic_node_status_snapshot_with_source, refresh_ic_node_status_snapshot,
114    refresh_ic_node_status_snapshot_with_source,
115};
116#[cfg(feature = "dashboard-host")]
117pub use source::{
118    IcCanisterCollectionSource, IcCanisterSource, IcIcrcAnalyticsSource, IcIcrcIndexSource,
119    IcMetricSource, IcNetworkSource, IcNodeProviderRewardSource, IcNodeStatusSource,
120    IcReplicaVersionSource,
121};
122#[cfg(feature = "dashboard-host")]
123pub(crate) use source::{
124    canonical_request_principal, invalid_source, invalid_source_value, report_provenance,
125    validate_canonical_principal, validate_dashboard_network, validate_provenance,
126    validate_source_text,
127};
128pub(crate) use text::dashboard_provenance_lines;
129pub use text::{
130    ic_boundary_node_data_centers_report_text, ic_canister_count_report_text,
131    ic_canister_page_report_text, ic_canister_report_text, ic_daily_stats_report_text,
132    ic_metric_report_text, ic_node_provider_reward_history_report_text,
133    ic_node_provider_reward_info_report_text, ic_node_provider_reward_list_report_text,
134    ic_replica_version_info_report_text, ic_replica_version_list_report_text,
135    icrc_account_info_report_text, icrc_account_list_report_text, icrc_holder_list_report_text,
136    icrc_indexed_count_report_text, icrc_token_value_report_text, icrc_total_supply_report_text,
137};
138
139/// Default base endpoint for the official IC Dashboard API.
140pub const DEFAULT_IC_DASHBOARD_SOURCE_ENDPOINT: &str = "https://ic-api.internetcomputer.org/api/v3";
141
142/// Default base endpoint for official IC Dashboard canister collection queries.
143pub const DEFAULT_IC_DASHBOARD_CANISTER_COLLECTION_SOURCE_ENDPOINT: &str =
144    "https://ic-api.internetcomputer.org/api/v4";
145
146/// Default base endpoint for the official IC Dashboard Metrics API.
147pub const DEFAULT_IC_DASHBOARD_METRICS_SOURCE_ENDPOINT: &str =
148    "https://metrics-api.internetcomputer.org/api/v1";
149
150/// Default base endpoint for the official Dashboard ICRC analytics API.
151pub const DEFAULT_ICRC_ANALYTICS_SOURCE_ENDPOINT: &str =
152    "https://icrc-api.internetcomputer.org/api/v2";
153
154/// Default base endpoint for exact official Dashboard ICRC account queries.
155pub const DEFAULT_ICRC_ACCOUNT_INFO_SOURCE_ENDPOINT: &str =
156    "https://icrc-api.internetcomputer.org/api/v1";
157
158/// Default base endpoint for official boundary-node data-center queries.
159pub const DEFAULT_IC_BOUNDARY_NODE_DATA_CENTERS_SOURCE_ENDPOINT: &str =
160    "https://ic-api.internetcomputer.org/api/v4";
161
162/// Maximum response-body size accepted from an official Dashboard HTTP endpoint.
163pub const MAX_IC_DASHBOARD_RESPONSE_BYTES: u64 = 8 * 1024 * 1024;
164
165/// Default row limit for one official Dashboard canister page.
166pub const DEFAULT_IC_CANISTER_PAGE_LIMIT: u16 = 50;
167
168/// Maximum row limit accepted for one official Dashboard canister page.
169pub const MAX_IC_CANISTER_PAGE_LIMIT: u16 = 100;
170
171/// Default relative window for one Dashboard metric query.
172pub const DEFAULT_IC_METRIC_WINDOW_SECS: u64 = 3_600;
173
174/// Default interval between requested Dashboard metric observations.
175pub const DEFAULT_IC_METRIC_STEP_SECS: u32 = 300;
176
177/// Earliest timestamp accepted by the official Dashboard Metrics API.
178pub const MIN_IC_METRIC_TIMESTAMP: u64 = 1_620_432_000;
179
180/// Largest step accepted by the official Dashboard Metrics API.
181pub const MAX_IC_METRIC_STEP_SECS: u32 = 259_200;
182
183/// Maximum requested observations accepted per metric series.
184pub const MAX_IC_METRIC_OBSERVATIONS_PER_SERIES: u64 = 1_000;
185
186/// Default relative window for one ICRC total-supply analytics query.
187pub const DEFAULT_ICRC_TOTAL_SUPPLY_WINDOW_SECS: u64 = 30 * 24 * 60 * 60;
188
189/// Default interval between ICRC total-supply observations.
190pub const DEFAULT_ICRC_TOTAL_SUPPLY_STEP_SECS: u32 = 86_400;
191
192/// Earliest timestamp accepted by the official Dashboard ICRC analytics API.
193pub const MIN_ICRC_ANALYTICS_TIMESTAMP: u64 = 1_620_328_530;
194
195/// Maximum requested observations accepted for one ICRC analytics series.
196pub const MAX_ICRC_ANALYTICS_OBSERVATIONS: u64 = 1_000;
197
198/// Default relative window for one ICRC token-value analytics query.
199pub const DEFAULT_ICRC_TOKEN_VALUE_WINDOW_SECS: u64 = 24 * 60 * 60;
200
201/// Default row limit for one ICRC token-value analytics query.
202pub const DEFAULT_ICRC_TOKEN_VALUE_LIMIT: u16 = 1_000;
203
204/// Largest time window accepted for one ICRC token-value query.
205pub const MAX_ICRC_TOKEN_VALUE_WINDOW_SECS: u64 = 90 * 24 * 60 * 60;
206
207/// Maximum token-value rows requested or accepted by one report.
208pub const MAX_ICRC_TOKEN_VALUE_ROWS: u16 = 1_000;
209
210/// Maximum rows accepted for one official ICRC account or holder index page.
211pub const MAX_ICRC_INDEX_PAGE_ROWS: u16 = 100;
212
213/// Maximum characters accepted for an opaque official ICRC index cursor or account id.
214pub const MAX_ICRC_INDEX_CURSOR_CHARS: usize = 512;
215
216/// Default relative window for one Dashboard daily-statistics query.
217pub const DEFAULT_IC_DAILY_STATS_WINDOW_SECS: u64 = 7 * 24 * 60 * 60;
218
219/// Earliest timestamp accepted by the official Dashboard daily-statistics API.
220pub const MIN_IC_DAILY_STATS_TIMESTAMP: u64 = 1_620_406_800;
221
222/// Largest time window accepted by one daily-statistics request.
223pub const MAX_IC_DAILY_STATS_WINDOW_SECS: u64 = 366 * 24 * 60 * 60;
224
225/// Maximum daily-statistics rows accepted from one source response.
226pub const MAX_IC_DAILY_STATS_ROWS: usize = 366;
227
228/// Maximum boundary-node data-center rows accepted from one source response.
229pub const MAX_IC_BOUNDARY_NODE_DATA_CENTERS: usize = 1_000;
230
231/// Default row limit for one official Dashboard replica-version page.
232pub const DEFAULT_IC_REPLICA_VERSION_PAGE_LIMIT: u16 = 50;
233
234/// Maximum row limit accepted for one official Dashboard replica-version page.
235pub const MAX_IC_REPLICA_VERSION_PAGE_LIMIT: u16 = 100;
236
237/// Default row limit for one official Dashboard node-provider reward page.
238pub const DEFAULT_IC_NODE_PROVIDER_REWARD_PAGE_LIMIT: u16 = 50;
239
240/// Maximum row limit accepted for one official Dashboard node-provider reward page.
241pub const MAX_IC_NODE_PROVIDER_REWARD_PAGE_LIMIT: u16 = 100;
242
243/// Default relative window for one node-provider reward history query.
244pub const DEFAULT_IC_NODE_PROVIDER_REWARD_HISTORY_WINDOW_SECS: u64 = 365 * 24 * 60 * 60;
245
246/// Default interval between node-provider reward history observations.
247pub const DEFAULT_IC_NODE_PROVIDER_REWARD_HISTORY_STEP_SECS: u32 = 86_400;
248
249/// Smallest step accepted by the official node-provider reward history API.
250pub const MIN_IC_NODE_PROVIDER_REWARD_HISTORY_STEP_SECS: u32 = 60;
251
252/// Largest step accepted by the official node-provider reward history API.
253pub const MAX_IC_NODE_PROVIDER_REWARD_HISTORY_STEP_SECS: u32 = 259_200;
254
255/// Maximum requested observations accepted for one node-provider reward history report.
256pub const MAX_IC_NODE_PROVIDER_REWARD_HISTORY_OBSERVATIONS: u64 = 1_000;
257
258#[cfg(feature = "dashboard-host")]
259pub(crate) const IC_DASHBOARD_REPORT_SCHEMA_VERSION: u32 = 1;
260pub(crate) const IC_DASHBOARD_AUTHORITY: &str = "official_ic_dashboard_api";
261#[cfg(feature = "dashboard-host")]
262pub(crate) const IC_DASHBOARD_NETWORK: &str = "ic";
263
264#[cfg(all(test, feature = "dashboard-host"))]
265mod tests;