Reusable streaming JSONL queries with nested fields, filters and grouped metrics; includes HTTP log analysis
# Optional installation into a fresh, isolated directory:
export MOON_HOME="$(mktemp -d)"
export PATH="$MOON_HOME/bin:$PATH"
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash -s 0.10.20+65efd5b93git clone https://github.com/sundaysebasidian-byte/moon-loglens.git
cd moon-loglens
moon version --all
moon update
moon check --target native
moon build --target native
moon test --target native
python3 tests/cli_smoke.py
python3 tests/query_cli.py
moon run cmd/main examples/requests.jsonl
moon run cmd/query examples/jobs.jsonl examples/jobs.query.json
moon run cmd/query examples/builds.jsonl examples/builds.query.json
moon run cmd/query examples/sensors.jsonl examples/sensors.query.json
moon run examples/reusemoon run cmd/query examples/jobs.jsonl examples/jobs.query.json
moon run cmd/query examples/builds.jsonl examples/builds.query.json
moon run cmd/query examples/sensors.jsonl examples/sensors.query.json
moon run examples/reuse{
"group_by": ["/task/queue", "/outcome"],
"metrics": ["/elapsed_ms", "/attempts"],
"where": [{"path": "/env", "op": "eq", "value": "production"}],
"max_groups": 10000
}moon run cmd/query events.jsonl query.json --fail-on-invalid --min-events 1
# POSIX stdin pipeline (the '-' selects stdin):
cat examples/jobs.jsonl | moon run cmd/query - examples/jobs.query.json// moon.mod in your independent module
name = "loglens-acceptance/consumer"
preferred_target = "native"
import {
"sundaysebasidian-byte/moon-loglens@0.2.1",
}import {
"sundaysebasidian-byte/moon-loglens/query" @lens,
}consumer_dir="$(mktemp -d)"
cp tests/registry_consumer/moon.mod tests/registry_consumer/moon.pkg tests/registry_consumer/main.mbt "$consumer_dir/"
moon -C "$consumer_dir" update
moon -C "$consumer_dir" check --target native
moon -C "$consumer_dir" run .
# Automated independent-module run with a complete JSON result assertion:
python3 scripts/acceptance.py --consumer-onlymoon update
moon test --target native
python3 tests/cli_smoke.py
moon run cmd/main examples/requests.jsonl
moon run cmd/main examples/requests.jsonl --service api --level ERROR --format json
moon run cmd/main examples/requests.jsonl --status 503 --format json
moon run cmd/main examples/requests.jsonl --min-events 1 --fail-on-invalid --max-error-rate 20
moon run cmd/main examples/requests.jsonl --max-p95-ms 100
moon run cmd/main examples/requests.jsonl --max-service-error-rate 30accepted=4 filtered=0 invalid=1 errors=1 error_rate_pct=25 p50_ms=20 p95_ms=150
invalid_lines=5
service="api" requests=3 errors=1 error_rate_pct=33.333333333333336 p50_ms=20 p95_ms=150| Field | Type and rule |
|---|---|
| timestamp | A valid UTC timestamp in whole seconds (2026-09-24T03:00:00Z) or exactly three fractional digits (2026-09-24T03:00:00.250Z); no offsets or leap seconds. |
| service | A nonblank string. |
| level | Exactly DEBUG, INFO, WARN, or ERROR. |
| status | An integer HTTP status from 100 through 599. |
| latency_ms | A finite number from 0 through 86,400,000. |
moon run cmd/main <input.jsonl> [--service NAME] [--level DEBUG|INFO|WARN|ERROR]
[--status 100..599]
[--since YYYY-MM-DDTHH:MM:SSZ] [--until YYYY-MM-DDTHH:MM:SSZ]
[--format text|json] [--max-error-rate PERCENT] [--max-service-error-rate PERCENT]
[--max-p95-ms MILLISECONDS]
[--min-events COUNT] [--fail-on-invalid]python3 scripts/acceptance.pymoon check --target native
moon test --target native
moon build --target native
moon info
moon fmt
python3 tests/cli_smoke.py
python3 tests/query_cli.py
python3 tests/platform_inputs.pypub struct Config {
service : String
level : String
status : Int
since : String
until : String
}pub struct Report {
accepted : Int
filtered : Int
invalid : Int
invalid_lines : Array[Int]
errors : Int
error_rate_pct : Double
p50_ms : Double
p95_ms : Double
services : Array[ServiceStats]
statuses : Array[StatusStats]
}pub struct ServiceStats {
name : String
count : Int
errors : Int
error_rate_pct : Double
p50_ms : Double
p95_ms : Double
}pub struct StatusStats {
service : String
status : Int
count : Int
p50_ms : Double
p95_ms : Double
}fn valid_timestamp(s : String) -> BoolInstall
Download zipReusable streaming JSONL queries with nested fields, filters and grouped metrics; includes HTTP log analysis