19 个版本
0.5.2 | 2024年7月22日 |
---|---|
0.5.0 | 2024年1月30日 |
0.4.5 | 2023年12月6日 |
0.4.4 | 2023年9月20日 |
0.1.0 | 2021年8月19日 |
#157 在 Web 编程
每月下载量 4,549
在 5 crates 中使用
185KB
4K SLoC
influxdb2
这是一个使用 2.0 API 的 Rust 客户端库,用于连接 InfluxDB。
设置
将以下内容添加到 cargo.toml
influxdb2 = "0.3"
influxdb2-structmap = "0.2"
influxdb2-derive = "0.1.1"
num-traits = "0.2"
用法
查询
use chrono::{DateTime, FixedOffset};
use influxdb2::{Client, FromDataPoint};
use influxdb2::models::Query;
#[derive(Debug, FromDataPoint)]
pub struct StockPrice {
ticker: String,
value: f64,
time: DateTime<FixedOffset>,
}
impl Default for StockPrice {
fn default() -> Self {
Self {
ticker: "".to_string(),
value: 0_f64,
time: chrono::MIN_DATETIME.with_timezone(&chrono::FixedOffset::east(7 * 3600)),
}
}
}
async fn example() -> Result<(), Box<dyn std::error::Error>> {
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 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(())
}
写入
#[derive(Default, WriteDataPoint)]
#[measurement = "cpu_load_short"]
struct CpuLoadShort {
#[influxdb(tag)]
host: Option<String>,
#[influxdb(tag)]
region: Option<String>,
#[influxdb(field)]
value: f64,
#[influxdb(timestamp)]
time: i64,
}
async fn example() -> Result<(), Box<dyn std::error::Error>> {
use chrono::Utc;
use futures::prelude::*;
use influxdb2::models::DataPoint;
use influxdb2::Client;
use influxdb2_derive::WriteDataPoint;
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 = std::env::var("INFLUXDB_BUCKET").unwrap();
let client = Client::new(host, org, token);
let points = vec![
CpuLoadShort {
host: Some("server01".to_owned()),
region: Some("us-west".to_owned()),
value: 0.64,
time: Utc::now().timestamp_nanos(),
},
CpuLoadShort {
host: Some("server02".to_owned()),
region: None,
value: 0.64,
time: Utc::now().timestamp_nanos(),
},
];
client.write(bucket, stream::iter(points)).await?;
Ok(())
}
支持的数据类型
InfluxDB 数据点不支持 Rust 支持的所有数据类型。因此, derive 宏只允许使用 InfluxDB 也支持的数据类型子集。
支持的 struct 字段类型
- bool
- f64
- i64
- u64 - 已弃用,将在版本 0.4 中删除
- String
- Vec
- chrono::Duration
- DateTime
功能
实现的 API
- 查询 API
- 写入 API
- 删除 API
- Bucket API(部分:仅列表、创建、删除)
- 组织 API(部分:仅列表)
- 任务 API(部分:仅列表、创建、删除)
TLS 实现
此 crate 在底层使用 reqwest。您可以使用此 crate 提供的功能在 native-tls
和 rustls
之间进行选择。默认情况下,选择 native-tls
,就像 reqwest 一样。
# Usage for native-tls (the default).
influxdb2 = "0.3"
# Usage for rustls.
influxdb2 = { version = "0.3", features = ["rustls"], default-features = false }
开发状态
此项目仍处于 alpha 状态,所有错误尚未被解决。话虽如此,请自行承担风险使用,并且欢迎创建问题或 pull request。
依赖项
~10–26MB
~365K SLoC