summaryrefslogtreecommitdiffstats
path: root/log_manager.cpp
diff options
context:
space:
mode:
authorDeepak Kodihalli <dkodihal@in.ibm.com>2017-02-28 07:40:34 -0600
committerDeepak Kodihalli <dkodihal@in.ibm.com>2017-03-15 09:20:15 -0500
commita87c157c31eab93aa31884de7d5ad5aa3bd7fe23 (patch)
tree7691196f4628a8fd9d83d3f0e3889ec74fa905ca /log_manager.cpp
parent88826f8cf2c2730b533376cc95892e9a23688070 (diff)
downloadphosphor-logging-a87c157c31eab93aa31884de7d5ad5aa3bd7fe23.tar.gz
phosphor-logging-a87c157c31eab93aa31884de7d5ad5aa3bd7fe23.zip
Invoke metadata handler
Check if error metadata fields have associated handlers, if yes, invoke them before construction the error d-bus object. Change-Id: I197385c5c43242f633274b82289cd70c85c1d6e7 Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Diffstat (limited to 'log_manager.cpp')
-rw-r--r--log_manager.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/log_manager.cpp b/log_manager.cpp
index b094c0e..21111a0 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -14,6 +14,11 @@
#include "elog_entry.hpp"
#include <phosphor-logging/log.hpp>
#include "log_manager.hpp"
+#include "elog_meta.hpp"
+
+using namespace phosphor::logging;
+extern const std::map<metadata::Metadata,
+ std::function<metadata::associations::Type>> meta;
namespace phosphor
{
@@ -127,7 +132,10 @@ void Manager::commit(uint64_t transactionId, std::string errMsg)
std::chrono::system_clock::now().time_since_epoch()).count();
auto objPath = std::string(OBJ_ENTRY) + '/' +
std::to_string(entryId);
+
AssociationList objects {};
+ processMetadata(errMsg, additionalData, objects);
+
entries.insert(std::make_pair(entryId, std::make_unique<Entry>(
busLog,
objPath,
@@ -140,5 +148,26 @@ void Manager::commit(uint64_t transactionId, std::string errMsg)
return;
}
+void Manager::processMetadata(const std::string& errorName,
+ const std::vector<std::string>& additionalData,
+ AssociationList& objects) const
+{
+ // additionalData is a list of "metadata=value"
+ constexpr auto separator = '=';
+ for(const auto& entry: additionalData)
+ {
+ auto found = entry.find(separator);
+ if(std::string::npos != found)
+ {
+ auto metadata = entry.substr(0, found);
+ auto iter = meta.find(metadata);
+ if(meta.end() != iter)
+ {
+ (iter->second)(metadata, additionalData, objects);
+ }
+ }
+ }
+}
+
} // namespace logging
} // namepsace phosphor
OpenPOWER on IntegriCloud