vector/internal_events/
expansion.rs

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