diff options
author | Deepak Kodihalli <dkodihal@in.ibm.com> | 2017-02-28 07:40:34 -0600 |
---|---|---|
committer | Deepak Kodihalli <dkodihal@in.ibm.com> | 2017-03-15 09:20:15 -0500 |
commit | a87c157c31eab93aa31884de7d5ad5aa3bd7fe23 (patch) | |
tree | 7691196f4628a8fd9d83d3f0e3889ec74fa905ca /log_manager.cpp | |
parent | 88826f8cf2c2730b533376cc95892e9a23688070 (diff) | |
download | phosphor-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.cpp | 29 |
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 |