A pure-MoonBit PromQL parser and query engine for in-memory time-series data
moon add Santa968/moonpromql///|
fn main {
let series = [
@model.Series::new(
"http_requests_total",
@model.LabelSet::new([("job", "api")]),
[{ timestamp: 0.0, value: 10.0, }, { timestamp: 60000.0, value: 20.0, }],
),
]
let context = @eval.EvalContext::new(series, 60000.0)
let result = @eval.query("rate(http_requests_total[2m])", context)
println(result.to_string())
}import {
"Santa968/moonpromql/eval" @eval,
"Santa968/moonpromql/model" @model,
}moon run cmd/moonpromql -- helpmoon run cmd/moonpromql -- parse "sum by (job) (rate(http_requests_total[5m]))"moon run cmd/moonpromql -- eval "rate(http_requests_total[5m])" --at 300000moon run cmd/moonpromql -- eval-json "up > 0" "[{\"metric\":\"up\",\"labels\":{\"job\":\"api\"},\"samples\":[{\"timestamp\":0,\"value\":1}]}]" --at 0moon run examples/basic| Package | Responsibility |
|---|---|
| model | Labels, samples, series, vectors, values, and shared errors |
| ast | Parsed PromQL expression tree |
| lexer | Tokenizer |
| parser | Parsed expression construction |
| eval | Selector, binary, aggregation, and range evaluation |
| functions | PromQL function implementations |
| adapters/json | JSON time-series fixture adapter |
| cmd/moonpromql | Runnable demonstration CLI |
moon fmt --check
moon check --deny-warn --target all
moon test --deny-warn --target all
moon build --target allInstall
Download zipA pure-MoonBit PromQL parser and query engine for in-memory time-series data