1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//! # canistergeek_ic_rust
//!
//! `canistergeek_ic_rust` is the open-source tool for Internet Computer
//! to track your project canisters cycles and memory status.

use crate::api_type::{
    CollectMetricsRequestType, GetInformationRequest, GetInformationResponse, MetricsResponse,
    UpdateInformationRequest,
};
use crate::monitor::{collect_metrics_int, get_metrics};

pub mod api_type;
pub mod ic_util;
pub mod logger;
pub mod monitor;

const API_VERSION: u8 = 1;

pub fn pre_upgrade_stable_data<'a>() -> (
    monitor::PreUpgradeStableData<'a>,
    logger::PreUpgradeStableData<'a>,
) {
    let monitor_stable_data = monitor::pre_upgrade_stable_data();
    let logger_stable_data = logger::pre_upgrade_stable_data();
    (monitor_stable_data, logger_stable_data)
}

pub fn post_upgrade_stable_data(
    (monitor_stable_data, logger_stable_data): (
        monitor::PostUpgradeStableData,
        logger::PostUpgradeStableData,
    ),
) {
    monitor::post_upgrade_stable_data(monitor_stable_data);
    logger::post_upgrade_stable_data(logger_stable_data);
}

pub fn update_information(request: UpdateInformationRequest) {
    if let Some(metrics_request) = request.metrics {
        match metrics_request {
            CollectMetricsRequestType::normal => collect_metrics_int(false),
            CollectMetricsRequestType::force => collect_metrics_int(true),
        };
    }
}

pub fn get_information<'a>(request: GetInformationRequest) -> GetInformationResponse<'a> {
    let version = if request.version {
        Some(candid::Nat::from(API_VERSION))
    } else {
        None
    };

    let status = request.status.map(monitor::get_status);
    let metrics = request.metrics.map(|request| MetricsResponse {
        metrics: get_metrics(&request.parameters),
    });
    let logs = logger::get_canister_log(request.logs);

    GetInformationResponse {
        version,
        status,
        metrics,
        logs,
    }
}