mirror of https://github.com/Icinga/icinga2.git
Remove commentsand downtimes with reference to deleted checkable objects
Silence the warning message and change the log level to notice as well. fixes #10717
This commit is contained in:
parent
e0d1c2f020
commit
7c7a4c3a65
|
@ -24,6 +24,7 @@
|
|||
#include "config/configcompiler.hpp"
|
||||
#include "config/configcompilercontext.hpp"
|
||||
#include "config/configitembuilder.hpp"
|
||||
#include "remote/configobjectutility.hpp"
|
||||
|
||||
|
||||
using namespace icinga;
|
||||
|
@ -168,6 +169,9 @@ bool DaemonUtility::LoadConfigFiles(const std::vector<std::string>& configs,
|
|||
WorkQueue upq(25000, Application::GetConcurrency());
|
||||
bool result = ConfigItem::CommitItems(ascope.GetContext(), upq, newItems);
|
||||
|
||||
/* Remove ignored Downtime/Comment objects. */
|
||||
ConfigItem::RemoveIgnoredItems(ConfigObjectUtility::GetConfigDir());
|
||||
|
||||
if (!result)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ using namespace icinga;
|
|||
boost::mutex ConfigItem::m_Mutex;
|
||||
ConfigItem::TypeMap ConfigItem::m_Items;
|
||||
ConfigItem::ItemList ConfigItem::m_UnnamedItems;
|
||||
ConfigItem::IgnoredItemList ConfigItem::m_IgnoredItems;
|
||||
|
||||
REGISTER_SCRIPTFUNCTION(__run_with_activation_context, &ConfigItem::RunWithActivationContext);
|
||||
|
||||
|
@ -190,9 +191,11 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
|
|||
m_Expression->Evaluate(frame, &debugHints);
|
||||
} catch (const std::exception& ex) {
|
||||
if (m_IgnoreOnError) {
|
||||
Log(LogWarning, "ConfigObject")
|
||||
Log(LogNotice, "ConfigObject")
|
||||
<< "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
|
||||
|
||||
m_IgnoredItems.push_back(m_DebugInfo.Path);
|
||||
|
||||
return ConfigObject::Ptr();
|
||||
}
|
||||
|
||||
|
@ -234,9 +237,11 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
|
|||
dobj->Validate(FAConfig, utils);
|
||||
} catch (ValidationError& ex) {
|
||||
if (m_IgnoreOnError) {
|
||||
Log(LogWarning, "ConfigObject")
|
||||
Log(LogNotice, "ConfigObject")
|
||||
<< "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
|
||||
|
||||
m_IgnoredItems.push_back(m_DebugInfo.Path);
|
||||
|
||||
return ConfigObject::Ptr();
|
||||
}
|
||||
|
||||
|
@ -248,9 +253,11 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
|
|||
dobj->OnConfigLoaded();
|
||||
} catch (const std::exception& ex) {
|
||||
if (m_IgnoreOnError) {
|
||||
Log(LogWarning, "ConfigObject")
|
||||
Log(LogNotice, "ConfigObject")
|
||||
<< "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
|
||||
|
||||
m_IgnoredItems.push_back(m_DebugInfo.Path);
|
||||
|
||||
return ConfigObject::Ptr();
|
||||
}
|
||||
|
||||
|
@ -359,11 +366,13 @@ void ConfigItem::OnAllConfigLoadedHelper(void)
|
|||
m_Object->OnAllConfigLoaded();
|
||||
} catch (const std::exception& ex) {
|
||||
if (m_IgnoreOnError) {
|
||||
Log(LogWarning, "ConfigObject")
|
||||
Log(LogNotice, "ConfigObject")
|
||||
<< "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
|
||||
|
||||
Unregister();
|
||||
|
||||
m_IgnoredItems.push_back(m_DebugInfo.Path);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -630,3 +639,23 @@ std::vector<ConfigItem::Ptr> ConfigItem::GetItems(const String& type)
|
|||
|
||||
return items;
|
||||
}
|
||||
|
||||
void ConfigItem::RemoveIgnoredItems(const String& allowedConfigPath)
|
||||
{
|
||||
BOOST_FOREACH(const String& path, m_IgnoredItems) {
|
||||
if (path.Find(allowedConfigPath) == String::NPos)
|
||||
continue;
|
||||
|
||||
Log(LogNotice, "ConfigItem")
|
||||
<< "Removing ignored item path '" << path << "'.";
|
||||
|
||||
if (unlink(path.CStr()) < 0) {
|
||||
BOOST_THROW_EXCEPTION(posix_error()
|
||||
<< boost::errinfo_api_function("unlink")
|
||||
<< boost::errinfo_errno(errno)
|
||||
<< boost::errinfo_file_name(path));
|
||||
}
|
||||
}
|
||||
|
||||
m_IgnoredItems.clear();
|
||||
}
|
||||
|
|
|
@ -75,6 +75,8 @@ public:
|
|||
|
||||
static std::vector<ConfigItem::Ptr> GetItems(const String& type);
|
||||
|
||||
static void RemoveIgnoredItems(const String& allowedConfigPath);
|
||||
|
||||
private:
|
||||
String m_Type; /**< The object type. */
|
||||
String m_Name; /**< The name. */
|
||||
|
@ -99,7 +101,9 @@ private:
|
|||
|
||||
typedef std::vector<ConfigItem::Ptr> ItemList;
|
||||
static ItemList m_UnnamedItems;
|
||||
static ItemList m_CommittedItems;
|
||||
|
||||
typedef std::vector<String> IgnoredItemList;
|
||||
static IgnoredItemList m_IgnoredItems;
|
||||
|
||||
static ConfigItem::Ptr GetObjectUnlocked(const String& type,
|
||||
const String& name);
|
||||
|
|
Loading…
Reference in New Issue