#time-series-database #time-series #client #async #influx

influxrs

Provides data types for writing and reading data from InfluxDB 2.0

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

MIT license

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