sentinel_core/api/
init.rs

1//! Initialization func initialize the Sentinel's runtime environment, including:
2//! 1. override global config, from manually config or yaml file or env variable
3//! 2. initialize global logger
4//! 3. initiate core component async task, including: metric log, system statistic...
5
6#[cfg(feature = "metric_log")]
7use crate::log::metric;
8use crate::{config, config::ConfigEntity, system_metric, utils, Result};
9
10/// `init_default` initializes Sentinel using the configuration from system
11/// environment and the default value.
12#[inline]
13pub fn init_default() -> Result<()> {
14    init_sentinel(&mut String::new())
15}
16
17/// `init_with_config` initializes Sentinel using given config.
18#[inline]
19pub fn init_with_config(config_entity: ConfigEntity) -> Result<()> {
20    config_entity.check()?;
21    config::reset_global_config(config_entity);
22    #[cfg(any(feature = "env_logger", feature = "log4rs"))]
23    config::init_log()?;
24    init_core_components()
25}
26
27/// Init loads Sentinel general configuration from the given YAML file
28/// and initializes Sentinel.
29#[inline]
30pub fn init_with_config_file(config_path: String) -> Result<()> {
31    let mut config_path = config_path;
32    init_sentinel(&mut config_path)
33}
34
35#[inline]
36fn init_sentinel(config_path: &mut String) -> Result<()> {
37    // Initialize general config and logging module.
38    config::init_config_with_yaml(config_path)?;
39    init_core_components()
40}
41
42// `init_core_components` init core components with global config
43#[inline]
44fn init_core_components() -> Result<()> {
45    if config::metric_log_flush_interval_sec() > 0 {
46        #[cfg(feature = "metric_log")]
47        metric::init_task();
48    }
49
50    let system_interval = config::system_stat_collect_interval_ms();
51    let mut load_interval = system_interval;
52    let mut cpu_interval = system_interval;
53    let mut mem_interval = system_interval;
54
55    if config::load_stat_collec_interval_ms() > 0 {
56        load_interval = config::load_stat_collec_interval_ms();
57    }
58    if config::cpu_stat_collec_interval_ms() > 0 {
59        cpu_interval = config::cpu_stat_collec_interval_ms();
60    }
61    if config::memory_stat_collec_interval_ms() > 0 {
62        mem_interval = config::memory_stat_collec_interval_ms();
63    }
64
65    if load_interval > 0 {
66        system_metric::init_load_collector(load_interval);
67    }
68    if cpu_interval > 0 {
69        system_metric::init_cpu_collector(cpu_interval);
70    }
71    if mem_interval > 0 {
72        system_metric::init_memory_collector(mem_interval);
73    }
74
75    if config::use_cache_time() {
76        utils::start_time_ticker();
77    }
78
79    #[cfg(feature = "exporter")]
80    crate::exporter::init();
81
82    Ok(())
83}