influxdb2

This is a Rust client to InfluxDB using the 2.0 API.

This project is a fork from the https://github.com/influxdata/influxdbiox/tree/main/influxdb2client project. At the time of this writing, the query functionality of the influxdb2 client from the official repository isn't working. So, I created this client to use it in my project.

Setup

Add this to cargo.toml:

influxdb2 = "0.3" influxdb2-structmap = "0.2" num-traits = "0.2"

Usage

Querying

```rust use chrono::{DateTime, FixedOffset}; use influxdb2::{Client, FromDataPoint}; use influxdb2::models::Query;

[derive(Debug, FromDataPoint)]

pub struct StockPrice { ticker: String, value: f64, time: DateTime, }

impl Default for StockPrice { fn default() -> Self { Self { ticker: "".tostring(), value: 0f64, time: chrono::MINDATETIME.withtimezone(&chrono::FixedOffset::east(7 * 3600)), } } }

async fn example() -> Result<(), Box> { let host = std::env::var("INFLUXDBHOST").unwrap(); let org = std::env::var("INFLUXDBORG").unwrap(); let token = std::env::var("INFLUXDB_TOKEN").unwrap(); let client = Client::new(host, org, token);

let qs = format!("from(bucket: \"stock-prices\") 
    |> range(start: -1w)
    |> filter(fn: (r) => r.ticker == \"{}\") 
    |> last()
", "AAPL");
let query = Query::new(qs.to_string());
let res: Vec<StockPrice> = client.query::<StockPrice>(Some(query))
    .await?;
println!("{:?}", res);

Ok(())

} ```

Writing

```rust async fn example() -> Result<(), Box> { use futures::prelude::*; use influxdb2::models::DataPoint; use influxdb2::Client;

let host = std::env::var("INFLUXDB_HOST").unwrap();
let org = std::env::var("INFLUXDB_ORG").unwrap();
let token = std::env::var("INFLUXDB_TOKEN").unwrap();
let bucket = "bucket";
let client = Client::new(host, org, token);

let points = vec![
    DataPoint::builder("cpu")
        .tag("host", "server01")
        .field("usage", 0.5)
        .build()?,
    DataPoint::builder("cpu")
        .tag("host", "server01")
        .tag("region", "us-west")
        .field("usage", 0.87)
        .build()?,
];

client.write(bucket, stream::iter(points)).await?;

Ok(())

} ```

Supported Data Types

InfluxDB data point doesn't support every data types supported by Rust. So, the derive macro only allows for a subset of data types which is also supported in InfluxDB.

Supported struct field types:

Features

Implemented API

Development Status

This project is still at alpha status and all the bugs haven't been ironed yet. With that said, use it at your own risk and feel free to create an issue or pull request.