#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

#887 in Database interfaces

Download history 8/week @ 2024-07-22 52/week @ 2024-07-29 25/week @ 2024-08-05 151/week @ 2024-09-09 160/week @ 2024-09-16 23/week @ 2024-09-23 13/week @ 2024-09-30 10/week @ 2024-10-07 45/week @ 2024-10-14 1/week @ 2024-10-21 182/week @ 2024-10-28 21/week @ 2024-11-04

249 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
~123K SLoC