diff options
Diffstat (limited to 'redfish-core')
-rw-r--r-- | redfish-core/lib/log_services.hpp | 71 |
1 files changed, 23 insertions, 48 deletions
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp index 323c22ae38..fedf7ad6c0 100644 --- a/redfish-core/lib/log_services.hpp +++ b/redfish-core/lib/log_services.hpp @@ -1290,48 +1290,29 @@ static LogParseError std::vector<std::string> logEntryFields; bmcweb::split(logEntryFields, entry, ','); // We need at least a MessageId to be valid - if (logEntryFields.empty()) + auto logEntryIter = logEntryFields.begin(); + if (logEntryIter == logEntryFields.end()) { return LogParseError::parseFailed; } - std::string& messageID = logEntryFields[0]; - + std::string& messageID = *logEntryIter; // Get the Message from the MessageRegistry const registries::Message* message = registries::getMessage(messageID); + logEntryIter++; if (message == nullptr) { BMCWEB_LOG_WARNING << "Log entry not found in registry: " << logEntry; return LogParseError::messageIdNotInRegistry; } - std::string msg = message->message; - - // Get the MessageArgs from the log if there are any - std::span<std::string> messageArgs; - if (logEntryFields.size() > 1) + std::vector<std::string_view> messageArgs(logEntryIter, + logEntryFields.end()); + std::string msg = redfish::registries::fillMessageArgs(messageArgs, + message->message); + if (msg.empty()) { - std::string& messageArgsStart = logEntryFields[1]; - // If the first string is empty, assume there are no MessageArgs - std::size_t messageArgsSize = 0; - if (!messageArgsStart.empty()) - { - messageArgsSize = logEntryFields.size() - 1; - } - - messageArgs = {&messageArgsStart, messageArgsSize}; - - // Fill the MessageArgs into the Message - int i = 0; - for (const std::string& messageArg : messageArgs) - { - std::string argStr = "%" + std::to_string(++i); - size_t argPos = msg.find(argStr); - if (argPos != std::string::npos) - { - msg.replace(argPos, argStr.length(), messageArg); - } - } + return LogParseError::parseFailed; } // Get the Created time from the timestamp. The log timestamp is in RFC3339 @@ -3756,26 +3737,20 @@ static bool fillPostCodeEntry( timeOffsetStr << std::setprecision(4); // Add double to stream timeOffsetStr << static_cast<double>(usTimeOffset) / 1000 / 1000; - std::vector<std::string> messageArgs = { - std::to_string(bootIndex), timeOffsetStr.str(), hexCode.str()}; - // Get MessageArgs template from message registry - std::string msg; - if (message != nullptr) - { - msg = message->message; + std::string bootIndexStr = std::to_string(bootIndex); + std::string timeOffsetString = timeOffsetStr.str(); + std::string hexCodeStr = hexCode.str(); - // fill in this post code value - int i = 0; - for (const std::string& messageArg : messageArgs) - { - std::string argStr = "%" + std::to_string(++i); - size_t argPos = msg.find(argStr); - if (argPos != std::string::npos) - { - msg.replace(argPos, argStr.length(), messageArg); - } - } + std::array<std::string_view, 3> messageArgs = { + bootIndexStr, timeOffsetString, hexCodeStr}; + + std::string msg = + redfish::registries::fillMessageArgs(messageArgs, message->message); + if (msg.empty()) + { + messages::internalError(asyncResp->res); + return false; } // Get Severity template from message registry @@ -3795,7 +3770,7 @@ static bool fillPostCodeEntry( bmcLogEntry["Id"] = postcodeEntryID; bmcLogEntry["Message"] = std::move(msg); bmcLogEntry["MessageId"] = "OpenBMC.0.2.BIOSPOSTCode"; - bmcLogEntry["MessageArgs"] = std::move(messageArgs); + bmcLogEntry["MessageArgs"] = messageArgs; bmcLogEntry["EntryType"] = "Event"; bmcLogEntry["Severity"] = std::move(severity); bmcLogEntry["Created"] = entryTimeStr; |