From 2acdbd81ffab775999a88697ac62cc983f102950 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 24 Jul 2019 10:43:45 +0200 Subject: [PATCH] InfluxdbWriter: clone less --- lib/perfdata/influxdbwriter.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/perfdata/influxdbwriter.cpp b/lib/perfdata/influxdbwriter.cpp index 39106c95f..86d8128de 100644 --- a/lib/perfdata/influxdbwriter.cpp +++ b/lib/perfdata/influxdbwriter.cpp @@ -248,23 +248,26 @@ void InfluxdbWriter::CheckResultHandlerWQ(const Checkable::Ptr& checkable, const // Clone the template and perform an in-place macro expansion of measurement and tag values Dictionary::Ptr tmpl_clean = service ? GetServiceTemplate() : GetHostTemplate(); - Dictionary::Ptr tmpl = static_pointer_cast(tmpl_clean->Clone()); + Dictionary::Ptr tmpl = static_pointer_cast(tmpl_clean->ShallowClone()); tmpl->Set("measurement", MacroProcessor::ResolveMacros(tmpl->Get("measurement"), resolvers, cr)); - Dictionary::Ptr tags = tmpl->Get("tags"); - if (tags) { - ObjectLock olock(tags); - for (const Dictionary::Pair& pair : tags) { - String missing_macro; - Value value = MacroProcessor::ResolveMacros(pair.second, resolvers, cr, &missing_macro); + Dictionary::Ptr tagsClean = tmpl->Get("tags"); + if (tagsClean) { + Dictionary::Ptr tags = new Dictionary(); - if (!missing_macro.IsEmpty()) { - tags->Remove(pair.first); - continue; - } + { + ObjectLock olock(tagsClean); + for (const Dictionary::Pair& pair : tagsClean) { + String missing_macro; + Value value = MacroProcessor::ResolveMacros(pair.second, resolvers, cr, &missing_macro); - tags->Set(pair.first, value); + if (missing_macro.IsEmpty()) { + tags->Set(pair.first, value); + } + } } + + tmpl->Set("tags", tags); } CheckCommand::Ptr checkCommand = checkable->GetCheckCommand(); -- 2.40.0