Crate bk_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 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.

Modules§

label
Label matchers and Well-known label names used by Prometheus components.
parser
The parser implementation.
util
Internal utilities for parser.