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.
Add this to cargo.toml
:
influxdb2 = "0.3"
influxdb2-structmap = "0.2"
num-traits = "0.2"
```rust use chrono::{DateTime, FixedOffset}; use influxdb2::{Client, FromDataPoint}; use influxdb2::models::Query;
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 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(())
} ```
```rust
async fn example() -> Result<(), Box
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(())
} ```
Implemented API
This project is still at alpha status and all the bugs haven't been ironed yet. We used it though in our production code. With that said, use it at your own risk and feel free to create an issue request.