Crate promql

Source
Expand description

This crate allows one to parse PromQL query into some AST.

See official documentation for query syntax description.

§Example


use promql::*;

let opts = ParserOptions::new()
	.allow_dots(false)
	.build();

// query can also be `&str`
let query: &[u8] = br#"
	sum(1 - something_used{env="production"} / something_total) by (instance)
	and ignoring (instance)
	sum(rate(some_queries{instance=~"localhost\\d+"} [5m])) > 100
"#;
let ast = parse(query, &opts).unwrap(); // or show user that their query is invalid

// now we can look for all sorts of things

// AST can represent an operator
if let Node::Operator { op: Op::And(op_mod), args } = ast {
	// operators can have modifiers
	assert_eq!(op_mod, Some(OpMod {
		action: OpModAction::Ignore,
		labels: vec!["instance".to_string()],
		group: None,
	}));

	// aggregation functions like sum are represented as functions with optional modifiers (`by (label1, …)`/`without (…)`)
	if let Node::Function { ref name, ref aggregation, ref args } = args[0] {
		assert_eq!(*name, "sum".to_string());
		assert_eq!(*aggregation, Some(AggregationMod {
			action: AggregationAction::By,
			labels: vec!["instance".to_string()],
		}));

		// …
	}
} else {
	panic!("top operator is not an 'and'");
}

§Types

This parser emits Vec<u8> for most string literals because PromQL, like Go, allows raw byte sequences to be included in the string literals (e.g. {omg='∞'} is equivalent to both {omg='\u221e'} and {omg='\xe2\x88\x9e'}).

Structs§

AggregationMod
LabelMatch
Single label filter.
OpGroupMod
Vector grouping operator modifier (group_left(…)/group_right(…)).
OpMod
Vector matching operator modifier (on (…)/ignoring (…)).
ParserOptions
Options that allow or disallow certain query language features.
ParserOptionsBuilder
A builder for ParserOptions.
Vector
This struct represents both instant and range vectors.

Enums§

AggregationAction
LabelMatchOp
Label filter operators.
Node
AST node.
Op
PromQL operators
OpGroupSide
OpModAction

Functions§

parse
Parse expression string into an AST.