Crate promql_parser
source ·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 promql_parser::parser;
let promql = r#"http_requests_total{environment=~"staging|testing|development",method!="GET"} @ 1609746000 offset 5m"#;
match parser::parse(promql) {
Ok(ast) => println!("AST: {:?}", ast),
Err(info) => println!("Err: {:?}", info),
}
or you can directly run examples under this repo:
cargo run --example parser
This outputs:
ⓘ
AST: VectorSelector(VectorSelector { name: Some("http_requests_total"), matchers: Matchers { matchers: {Matcher { op: NotEqual, name: "method", value: "GET" }, Matcher { op: Re(staging|testing|development), name: "environment", value: "staging|testing|development" }, Matcher { op: Equal, name: "__name__", value: "http_requests_total" }} }, offset: Some(Pos(300s)), at: Some(At(SystemTime { tv_sec: 1609746000, tv_nsec: 0 })) })
PromQL compliance
This crate declares compatible with prometheus 0372e25, which is prometheus release v2.40 at Nov 29, 2022. Any revision on PromQL after this commit is not guaranteed.
Modules
- Label matchers and Well-known label names used by Prometheus components.
- The parser implementation.
- Internal utilities for parser.