Expand description
§PromQL Lexer and Parser
The goal of this project is to build a PromQL lexer and parser capable of parsing PromQL that conforms with Prometheus Query.
§Example
The parser entry point is parser::parse()
, which takes a string slice of Promql
and returns the parse result, either an AST (parser::Expr
) or an error message.
Other query parameters like time range and step are included in parser::EvalStmt
.
use bk_promql_parser::parser;
let promql = r#"http_requests_total{environment=~"staging|testing|development",method!="GET"} offset 5m"#;
match parser::parse(promql) {
Ok(expr) => {
println!("Prettify:\n\n{}", expr.prettify());
println!("AST:\n{expr:?}");
}
Err(info) => println!("Err: {info:?}"),
}
or you can directly run examples under this repo:
cargo run --example parser
This outputs:
ⓘ
Prettify:
http_requests_total{environment=~"staging|testing|development",method!="GET"} offset 5m
AST:
VectorSelector(VectorSelector { name: Some("http_requests_total"), matchers: Matchers { matchers: [Matcher { op: Re(staging|testing|development), name: "environment", value: "staging|testing|development" }, Matcher { op: NotEqual, name: "method", value: "GET" }] }, offset: Some(Pos(300s)), at: None })
§PromQL compliance
This crate declares compatible with prometheus v2.45.0, which is released at 2023-06-23. Any revision on PromQL after this commit is not guaranteed.