From 321da3e5bfd7754aa491e309ea772b63e05e5635 Mon Sep 17 00:00:00 2001 From: Leonardo Grasso Date: Fri, 6 Nov 2020 17:25:46 +0100 Subject: [PATCH] chore(userspace/falco): configurable outputs timeout Signed-off-by: Leonardo Grasso --- userspace/falco/falco.cpp | 1 + userspace/falco/falco_outputs.cpp | 16 ++++++++++------ userspace/falco/falco_outputs.h | 2 ++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/userspace/falco/falco.cpp b/userspace/falco/falco.cpp index 85b167a0..4c8b7d5d 100644 --- a/userspace/falco/falco.cpp +++ b/userspace/falco/falco.cpp @@ -972,6 +972,7 @@ int falco_init(int argc, char **argv) outputs->init(config.m_json_output, config.m_json_include_output_property, + config.m_output_timeout, config.m_notifications_rate, config.m_notifications_max_burst, config.m_buffered_outputs, config.m_time_format_iso_8601, diff --git a/userspace/falco/falco_outputs.cpp b/userspace/falco/falco_outputs.cpp index 3032b676..c44c8430 100644 --- a/userspace/falco/falco_outputs.cpp +++ b/userspace/falco/falco_outputs.cpp @@ -62,9 +62,10 @@ falco_outputs::~falco_outputs() } void falco_outputs::init(bool json_output, - bool json_include_output_property, - uint32_t rate, uint32_t max_burst, bool buffered, - bool time_format_iso_8601, string hostname) + bool json_include_output_property, + uint32_t timeout, + uint32_t rate, uint32_t max_burst, bool buffered, + bool time_format_iso_8601, std::string hostname) { // Cannot be initialized more than one time. if(m_initialized) @@ -80,6 +81,8 @@ void falco_outputs::init(bool json_output, falco_formats::s_json_output = json_output; falco_formats::s_json_include_output_property = json_include_output_property; + m_timeout = std::chrono::milliseconds(timeout); + m_notifications_tb.init(rate, max_burst); m_buffered = buffered; @@ -275,11 +278,12 @@ inline void falco_outputs::push(ctrl_msg_type cmt) void falco_outputs::worker() { Watchdog wd; - wd.start([&](std::string payload) -> void { - falco_logger::log(LOG_CRIT, "\"" + payload + "\" output deadline exceeded, all output channels are blocked.\n"); + falco_logger::log(LOG_CRIT, "\"" + payload + "\" output timeout, all output channels are blocked.\n"); }); + auto timeout = m_timeout; + falco_outputs::ctrl_msg cmsg; while(true) { @@ -291,7 +295,7 @@ void falco_outputs::worker() for(auto it = m_outputs.cbegin(); it != m_outputs.cend(); ++it) { - wd.set_timeout(std::chrono::milliseconds(2000), (*it)->get_name()); + wd.set_timeout(timeout, (*it)->get_name()); try { switch(cmsg.type) diff --git a/userspace/falco/falco_outputs.h b/userspace/falco/falco_outputs.h index 70e44195..90b88aa3 100644 --- a/userspace/falco/falco_outputs.h +++ b/userspace/falco/falco_outputs.h @@ -40,6 +40,7 @@ public: void init(bool json_output, bool json_include_output_property, + uint32_t timeout, uint32_t rate, uint32_t max_burst, bool buffered, bool time_format_iso_8601, std::string hostname); @@ -71,6 +72,7 @@ private: bool m_buffered; bool m_json_output; bool m_time_format_iso_8601; + std::chrono::milliseconds m_timeout; std::string m_hostname; enum ctrl_msg_type