Crate influxdb_rs

Source
Expand description

§InfluxDB Client

InfluxDB is an open source time series database with no external dependencies. InfluxDB can be used for metrics, performance tuning, and even machine learning

§Usage

use influxdb_rs::{Client, Point, point, points, Value, Precision};
use url::Url;
use std::borrow::Cow;
use chrono::prelude::*;
 
#[tokio::main]
async fn main() {
    // default with "http://127.0.0.1:8086", db with "test"
    let client = Client::new(Url::parse("http://localhost:8086").unwrap(), "test_bucket", "test_org", "0123456789").await.unwrap();

    let now = Utc::now();
    let mut point = point!("test1");
    let point = point
        .add_field("foo", Value::String(Cow::from("bar".to_string())))
        .add_field("integer", Value::Integer(11))
        .add_field("float", Value::Float(22.3))
        .add_field("'boolean'", Value::Boolean(false))
        .add_timestamp(now.timestamp());
 
    let point1 = Point::new("test1")
                    // We use Cow::From for memeory purposes
        .add_tag("tags", Value::String(Cow::from(String::from("\\\"fda"))))
        .add_tag("number", Value::Integer(12))
        .add_tag("float", Value::Float(12.6))
        .add_field("fd", Value::String(Cow::from("'3'".to_string())))
        .add_field("quto", Value::String(Cow::from("\\\"fda".to_string())))
        .add_field("quto1", Value::String(Cow::from("\"fda".to_string())));
 
    let points = points!(point1, point);
 
    // if Precision is None, the default is second
    // Multiple write
    let result = client.write_points(points, Some(Precision::Seconds), None).await;
 
    if result.is_err(){
        // DO SOMETHING
    }
 
 
    // NOTE: convert time from timstamp_nanos() due to to_rfc3339() doesn't convert nicely with GOLANG
    let flux_query = format!("from(bucket: \"test_bucket\") 
        |> range(start: time(v: {:?}))
        |> filter(fn: (r) => r._measurement == \"test4\")
        |> yield()", now.timestamp_nanos());
 
 
    let query = influxdb_rs::data_model::query::ReadQuery{
        r#extern: None,
        query: flux_query,
        r#type: None,
        dialect: None,
       now: None,
 
    };
 
    let result = client.query(Some(query)).await;
 
    if result.is_ok(){
        // Prints Response Results in String
        println!("{:?}", result.unwrap().text().await);
    }
}

Re-exports§

pub use client::Client;
pub use error::Error;
pub use data_model::data_points::Point;
pub use data_model::data_points::Points;
pub use data_model::data_points::Precision;
pub use data_model::data_points::Value;
pub use reqwest;

Modules§

client
API Functions are implemented for influxdb_rs::client::Client
data_model
Schema for influxdb api
error
Error module

Macros§

point
Create Point by macro
points
Create Points by macro