9 个版本

0.2.20 2020年1月4日
0.2.10 2019年1月8日
0.2.9 2017年2月1日
0.2.8 2017年1月26日
0.1.1 2016年11月13日

#1394数据库接口

每月 30 次下载

Apache-2.0

31KB
397

Rust Client for KairosDB   构建状态 Cargo

描述

一个用于时序数据库 KairosDB 的简单 Rust 语言客户端。

文档

rust-kairosdb 的完整文档。

用法

将以下内容放入您的 Cargo.toml

[dependencies]
kairosdb = "0.2"

然后在您的 crate 根目录中添加以下内容

extern crate kairosdb;

概述

客户端本身用作中央访问点,从该点定义了许多操作,实现了 KairosDB 的各个特定 API。

use kairosdb::Client;
let client = Client::new("localhost", 8080);

时序数据库的主要工作是收集和查询数据。要将数据添加到 KairosDB,我们需要创建一个 Datapoints 结构体并将数据添加到该对象中。

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());

要查询数据,我们需要创建一个具有查询开始和结束时间的 Query 对象。开始和结束时间可以是相对时间。有关更多信息,请参阅 '时间' 结构。

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);

可选地,您可以指定聚合器。聚合器对数据点执行操作。例如,您可以在 5 分钟期间对存在的所有数据点求和。可以组合使用聚合器。例如,您可以在 5 分钟期间对所有的数据点求和,然后计算它们在一周期间的平均值。聚合器将按照在度量构造函数中指定的顺序处理。

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);

删除数据类似于查询数据。

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());

获取当前度量名称集是一个简单的函数调用。

let result = client.list_metrics();
assert!(result.unwrap().contains(&"myMetric".to_string()));

要获取当前标签和标签值的信息,您可以使用 tagsnames 和 tagvalues 方法。

let tagnames = client.tagnames();
let tagvalues = client.tagvalues();
assert!(tagnames.unwrap().contains(&"test".to_string()));
assert!(tagvalues.unwrap().contains(&"first".to_string()));

通过名称删除度量

let result = client.delete_metric(&"myMetric");
assert!(result.is_ok());

服务器状态

获取 KairosDB 服务器的健康状态

let response = client.health();
let result = response.unwrap();
assert_eq!(result[0], "JVM-Thread-Deadlock: OK");
assert_eq!(result[1], "Datastore-Query: OK");

获取 KairosDB 服务器的版本

let client = Client::new("localhost", 8080);
assert!(client.version().unwrap().starts_with("KairosDB"));

限制

当前 Rust 客户端不支持汇总功能。

许可

   Copyright 2016-2020 Kai Strempel

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

依赖项

~20–31MB
~538K SLoC