1 个不稳定版本
0.1.0 | 2023年5月24日 |
---|
#9 in #request-url
30KB
479 行
IC Canister Serve
此软件包提供了一些有用的方法,通过在互联网计算机(也称为 canisters)中运行的智能合同的 http_request 端点提供日志和指标。
使用方法
此 crate 基于 ic-canister-log 和 ic-metrics-encoder,使得从 canister 的 http_request
方法提供指标和日志变得简单。
use ic_canister_log::{declare_log_buffer, log};
use ic_canister_serve::{serve_logs, serve_metrics};
use ic_cdk::api::management_canister::http_request::{CanisterHttpRequestArgument, HttpResponse};
use ic_metrics_encoder::MetricsEncoder;
// Keep up to 100 last messages.
declare_log_buffer!(name = INFO, capacity = 100);
declare_log_buffer!(name = ERROR, capacity = 100);
fn encode_metrics(w: &mut MetricsEncoder<Vec<u8>>) -> std::io::Result<()> {
w.encode_gauge("example_metric_name", 0 as f64, "Example metric description")?;
Ok(())
}
#[ic_cdk::query]
fn http_request(request: CanisterHttpRequestArgument) -> HttpResponse {
log!(INFO, "This is an INFO log");
log!(ERROR, "This is an ERROR log");
let path = match request.url.find('?') {
None => &request.url[..],
Some(index) => &request.url[..index],
};
match path {
"/metrics" => serve_metrics(encode_metrics),
"/logs" => serve_logs(request, &INFO, &ERROR),
_ => HttpResponse {
status: 404.into(),
body: "not_found".into(),
..Default::default()
}
}
}
示例请求
要请求指标,执行以下 curl 请求
$ curl https://example-canister.raw.ic0.app/metrics
要请求所有日志,执行以下 curl 请求
$ curl https://example-canister.raw.ic0.app/logs
要请求仅 INFO 日志,执行以下 curl 请求
$ curl https://example-canister.raw.ic0.app/logs?severity=Info
要请求仅 ERROR 日志,执行以下 curl 请求
$ curl https://example-canister.raw.ic0.app/logs?severity=Error
要请求在某个时间戳之前的日志,执行以下 curl 请求
$ curl https://example-canister.raw.ic0.app/logs?time=1683837947035
依赖项
~5–15MB
~159K SLoC