mod render;
use ic_host_text::escape::terminal_text;
use icydb::__macro::RpcMethod;
use crate::{
cli::{CanisterTarget, MetricsArgs},
icp::{IcpCallKind, require_created_canister},
observability::call_endpoint,
};
pub(super) fn run_metrics_command(args: MetricsArgs) -> Result<(), String> {
let target = args.target();
require_created_canister(target.environment(), target.canister_name())?;
if args.reset() {
return run_metrics_reset(target);
}
let report = call_endpoint::<icydb::metrics::MetricsReport>(
target.environment(),
target.canister_name(),
RpcMethod::Metrics,
(),
"metrics",
IcpCallKind::Query,
)?;
print!("{}", render_metrics_report(&report));
Ok(())
}
fn run_metrics_reset(target: &CanisterTarget) -> Result<(), String> {
call_endpoint::<()>(
target.environment(),
target.canister_name(),
RpcMethod::MetricsReset,
(),
"metrics reset",
IcpCallKind::Update,
)?;
println!(
"Reset metrics on canister '{}' in environment '{}'.",
terminal_text(target.canister_name()),
terminal_text(target.environment()),
);
Ok(())
}
pub(super) fn render_metrics_report(report: &icydb::metrics::MetricsReport) -> String {
render::render_metrics_report(report)
}