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

influxdb-line-protocol

InfluxDB line protocol parser and builder

5 releases (2 stable)

2.0.0 Dec 22, 2023
1.0.0 Mar 16, 2023
0.2.0 Nov 4, 2020
0.1.1 Nov 4, 2020
0.1.0 Nov 4, 2020

#544 in Parser implementations

Download history 3624/week @ 2024-08-14 3716/week @ 2024-08-21 3409/week @ 2024-08-28 3945/week @ 2024-09-04 3550/week @ 2024-09-11 3395/week @ 2024-09-18 4445/week @ 2024-09-25 3332/week @ 2024-10-02 4179/week @ 2024-10-09 4603/week @ 2024-10-16 4207/week @ 2024-10-23 4302/week @ 2024-10-30 4982/week @ 2024-11-06 6017/week @ 2024-11-13 6302/week @ 2024-11-20 5655/week @ 2024-11-27

23,661 downloads per month
Used in vrl

MIT/Apache

99KB
2.5K SLoC

influxdb_line_protocol

This crate contains pure Rust implementations of

  1. A parser for InfluxDB Line Protocol developed as part of the InfluxDB IOx project. This implementation is intended to be compatible with the Go implementation, however, this implementation uses a nom combinator-based parser rather than attempting to port the imperative Go logic so there are likely some small differences.

  2. A builder to construct valid InfluxDB Line Protocol

Example

Here is an example of how to parse the following line protocol data into a 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));

Dependencies

~3MB
~65K SLoC