Skip to main content

ic_query/ic/
mod.rs

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