5709c45a50
* Fixed typo in node_status_cache constant * ibid * Moved some caching stuff around so I can see what depends on what * Finishing merge of conflicted files * Minor smoothing * Got cache reads working for circ supply and refactored common cache * Refactored nyxd client usages to make things bit more clear * Moved caching support stuff into the support folder * Moved storage code into support module * Removed dead code * Tweaks * Handling cases a little more nicely in circulating supply api * Renamed nymd_client to nyxd_client * Pulled CacheNotification into the caching support module * Pulled some domain-specific helpers out of cache refresher * Moving some more helper methods out of the cache refresher * Deleting unused code * Extracted a few more functions out of the cache refresher * A few comments as breadcrumbs * Renaming the anemic "helpers" to "node_sets" * Renaming the validator_cache module to nym_contract_cache * Renaming nym contract cache stuff to make things clearer * Renamging a few things in comments * Renaming validator_cache to nym_contract_cache * foomp * Started refactoring http and cli * Extracted cli arg parsing into its own module * Cleanup * Extracted start methods into various modules to clean main up * WIP commit * Build working, swagger not * Fixed swagger docs metadata * Removed log statement * Circulating supply cache now working with simple logic * Fixed up circulating supply method names * Starting to work in some (wrong) constants * Documented the cache * Renaming circulating-supply route * nym-api compiling after the rebasing but most likely not fully working yet * removed unused imports * only starting RewardedSetUpdater if the config flag is set * nym-api compiling with coconut feature * removed redundant process_runner * removed generic aspect of nym-api nyxd::Client * signle entry point for starting nym_contract_cache * do not eagerly grab instances of managed state * inlining openapi route spec * CirculatingSupplyResponse type * fixed compilation of coconut tests * calculating circulating supply based on mixmining reserve and vesting tokens * separated different variants of caching intervals * allow nym-api to specify address of the vesting contract * fixed types export * renamed the query on the vesting contract * reorganised startup procedure and made all start methods independent from rocket * cleaned up startup procedure for nym-api * startup checks for rewarding permisssions * updated changelog * added config flag to control whether circulating supply should be updated Co-authored-by: Dave Hrycyszyn <futurechimp@users.noreply.github.com>
90 lines
3.2 KiB
Rust
90 lines
3.2 KiB
Rust
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
pub(crate) use cache::NodeStatusCache;
|
|
use okapi::openapi3::OpenApi;
|
|
use rocket::Route;
|
|
use rocket_okapi::{openapi_get_routes_spec, settings::OpenApiSettings};
|
|
use std::time::Duration;
|
|
use task::TaskManager;
|
|
|
|
use crate::{
|
|
nym_contract_cache::cache::NymContractCache,
|
|
support::{self, config::Config, storage},
|
|
};
|
|
|
|
use self::cache::refresher::NodeStatusCacheRefresher;
|
|
pub(crate) mod cache;
|
|
pub(crate) mod helpers;
|
|
pub(crate) mod local_guard;
|
|
pub(crate) mod models;
|
|
pub(crate) mod reward_estimate;
|
|
pub(crate) mod routes;
|
|
pub(crate) mod uptime_updater;
|
|
pub(crate) mod utils;
|
|
|
|
pub(crate) const FIFTEEN_MINUTES: Duration = Duration::from_secs(900);
|
|
pub(crate) const ONE_HOUR: Duration = Duration::from_secs(3600);
|
|
pub(crate) const ONE_DAY: Duration = Duration::from_secs(86400);
|
|
|
|
pub(crate) fn node_status_routes(
|
|
settings: &OpenApiSettings,
|
|
enabled: bool,
|
|
) -> (Vec<Route>, OpenApi) {
|
|
if enabled {
|
|
openapi_get_routes_spec![
|
|
settings: routes::gateway_report,
|
|
routes::gateway_uptime_history,
|
|
routes::gateway_core_status_count,
|
|
routes::mixnode_report,
|
|
routes::mixnode_uptime_history,
|
|
routes::mixnode_core_status_count,
|
|
routes::get_mixnode_status,
|
|
routes::get_mixnode_reward_estimation,
|
|
routes::compute_mixnode_reward_estimation,
|
|
routes::get_mixnode_stake_saturation,
|
|
routes::get_mixnode_inclusion_probability,
|
|
routes::get_mixnode_avg_uptime,
|
|
routes::get_mixnode_inclusion_probabilities,
|
|
routes::get_mixnodes_detailed,
|
|
routes::get_rewarded_set_detailed,
|
|
routes::get_active_set_detailed,
|
|
]
|
|
} else {
|
|
// in the minimal variant we would not have access to endpoints relying on existence
|
|
// of the network monitor and the associated storage
|
|
openapi_get_routes_spec![
|
|
settings: routes::get_mixnode_status,
|
|
routes::get_mixnode_stake_saturation,
|
|
routes::get_mixnode_inclusion_probability,
|
|
routes::get_mixnode_inclusion_probabilities,
|
|
routes::get_mixnodes_detailed,
|
|
routes::get_rewarded_set_detailed,
|
|
routes::get_active_set_detailed,
|
|
]
|
|
}
|
|
}
|
|
|
|
/// Spawn the node status cache refresher.
|
|
///
|
|
/// It is primarily refreshed in-sync with the nym contract cache, however provide a fallback
|
|
/// caching interval that is twice the nym contract cache
|
|
pub(crate) fn start_cache_refresh(
|
|
config: &Config,
|
|
nym_contract_cache_state: &NymContractCache,
|
|
node_status_cache_state: &NodeStatusCache,
|
|
storage: Option<&storage::NymApiStorage>,
|
|
nym_contract_cache_listener: tokio::sync::watch::Receiver<support::caching::CacheNotification>,
|
|
shutdown: &TaskManager,
|
|
) {
|
|
let mut nym_api_cache_refresher = NodeStatusCacheRefresher::new(
|
|
node_status_cache_state.to_owned(),
|
|
config.get_node_status_caching_interval(),
|
|
nym_contract_cache_state.to_owned(),
|
|
nym_contract_cache_listener,
|
|
storage.cloned(),
|
|
);
|
|
let shutdown_listener = shutdown.subscribe();
|
|
tokio::spawn(async move { nym_api_cache_refresher.run(shutdown_listener).await });
|
|
}
|