mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-23 13:45:04 +02:00
Removed dictionary cloning behaviour.
Added configuration caching on instantiation.
This commit is contained in:
parent
c2c4b97ea5
commit
0b8fdfd7f2
@ -73,6 +73,8 @@ void OpenTsdbWriter::Resume()
|
|||||||
Log(LogInformation, "OpentsdbWriter")
|
Log(LogInformation, "OpentsdbWriter")
|
||||||
<< "'" << GetName() << "' resumed.";
|
<< "'" << GetName() << "' resumed.";
|
||||||
|
|
||||||
|
ReadConfigTemplate(m_ServiceConfigTemplate, m_HostConfigTemplate);
|
||||||
|
|
||||||
m_ReconnectTimer = new Timer();
|
m_ReconnectTimer = new Timer();
|
||||||
m_ReconnectTimer->SetInterval(10);
|
m_ReconnectTimer->SetInterval(10);
|
||||||
m_ReconnectTimer->OnTimerExpired.connect(std::bind(&OpenTsdbWriter::ReconnectTimerHandler, this));
|
m_ReconnectTimer->OnTimerExpired.connect(std::bind(&OpenTsdbWriter::ReconnectTimerHandler, this));
|
||||||
@ -151,33 +153,35 @@ void OpenTsdbWriter::CheckResultHandler(const Checkable::Ptr& checkable, const C
|
|||||||
|
|
||||||
Service::Ptr service = dynamic_pointer_cast<Service>(checkable);
|
Service::Ptr service = dynamic_pointer_cast<Service>(checkable);
|
||||||
Host::Ptr host;
|
Host::Ptr host;
|
||||||
Dictionary::Ptr config_tmpl_clean;
|
Dictionary::Ptr config_tmpl;
|
||||||
|
Dictionary::Ptr config_tmpl_tags;
|
||||||
|
|
||||||
if (service) {
|
if (service) {
|
||||||
host = service->GetHost();
|
host = service->GetHost();
|
||||||
config_tmpl_clean = GetServiceTemplate();
|
config_tmpl = m_ServiceConfigTemplate;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
host = static_pointer_cast<Host>(checkable);
|
host = static_pointer_cast<Host>(checkable);
|
||||||
config_tmpl_clean = GetHostTemplate();
|
config_tmpl = m_HostConfigTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone the config template and perform an in-place macro expansion of measurement and tag values
|
// Get the tags nested dictionary in the service/host template in the config
|
||||||
Dictionary::Ptr config_tmpl = static_pointer_cast<Dictionary>(config_tmpl_clean->Clone());
|
if (config_tmpl) {
|
||||||
Dictionary::Ptr config_tmpl_tags = config_tmpl->Get("tags");
|
config_tmpl_tags = config_tmpl->Get("tags");
|
||||||
|
}
|
||||||
// Configure config template macro resolver
|
|
||||||
MacroProcessor::ResolverList resolvers;
|
|
||||||
if (service)
|
|
||||||
resolvers.emplace_back("service", service);
|
|
||||||
resolvers.emplace_back("host", host);
|
|
||||||
resolvers.emplace_back("icinga", IcingaApplication::GetInstance());
|
|
||||||
|
|
||||||
String metric;
|
String metric;
|
||||||
std::map<String, String> tags;
|
std::map<String, String> tags;
|
||||||
|
|
||||||
// Resolve macros in configuration template and build custom tag list
|
// Resolve macros in configuration template and build custom tag list
|
||||||
if (config_tmpl_tags) {
|
if (config_tmpl_tags) {
|
||||||
|
|
||||||
|
// Configure config template macro resolver
|
||||||
|
MacroProcessor::ResolverList resolvers;
|
||||||
|
if (service)
|
||||||
|
resolvers.emplace_back("service", service);
|
||||||
|
resolvers.emplace_back("host", host);
|
||||||
|
resolvers.emplace_back("icinga", IcingaApplication::GetInstance());
|
||||||
|
|
||||||
ObjectLock olock(config_tmpl_tags);
|
ObjectLock olock(config_tmpl_tags);
|
||||||
|
|
||||||
@ -379,6 +383,39 @@ String OpenTsdbWriter::EscapeMetric(const String& str)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the template dictionaries defined in the config file into running memory
|
||||||
|
*
|
||||||
|
* @param stemplate The dictionary to save the service configuration to
|
||||||
|
* @param htemplate The dictionary to save the host configuration to
|
||||||
|
*/
|
||||||
|
void OpenTsdbWriter::ReadConfigTemplate(const Dictionary::Ptr& stemplate,
|
||||||
|
const Dictionary::Ptr& htemplate)
|
||||||
|
{
|
||||||
|
|
||||||
|
m_ServiceConfigTemplate = GetServiceTemplate();
|
||||||
|
|
||||||
|
if (!m_ServiceConfigTemplate) {
|
||||||
|
Log(LogDebug, "OpenTsdbWriter")
|
||||||
|
<< "Unable to locate service template configuration.";
|
||||||
|
} else if (m_ServiceConfigTemplate->GetLength() == 0) {
|
||||||
|
Log(LogDebug, "OpenTsdbWriter")
|
||||||
|
<< "The service template configuration is empty.";
|
||||||
|
}
|
||||||
|
|
||||||
|
m_HostConfigTemplate = GetHostTemplate();
|
||||||
|
|
||||||
|
if (!m_HostConfigTemplate) {
|
||||||
|
Log(LogDebug, "OpenTsdbWriter")
|
||||||
|
<< "Unable to locate host template configuration.";
|
||||||
|
} else if (m_HostConfigTemplate->GetLength() == 0) {
|
||||||
|
Log(LogDebug, "OpenTsdbWriter")
|
||||||
|
<< "The host template configuration is empty.";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates the host_template configuration block in the configuration
|
* Validates the host_template configuration block in the configuration
|
||||||
* file and checks for syntax errors.
|
* file and checks for syntax errors.
|
||||||
|
@ -39,6 +39,9 @@ private:
|
|||||||
|
|
||||||
Timer::Ptr m_ReconnectTimer;
|
Timer::Ptr m_ReconnectTimer;
|
||||||
|
|
||||||
|
Dictionary::Ptr m_ServiceConfigTemplate;
|
||||||
|
Dictionary::Ptr m_HostConfigTemplate;
|
||||||
|
|
||||||
void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr);
|
void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr);
|
||||||
void SendMetric(const Checkable::Ptr& checkable, const String& metric,
|
void SendMetric(const Checkable::Ptr& checkable, const String& metric,
|
||||||
const std::map<String, String>& tags, double value, double ts);
|
const std::map<String, String>& tags, double value, double ts);
|
||||||
@ -48,6 +51,9 @@ private:
|
|||||||
static String EscapeMetric(const String& str);
|
static String EscapeMetric(const String& str);
|
||||||
|
|
||||||
void ReconnectTimerHandler();
|
void ReconnectTimerHandler();
|
||||||
|
|
||||||
|
void ReadConfigTemplate(const Dictionary::Ptr& stemplate,
|
||||||
|
const Dictionary::Ptr& htemplate);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user