Pure MoonBit InfluxDB v2 client, Line Protocol toolkit, annotated CSV parser, and CLI.
moon add zkc-long/moonflux@0.1.2///|
let point = @moonflux.new_point("weather")
.add_tag("location", "shanghai")
.add_field("temperature", @moonflux.DoubleValue(21.5))
.add_field("ok", @moonflux.BoolValue(true))
///|
let line = @moonflux.encode_point(point).unwrap()
///|
let parsed = @moonflux.parse_line(line).unwrap()///|
let config = @client.ClientConfig(
url="http://localhost:8086",
token="my-token",
org="my-org",
bucket="my-bucket",
)
///|
let client = @client.new_client(config)
///|
let status = client.write(line)///|
match client.query_flux("from(bucket: \"my-bucket\") |> range(start: -1h)") {
Ok(result) => println(result.table_count())
Err(error) => println(error)
}moon run --target native cmd/main -- ping --url http://localhost:8086
moon run --target native cmd/main -- write --url http://localhost:8086 --token my-token --org my-org --bucket my-bucket --data "weather,location=shanghai temperature=21.5"
moon run --target native cmd/main -- write --url http://localhost:8086 --token my-token --org my-org --bucket my-bucket --file points.lp --precision ns
moon run --target native cmd/main -- write --url http://localhost:8086 --token my-token --org my-org --bucket my-bucket --file points.lp --batch-size 5000 --batch-bytes 1048576
moon run --target native cmd/main -- query --url http://localhost:8086 --token my-token --org my-org --query "from(bucket: \"my-bucket\")"
moon run --target native cmd/main -- query --format json --url http://localhost:8086 --token my-token --org my-org --query "from(bucket: \"my-bucket\") |> group(columns: [\"host\"])"
moon run --target native cmd/main -- encode --measurement weather --field 21.5docker compose up -d
bash scripts/integration.sh
docker compose downmoon run --target native benchmoon check
moon testpub(all) struct AnnotatedColumn {
name : String
data_type : String
group : Bool
default : String
}pub(all) struct BatchLimits {
max_points : Int
max_bytes : Int
}pub(all) enum FieldValue {
IntValue(Int64)
UIntValue(UInt64)
DoubleValue(Double)
StringValue(String)
BoolValue(Bool)
}pub(all) struct FluxColumn {
name : String
data_type : String
group : Bool
default : String
}pub(all) enum FluxValue {
StringValue(String)
LongValue(Int64)
UnsignedLongValue(UInt64)
DoubleValue(Double)
BooleanValue(Bool)
DateTimeValue(String)
DurationValue(String)
Base64BinaryValue(String)
UnknownValue(String)
}pub(all) struct Point {
measurement : String
tags : Array[(String, String)]
fields : Array[(String, FieldValue)]
timestamp : Int64?
}fn encode_point_batches(points : Array[Point], limits : BatchLimits) -> Result[Array[String], String]fn escape_key_like(value : String) -> Stringfn escape_string_field(value : String) -> Stringfn unescape_key_like(value : String) -> Stringfn unescape_measurement(value : String) -> Stringfn unescape_string_field(value : String) -> StringInstall
Download zipPure MoonBit InfluxDB v2 client, Line Protocol toolkit, annotated CSV parser, and CLI.