Crate kairosdb [−] [src]
A Client
for KairosBD REST API
The Client itself is used as the central access point, from which numerous operations are defined implementing each of the specific KairosDB APIs.
use kairosdb::Client; let client = Client::new("localhost", 8080);
A main job of a time series database is collecting and querying data.
To add data to KairosDB we have to create a Datapoints
struct and add
the data to the object.
use kairosdb::datapoints::Datapoints; let mut datapoints = Datapoints::new("myMetric", 0); datapoints.add_ms(1000, 11.0); datapoints.add_ms(2000, 12.0); datapoints.add_ms(3000, 13.0); datapoints.add_tag("test", "first"); let result = client.add(&datapoints); assert!(result.is_ok());
To query data we have to create a Query
Object with the start and end
of the query. The start and the end can be a relative time. Check the
'Time' structure for more information.
use std::collections::HashMap; use kairosdb::query::{Query, Time, Metric, Tags}; let mut query = Query::new( Time::Nanoseconds(1000), Time::Nanoseconds(2000)); let metric = Metric::new("myMetric", Tags::new(), vec![]); query.add(metric); let result = client.query(&query).unwrap(); assert!(result.contains_key("myMetric")); assert_eq!(result["myMetric"].len(), 2); assert_eq!(result["myMetric"][0].time, 1000); assert_eq!(result["myMetric"][0].value, 11.0); assert_eq!(result["myMetric"][1].time, 2000); assert_eq!(result["myMetric"][1].value, 12.0);
Optionally you can specify aggregators. Aggregators perform an operation on data points. For example, you can sum all data points that exist in 5 minute periods. Aggregators can be combined together. E.g you could sum all data points in 5 minute periods then calculate the average of them for a week period. Aggregators are processed in the order they are specified in the vector for the metric constructor.
use kairosdb::query::*; use kairosdb::datapoints::Datapoints; for i in 0..10 { let mut datapoints = Datapoints::new("myMetric", 0); datapoints.add_ms(i * 500, i as f64); datapoints.add_tag("test", "first"); let result = client.add(&datapoints); assert!(result.is_ok()); } let mut query = Query::new( Time::Nanoseconds(0), Time::Nanoseconds(10*500)); let aggregator = Aggregator::new( AggregatorType::AVG, RelativeTime::new(1, TimeUnit::SECONDS)); let metric = Metric::new("myMetric", Tags::new(), vec![aggregator]); query.add(metric); let result = client.query(&query).unwrap(); assert!(result.contains_key("myMetric")); assert_eq!(result["myMetric"].len(), 5); assert_eq!(result["myMetric"][0].time, 0); assert_eq!(result["myMetric"][0].value, 0.5);
Deleting data is like querying data.
use kairosdb::query::{Query, Time, Metric, Tags}; let mut query = Query::new( Time::Nanoseconds(1000), Time::Nanoseconds(2000)); let mut tags = Tags::new(); tags.insert("test".to_string(), vec!["first".to_string()]); let metric = Metric::new("myMetric", tags, vec![]); query.add(metric); let result = client.delete(&query); assert!(result.is_ok());
Getting the current set of metric names is a simple function call.
let result = client.list_metrics(); assert!(result.unwrap().contains(&"myMetric".to_string()));
To get information about the current tags and tag values you can use the tagsnames and tagvalues method.
let tagnames = client.tagnames(); let tagvalues = client.tagvalues(); assert!(tagnames.unwrap().contains(&"test".to_string())); assert!(tagvalues.unwrap().contains(&"first".to_string()));
Delete a metric by name
let result = client.delete_metric(&"myMetric"); assert!(result.is_ok());
Server status
To get the health status of the KairosDB Server
let response = client.health(); let result = response.unwrap(); assert_eq!(result[0], "JVM-Thread-Deadlock: OK"); assert_eq!(result[1], "Datastore-Query: OK");
Get the version of the KairosDB Server
Modules
datapoints |
Creates new datapoints |
query |
Several structs to create and parse queries |
result |
Structs
Client |
The core of the kairosdb client, owns a HTTP connection. |