Skip to main content

ic_query/ic/
mod.rs

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