8 releases (stable)
3.0.1 | Oct 28, 2024 |
---|---|
3.0.0 | Sep 18, 2024 |
2.1.0 | Sep 11, 2024 |
2.0.1 | Aug 15, 2022 |
0.1.1 | Jun 1, 2021 |
#881 in Database interfaces
39 downloads per month
24KB
525 lines
influxrs
This crate contains some useful structs for publishing data to, and reading data from InfluxDB.
Model
The Measurement
struct represents a single measurement in Influx. Recommended way to create a Measurement
is to use the Measurement::builder
function.
let measurement = Measurement::builder("m1")
.tag("tag1", "tag1_value")
.tag("tag2", "tag2_value")
.field("field1", "string_value")
.field("field2", true)
.timestamp_ms(1622493622000) // milliseconds since the Unix epoch
.build()
.unwrap();
// convert it to InfluxDB line protocol
let line = measurement.to_line_protocol();
Client
WARNING: The client is very rudimentary (it is just a thin and dumb wrapper around an HTTP client), and it is probably better to just write your own instead.
Enable the client
feature to gain access to a very simple client struct that simplifies writing and reading data from a specified InfluxDB instance.
Creating a client
let client = InfluxClient::builder("www.example.com", "example-key", "example-org").build().unwrap();
Writing data
let response = client
.write("example-bucket", &[measurement]) // can post a batch if we want
.await
.unwrap();
Querying data
let response = client
.query(
Query::new(r#"from(bucket: "example-bucket")"#)
.then(r#"range(start: 1622493322, stop: 1622493922)"#)
.then(r#"filter(fn: (r) => r["_measurement"] == "m1")"#),
)
.await
.unwrap();
When querying data, a Vec<HashMap<String, String>>
is returned, containing individual csv records:
{
"result": "_result",
"_value": "string_value",
"table": "0",
"_start": "2021-06-01T11:13:15Z",
"_field": "field1",
"tag1": "tag1_value",
"tag2": "tag2_value",
"_time": "2021-06-01T11:16:05.684Z",
"_measurement": "m1",
"_stop": "2021-06-01T11:23:15Z"
}
Dependencies
~1–11MB
~126K SLoC