#influx-db #protocols #line #parser #builder #go #nom

influxdb-line-protocol

InfluxDB 行协议解析器和构建器

5个版本 (2个稳定版)

2.0.0 2023年12月22日
1.0.0 2023年3月16日
0.2.0 2020年11月4日
0.1.1 2020年11月4日
0.1.0 2020年11月4日

#452解析器实现

Download history 1070/week @ 2024-03-13 939/week @ 2024-03-20 967/week @ 2024-03-27 1159/week @ 2024-04-03 1413/week @ 2024-04-10 1354/week @ 2024-04-17 1329/week @ 2024-04-24 1181/week @ 2024-05-01 1713/week @ 2024-05-08 1436/week @ 2024-05-15 1400/week @ 2024-05-22 1797/week @ 2024-05-29 1400/week @ 2024-06-05 1566/week @ 2024-06-12 1476/week @ 2024-06-19 1445/week @ 2024-06-26

每月6,120次下载

MIT/Apache

99KB
2.5K SLoC

influxdb_line_protocol

这个crate包含纯Rust实现的

  1. 解析器,用于InfluxDB 行协议,作为InfluxDB IOx项目的一部分开发。此实现旨在与Go实现兼容,但是,此实现使用基于nom组合器的解析器,而不是尝试移植命令式Go逻辑,因此可能存在一些细微的差异。

  2. 构建器用于构建有效的InfluxDB 行协议

示例

以下是如何将以下行协议数据解析为ParsedLine的示例

cpu,host=A,region=west usage_system=64.2 1590488773254420000
use influxdb_line_protocol::{ParsedLine, FieldValue};

let mut parsed_lines =
    influxdb_line_protocol::parse_lines(
        "cpu,host=A,region=west usage_system=64i 1590488773254420000"
    );
let parsed_line = parsed_lines
    .next()
    .expect("Should have at least one line")
    .expect("Should parse successfully");

let ParsedLine {
    series,
    field_set,
    timestamp,
} = parsed_line;

assert_eq!(series.measurement, "cpu");

let tags = series.tag_set.unwrap();
assert_eq!(tags[0].0, "host");
assert_eq!(tags[0].1, "A");
assert_eq!(tags[1].0, "region");
assert_eq!(tags[1].1, "west");

let field = &field_set[0];
assert_eq!(field.0, "usage_system");
assert_eq!(field.1, FieldValue::I64(64));

assert_eq!(timestamp, Some(1590488773254420000));

依赖项

~3MB
~63K SLoC