vector/internal_events/
expansion.rs

1use vector_lib::internal_event::{
2    ComponentEventsDropped, CounterName, InternalEvent, UNINTENTIONAL, error_stage, error_type,
3};
4use vector_lib::{NamedInternalEvent, counter};
5
6#[derive(NamedInternalEvent)]
7pub struct PairExpansionError<'a> {
8    pub key: &'a str,
9    pub value: &'a str,
10    pub drop_event: bool,
11    pub error: serde_json::Error,
12}
13
14impl InternalEvent for PairExpansionError<'_> {
15    fn emit(self) {
16        let message = format!("Failed to expand key: `{}`:`{}`", self.key, self.value);
17
18        if self.drop_event {
19            error!(
20                message = %message,
21                error = %self.error,
22                error_type = error_type::PARSER_FAILED,
23                stage = error_stage::PROCESSING,
24            );
25
26            counter!(
27                CounterName::ComponentErrorsTotal,
28                "error_type" => error_type::PARSER_FAILED,
29                "stage" => error_stage::PROCESSING,
30            )
31            .increment(1);
32
33            emit!(ComponentEventsDropped::<UNINTENTIONAL> {
34                count: 1,
35                reason: &message,
36            });
37        } else {
38            warn!(
39                message = %message,
40                error = %self.error,
41                error_type = error_type::PARSER_FAILED,
42                stage = error_stage::PROCESSING,
43            );
44        }
45    }
46}