vector/internal_events/
template.rs1use 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}