Skip to content

Commit ca7fa05

Browse files
authored
feat: Refactor dnstap to use 'OwnedValuePath's (vectordotdev#18212)
* feat: Refactor dnstap to use 'OwnedValuePath's * clippy fixes * strengthen tests
1 parent eaed0a8 commit ca7fa05

File tree

4 files changed

+868
-1195
lines changed

4 files changed

+868
-1195
lines changed

benches/dnstap/mod.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
use bytes::Bytes;
22
use criterion::{criterion_group, criterion_main, BatchSize, Criterion, Throughput};
3-
use vector::{
4-
event::LogEvent,
5-
sources::dnstap::{schema::DnstapEventSchema, DnstapParser},
6-
};
3+
use vector::event::LogEvent;
4+
use vector::sources::dnstap::parser::DnstapParser;
75

86
fn benchmark_query_parsing(c: &mut Criterion) {
97
let mut event = LogEvent::default();
10-
let schema = DnstapEventSchema::new();
11-
let mut parser = DnstapParser::new(&schema, &mut event);
128
let raw_dnstap_data = "ChVqYW1lcy1WaXJ0dWFsLU1hY2hpbmUSC0JJTkQgOS4xNi4zcnoIAxACGAEiEAAAAAAAAA\
139
AAAAAAAAAAAAAqECABBQJwlAAAAAAAAAAAADAw8+0CODVA7+zq9wVNMU3WNlI2kwIAAAABAAAAAAABCWZhY2Vib29rMQNjb\
1410
20AAAEAAQAAKQIAAACAAAAMAAoACOxjCAG9zVgzWgUDY29tAHgB";
@@ -19,7 +15,7 @@ fn benchmark_query_parsing(c: &mut Criterion) {
1915
group.bench_function("dns_query_parsing", |b| {
2016
b.iter_batched(
2117
|| dnstap_data.clone(),
22-
|dnstap_data| parser.parse_dnstap_data(Bytes::from(dnstap_data)).unwrap(),
18+
|dnstap_data| DnstapParser::parse(&mut event, Bytes::from(dnstap_data)).unwrap(),
2319
BatchSize::SmallInput,
2420
)
2521
});
@@ -29,8 +25,6 @@ fn benchmark_query_parsing(c: &mut Criterion) {
2925

3026
fn benchmark_update_parsing(c: &mut Criterion) {
3127
let mut event = LogEvent::default();
32-
let schema = DnstapEventSchema::new();
33-
let mut parser = DnstapParser::new(&schema, &mut event);
3428
let raw_dnstap_data = "ChVqYW1lcy1WaXJ0dWFsLU1hY2hpbmUSC0JJTkQgOS4xNi4zcmsIDhABGAEiBH8AAA\
3529
EqBH8AAAEwrG44AEC+iu73BU14gfofUh1wi6gAAAEAAAAAAAAHZXhhbXBsZQNjb20AAAYAAWC+iu73BW0agDwvch1wi6gAA\
3630
AEAAAAAAAAHZXhhbXBsZQNjb20AAAYAAXgB";
@@ -41,7 +35,7 @@ fn benchmark_update_parsing(c: &mut Criterion) {
4135
group.bench_function("dns_update_parsing", |b| {
4236
b.iter_batched(
4337
|| dnstap_data.clone(),
44-
|dnstap_data| parser.parse_dnstap_data(Bytes::from(dnstap_data)).unwrap(),
38+
|dnstap_data| DnstapParser::parse(&mut event, Bytes::from(dnstap_data)).unwrap(),
4539
BatchSize::SmallInput,
4640
)
4741
});

src/sources/dnstap/mod.rs

+7-19
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use vector_common::internal_event::{
77
ByteSize, BytesReceived, InternalEventHandle as _, Protocol, Registered,
88
};
99
use vector_config::configurable_component;
10-
use vrl::event_path;
10+
use vrl::path::PathPrefix;
1111
use vrl::value::{kind::Collection, Kind};
1212

1313
use super::util::framestream::{build_framestream_unix_source, FrameHandler};
@@ -19,9 +19,9 @@ use crate::{
1919
};
2020

2121
pub mod parser;
22-
pub use parser::{parse_dnstap_data, DnstapParser};
23-
2422
pub mod schema;
23+
use crate::sources::dnstap::parser::DnstapParser;
24+
use crate::sources::dnstap::schema::DNSTAP_VALUE_PATHS;
2525
use dnsmsg_parser::{dns_message, dns_message_parser};
2626
use lookup::lookup_v2::OptionalValuePath;
2727
pub use schema::DnstapEventSchema;
@@ -109,19 +109,11 @@ impl DnstapConfig {
109109
"protobuf:dnstap.Dnstap".to_string() //content-type for framestream
110110
}
111111

112-
fn event_schema(timestamp_key: Option<&OwnedValuePath>) -> DnstapEventSchema {
113-
let mut schema = DnstapEventSchema::new();
114-
schema
115-
.dnstap_root_data_schema_mut()
116-
.set_timestamp(timestamp_key.cloned());
117-
schema
118-
}
119-
120112
pub fn schema_definition(
121113
&self,
122114
log_namespace: LogNamespace,
123115
) -> vector_core::schema::Definition {
124-
let event_schema = Self::event_schema(log_schema().timestamp_key());
116+
let event_schema = DnstapEventSchema;
125117

126118
match log_namespace {
127119
LogNamespace::Legacy => {
@@ -205,7 +197,6 @@ pub struct DnstapFrameHandler {
205197
max_frame_length: usize,
206198
socket_path: PathBuf,
207199
content_type: String,
208-
schema: DnstapEventSchema,
209200
raw_data_only: bool,
210201
multithreaded: bool,
211202
max_frame_handling_tasks: u32,
@@ -224,8 +215,6 @@ impl DnstapFrameHandler {
224215
let source_type_key = log_schema().source_type_key();
225216
let timestamp_key = log_schema().timestamp_key();
226217

227-
let schema = DnstapConfig::event_schema(timestamp_key);
228-
229218
let host_key = config
230219
.host_key
231220
.clone()
@@ -235,7 +224,6 @@ impl DnstapFrameHandler {
235224
max_frame_length: config.max_frame_length,
236225
socket_path: config.socket_path.clone(),
237226
content_type: config.content_type(),
238-
schema,
239227
raw_data_only: config.raw_data_only.unwrap_or(false),
240228
multithreaded: config.multithreaded.unwrap_or(false),
241229
max_frame_handling_tasks: config.max_frame_handling_tasks.unwrap_or(1000),
@@ -281,10 +269,10 @@ impl FrameHandler for DnstapFrameHandler {
281269

282270
if self.raw_data_only {
283271
log_event.insert(
284-
event_path!(self.schema.dnstap_root_data_schema().raw_data()),
272+
(PathPrefix::Event, &DNSTAP_VALUE_PATHS.raw_data),
285273
BASE64_STANDARD.encode(&frame),
286274
);
287-
} else if let Err(err) = parse_dnstap_data(&self.schema, &mut log_event, frame) {
275+
} else if let Err(err) = DnstapParser::parse(&mut log_event, frame) {
288276
emit!(DnstapParseError {
289277
error: format!("Dnstap protobuf decode error {:?}.", err)
290278
});
@@ -408,7 +396,7 @@ mod tests {
408396
let mut event = Event::from(LogEvent::from(vrl::value::Value::from(json)));
409397
event.as_mut_log().insert("timestamp", chrono::Utc::now());
410398

411-
let definition = DnstapConfig::event_schema(Some(&owned_value_path!("timestamp")));
399+
let definition = DnstapEventSchema;
412400
let schema = vector_core::schema::Definition::empty_legacy_namespace()
413401
.with_standard_vector_source_metadata();
414402

0 commit comments

Comments
 (0)