vector/internal_events/
template.rs

1use vector_lib::{
2    NamedInternalEvent, counter,
3    internal_event::{
4        ComponentEventsDropped, CounterName, InternalEvent, UNINTENTIONAL, error_stage, error_type,
5    },
6};
7
8#[derive(NamedInternalEvent)]
9pub struct TemplateRenderingError<'a> {
10    pub field: Option<&'a str>,
11    pub drop_event: bool,
12    pub error: crate::template::TemplateRenderingError,
13}
14
15impl InternalEvent for TemplateRenderingError<'_> {
16    fn emit(self) {
17        let mut msg = "Failed to render template".to_owned();
18        if let Some(field) = self.field {
19            use std::fmt::Write;
20            _ = write!(msg, " for \"{field}\"");
21        }
22        msg.push('.');
23
24        if self.drop_event {
25            error!(
26                message = %msg,
27                error = %self.error,
28                error_type = error_type::TEMPLATE_FAILED,
29                stage = error_stage::PROCESSING,
30            );
31
32            counter!(
33                CounterName::ComponentErrorsTotal,
34                "error_type" => error_type::TEMPLATE_FAILED,
35                "stage" => error_stage::PROCESSING,
36            )
37            .increment(1);
38
39            emit!(ComponentEventsDropped::<UNINTENTIONAL> {
40                count: 1,
41                reason: "Failed to render template.",
42            });
43        } else {
44            warn!(
45                message = %msg,
46                error = %self.error,
47                error_type = error_type::TEMPLATE_FAILED,
48                stage = error_stage::PROCESSING,
49            );
50        }
51    }
52}