Skip to main content

ic_query/ic/
mod.rs

1//! Certified IC state and official Dashboard report models and adapters builders.
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;
12
13pub use api_boundary_node::{
14    DEFAULT_IC_STATE_SOURCE_ENDPOINT, IC_API_BOUNDARY_NODE_REPORT_SCHEMA_VERSION,
15    IcApiBoundaryNodeReport, IcApiBoundaryNodeRequest, IcApiBoundaryNodeRow,
16    IcCertifiedStateProvenance, MAX_IC_API_BOUNDARY_NODE_ROWS,
17};
18#[cfg(feature = "ic-state-host")]
19pub use api_boundary_node::{
20    IcApiBoundaryNodeHostError, IcApiBoundaryNodeSource, IcApiBoundaryNodeSourceData,
21    IcApiBoundaryNodeSourceRequest, LiveIcStateSource, build_ic_api_boundary_node_report,
22    build_ic_api_boundary_node_report_with_source,
23};
24#[cfg(feature = "dashboard-host")]
25pub use build::{
26    build_ic_boundary_node_data_centers_report,
27    build_ic_boundary_node_data_centers_report_with_source, build_ic_canister_count_report,
28    build_ic_canister_count_report_with_source, build_ic_canister_page_report,
29    build_ic_canister_page_report_with_source, build_ic_daily_stats_report,
30    build_ic_daily_stats_report_with_source, build_ic_metric_report,
31    build_ic_metric_report_with_source, build_ic_node_provider_reward_history_report,
32    build_ic_node_provider_reward_history_report_with_source,
33    build_ic_node_provider_reward_info_report,
34    build_ic_node_provider_reward_info_report_with_source,
35    build_ic_node_provider_reward_list_report,
36    build_ic_node_provider_reward_list_report_with_source, build_ic_node_status_snapshot,
37    build_ic_node_status_snapshot_with_source, build_ic_replica_version_info_report,
38    build_ic_replica_version_info_report_with_source, build_ic_replica_version_list_report,
39    build_ic_replica_version_list_report_with_source, build_icrc_account_info_report,
40    build_icrc_account_info_report_with_source, build_icrc_account_list_report,
41    build_icrc_account_list_report_with_source, build_icrc_holder_list_report,
42    build_icrc_holder_list_report_with_source, build_icrc_indexed_count_report,
43    build_icrc_indexed_count_report_with_source, build_icrc_token_value_report,
44    build_icrc_token_value_report_with_source, build_icrc_total_supply_report,
45    build_icrc_total_supply_report_with_source,
46};
47#[cfg(feature = "dashboard-host")]
48pub use build::{build_ic_canister_report, build_ic_canister_report_with_source};
49#[cfg(feature = "dashboard-host")]
50pub use live::LiveIcSource;
51pub use model::*;
52#[cfg(feature = "dashboard-host")]
53pub(crate) use node_status::canonicalize_node_status_rows_with_policy;
54#[cfg(feature = "dashboard-host")]
55pub(crate) use node_status::node_status_counts;
56pub use node_status::{
57    DEFAULT_IC_NODE_STATUS_STALE_AFTER_SECONDS, IC_NODE_STATUS_SCHEMA_VERSION,
58    IcNodeAssignmentStatusCounts, IcNodeCountComparison, IcNodeCountComparisonCounts,
59    IcNodeOperationalStatus, IcNodeProviderStatusReport, IcNodeProviderStatusRow,
60    IcNodeStatusCacheEvidence, IcNodeStatusCounts, IcNodeStatusGroupCounts,
61    IcNodeStatusObservation, IcNodeStatusProjectionError, IcNodeStatusReport, IcNodeStatusRow,
62    IcNodeStatusScope, IcNodeStatusSnapshot, IcNodeStatusView, IcSubnetStatusReport,
63    IcSubnetStatusRow, MAX_IC_NODE_STATUS_ROWS, ic_node_provider_status_report_from_snapshot,
64    ic_node_status_report_from_snapshot, ic_subnet_status_report_from_snapshot,
65};
66#[cfg(feature = "dashboard-host")]
67pub use node_status::{
68    IcNodeStatusCacheRequest, IcNodeStatusHostError, IcNodeStatusReadRequest,
69    IcNodeStatusRefreshReport, IcNodeStatusRefreshRequest, IcNodeStatusSourceData,
70    build_ic_node_provider_status_report, build_ic_node_provider_status_report_with_source,
71    build_ic_node_status_report, build_ic_node_status_report_with_source,
72    build_ic_subnet_status_report, build_ic_subnet_status_report_with_source,
73    ic_node_status_cache_path, ic_node_status_refresh_lock_path,
74    load_cached_ic_node_status_snapshot, load_or_refresh_missing_ic_node_status_snapshot,
75    load_or_refresh_missing_ic_node_status_snapshot_with_source,
76    load_or_refresh_stale_ic_node_status_snapshot,
77    load_or_refresh_stale_ic_node_status_snapshot_with_source, refresh_ic_node_status_snapshot,
78    refresh_ic_node_status_snapshot_with_source,
79};
80#[cfg(feature = "dashboard-host")]
81pub use source::{
82    IcCanisterCollectionSource, IcCanisterSource, IcIcrcAnalyticsSource, IcIcrcIndexSource,
83    IcMetricSource, IcNetworkSource, IcNodeProviderRewardSource, IcNodeStatusSource,
84    IcReplicaVersionSource,
85};
86#[cfg(feature = "dashboard-host")]
87pub(crate) use source::{
88    canonical_request_principal, invalid_source, invalid_source_value, report_provenance,
89    validate_canonical_principal, validate_dashboard_network, validate_provenance,
90    validate_source_text,
91};
92
93/// Default base endpoint for the official IC Dashboard API.
94pub const DEFAULT_IC_DASHBOARD_SOURCE_ENDPOINT: &str = "https://ic-api.internetcomputer.org/api/v3";
95
96/// Default base endpoint for official IC Dashboard canister collection queries.
97pub const DEFAULT_IC_DASHBOARD_CANISTER_COLLECTION_SOURCE_ENDPOINT: &str =
98    "https://ic-api.internetcomputer.org/api/v4";
99
100/// Default base endpoint for the official IC Dashboard Metrics API.
101pub const DEFAULT_IC_DASHBOARD_METRICS_SOURCE_ENDPOINT: &str =
102    "https://metrics-api.internetcomputer.org/api/v1";
103
104/// Default base endpoint for the official Dashboard ICRC analytics API.
105pub const DEFAULT_ICRC_ANALYTICS_SOURCE_ENDPOINT: &str =
106    "https://icrc-api.internetcomputer.org/api/v2";
107
108/// Default base endpoint for exact official Dashboard ICRC account queries.
109pub const DEFAULT_ICRC_ACCOUNT_INFO_SOURCE_ENDPOINT: &str =
110    "https://icrc-api.internetcomputer.org/api/v1";
111
112/// Default base endpoint for official boundary-node data-center queries.
113pub const DEFAULT_IC_BOUNDARY_NODE_DATA_CENTERS_SOURCE_ENDPOINT: &str =
114    "https://ic-api.internetcomputer.org/api/v4";
115
116/// Maximum response-body size accepted from an official Dashboard HTTP endpoint.
117pub const MAX_IC_DASHBOARD_RESPONSE_BYTES: u64 = 8 * 1024 * 1024;
118
119/// Default row limit for one official Dashboard canister page.
120pub const DEFAULT_IC_CANISTER_PAGE_LIMIT: u16 = 50;
121
122/// Maximum row limit accepted for one official Dashboard canister page.
123pub const MAX_IC_CANISTER_PAGE_LIMIT: u16 = 100;
124
125/// Default relative window for one Dashboard metric query.
126pub const DEFAULT_IC_METRIC_WINDOW_SECS: u64 = 3_600;
127
128/// Default interval between requested Dashboard metric observations.
129pub const DEFAULT_IC_METRIC_STEP_SECS: u32 = 300;
130
131/// Earliest timestamp accepted by the official Dashboard Metrics API.
132pub const MIN_IC_METRIC_TIMESTAMP: u64 = 1_620_432_000;
133
134/// Largest step accepted by the official Dashboard Metrics API.
135pub const MAX_IC_METRIC_STEP_SECS: u32 = 259_200;
136
137/// Maximum requested observations accepted per metric series.
138pub const MAX_IC_METRIC_OBSERVATIONS_PER_SERIES: u64 = 1_000;
139
140/// Default relative window for one ICRC total-supply analytics query.
141pub const DEFAULT_ICRC_TOTAL_SUPPLY_WINDOW_SECS: u64 = 30 * 24 * 60 * 60;
142
143/// Default interval between ICRC total-supply observations.
144pub const DEFAULT_ICRC_TOTAL_SUPPLY_STEP_SECS: u32 = 86_400;
145
146/// Earliest timestamp accepted by the official Dashboard ICRC analytics API.
147pub const MIN_ICRC_ANALYTICS_TIMESTAMP: u64 = 1_620_328_530;
148
149/// Maximum requested observations accepted for one ICRC analytics series.
150pub const MAX_ICRC_ANALYTICS_OBSERVATIONS: u64 = 1_000;
151
152/// Default relative window for one ICRC token-value analytics query.
153pub const DEFAULT_ICRC_TOKEN_VALUE_WINDOW_SECS: u64 = 24 * 60 * 60;
154
155/// Default row limit for one ICRC token-value analytics query.
156pub const DEFAULT_ICRC_TOKEN_VALUE_LIMIT: u16 = 1_000;
157
158/// Largest time window accepted for one ICRC token-value query.
159pub const MAX_ICRC_TOKEN_VALUE_WINDOW_SECS: u64 = 90 * 24 * 60 * 60;
160
161/// Maximum token-value rows requested or accepted by one report.
162pub const MAX_ICRC_TOKEN_VALUE_ROWS: u16 = 1_000;
163
164/// Maximum rows accepted for one official ICRC account or holder index page.
165pub const MAX_ICRC_INDEX_PAGE_ROWS: u16 = 100;
166
167/// Maximum characters accepted for an opaque official ICRC index cursor or account id.
168pub const MAX_ICRC_INDEX_CURSOR_CHARS: usize = 512;
169
170/// Default relative window for one Dashboard daily-statistics query.
171pub const DEFAULT_IC_DAILY_STATS_WINDOW_SECS: u64 = 7 * 24 * 60 * 60;
172
173/// Earliest timestamp accepted by the official Dashboard daily-statistics API.
174pub const MIN_IC_DAILY_STATS_TIMESTAMP: u64 = 1_620_406_800;
175
176/// Largest time window accepted by one daily-statistics request.
177pub const MAX_IC_DAILY_STATS_WINDOW_SECS: u64 = 366 * 24 * 60 * 60;
178
179/// Maximum daily-statistics rows accepted from one source response.
180pub const MAX_IC_DAILY_STATS_ROWS: usize = 366;
181
182/// Maximum boundary-node data-center rows accepted from one source response.
183pub const MAX_IC_BOUNDARY_NODE_DATA_CENTERS: usize = 1_000;
184
185/// Default row limit for one official Dashboard replica-version page.
186pub const DEFAULT_IC_REPLICA_VERSION_PAGE_LIMIT: u16 = 50;
187
188/// Maximum row limit accepted for one official Dashboard replica-version page.
189pub const MAX_IC_REPLICA_VERSION_PAGE_LIMIT: u16 = 100;
190
191/// Default row limit for one official Dashboard node-provider reward page.
192pub const DEFAULT_IC_NODE_PROVIDER_REWARD_PAGE_LIMIT: u16 = 50;
193
194/// Maximum row limit accepted for one official Dashboard node-provider reward page.
195pub const MAX_IC_NODE_PROVIDER_REWARD_PAGE_LIMIT: u16 = 100;
196
197/// Default relative window for one node-provider reward history query.
198pub const DEFAULT_IC_NODE_PROVIDER_REWARD_HISTORY_WINDOW_SECS: u64 = 365 * 24 * 60 * 60;
199
200/// Default interval between node-provider reward history observations.
201pub const DEFAULT_IC_NODE_PROVIDER_REWARD_HISTORY_STEP_SECS: u32 = 86_400;
202
203/// Smallest step accepted by the official node-provider reward history API.
204pub const MIN_IC_NODE_PROVIDER_REWARD_HISTORY_STEP_SECS: u32 = 60;
205
206/// Largest step accepted by the official node-provider reward history API.
207pub const MAX_IC_NODE_PROVIDER_REWARD_HISTORY_STEP_SECS: u32 = 259_200;
208
209/// Maximum requested observations accepted for one node-provider reward history report.
210pub const MAX_IC_NODE_PROVIDER_REWARD_HISTORY_OBSERVATIONS: u64 = 1_000;
211
212#[cfg(feature = "dashboard-host")]
213pub(crate) const IC_DASHBOARD_REPORT_SCHEMA_VERSION: u32 = 1;
214pub(crate) const IC_DASHBOARD_AUTHORITY: &str = "official_ic_dashboard_api";
215#[cfg(feature = "dashboard-host")]
216pub(crate) const IC_DASHBOARD_NETWORK: &str = "ic";
217
218#[cfg(all(test, feature = "dashboard-host"))]
219mod tests;