# prometheus-http-api-rs 0.0.1 A simple library to pull data from prometheus using its API [![Rust](https://github.com/sebosp/prometheus-http-api-rs/actions/workflows/rust.yml/badge.svg)](https://github.com/sebosp/prometheus-http-api-rs/actions/workflows/rust.yml) [![Crates.io](https://img.shields.io/crates/v/prometheus-http-api-rs.svg)](https://crates.io/crates/prometheus-http-api-rs) [![Documentation](https://docs.rs/prometheus-http-api-rs/badge.svg)][dox] Upcoming docs [crate documentation][dox]. [dox]: https://docs.rs/prometheus-http-api-rs ## Usage Add dependency in `Cargo.toml`: ```toml [dependencies] prometheus-http-api-rs = "0.0.1" ``` Use `prometheus_http_api_rs` ```rust use prometheus_http_api_rs::*; #[tokio::main] async fn main() { let query = PrometheusQuery::Instant(PrometheusInstantQuery::new("up".to_string())); let request = PrometheusDataSourceBuilder::new("localhost:9090".to_string()) .with_query(query) .build() .unwrap(); let res_json = request.get().await; tracing::info!("{:?}", res_json); } ``` # License - Apache License, Version 2.0 ([LICENSE](LICENSE) or http://apache.org/licenses/LICENSE-2.0) ## TODO ### To be addressed soon - Missing fallback to POST, some queries can grow paths the GET params limits. - Missing `Instant` support, currently we only support epochs as params. - Querying metadata: `/api/v1/series` or `/api/v1/labels` `/api/v1/label//values` - Target state `/api/v1/targets` - AlertManagers `/api/v1/alertmanagers` - Status Config `/api/v1/status/config` - Status flags `/api/v1/status/flags` - Runtime info `/api/v1/status/runtimeinfo`, available since prometheus v2.2 - Build info `/api/v1/status/buildinfo`, available since prometheus v2.14 - TSDB metrics `/api/v1/status/tsdb`, available since prometheus v2.14 - WAL Replay status `/api/v1/status/walreplay` available since prometheus v2.15 ### Not stable endpoints: - Querying exemplars `/api/v1/query_exemplars` (experimental) - Rules `/api/v1/rules` (doesn't have stability guarantees from prometheus v1) - Alerts `/api/v1/alerts` (doesn't have stability guarantees from prometheus v1) - Target Metadata `/api/v1/targets/metadata` (experimental) - Metric Metadata `/api/v1/metadata`(experimental) ### Admin endpoints Since prometheus v2.18, require `-web.enable-admin-api` - Snapshots `/api/v1/admin/tsdb/snapshot` - Delete timeseries `/api/v1/admin/tsdb/delete_series` - Clean tombstones `/api/v1/admin/tsdb/clean_tombstones` ### Write endpoint Requires `--web.enable-remote-write-receiver`. - Prometheus remote write protocol `/api/v1/write` since prometheus v2.33 not efficient way to push data. ## NOTES: - The `json::Value` is not necessarily a number, it may be a string: > JSON does not support special float values such as NaN, Inf, and -Inf, so sample values > are transferred as quoted JSON strings rather than raw numbers.