summaryrefslogtreecommitdiff
path: root/redfish-core
diff options
context:
space:
mode:
authorEd Tanous <edtanous@google.com>2022-02-17 22:32:37 +0300
committerEd Tanous <ed@tanous.net>2023-06-20 19:49:51 +0300
commit1e6deaf6328fe9eb7b70c9b9405e329891f44bd4 (patch)
tree1b76b12a451fca156d052a16eb5be98580b5a8e8 /redfish-core
parent5eb468da982d6b02cafc6d3b7e4413d01b28be80 (diff)
downloadbmcweb-1e6deaf6328fe9eb7b70c9b9405e329891f44bd4.tar.xz
Use fillMessageArgs in log services
There's two instances of log service that the method from fillMessageArgs was copy/pasted to. This commit moves them to using the common, unit tested function. Tested: - Verified the GET on Event logs and works as expected. curl -k -u $USER:$PASSWORD --noproxy "*" https://${BMCIP}/redfish/v1/Systems/system/LogServices/EventLog/Entries -X GET - Verified the PostCode fetching and works as expected. curl -k -u $USER:$PASSWORD --noproxy "*" https://${BMCIP}/redfish/v1/Systems/system/LogServices/PostCodes/Entries -X GET Signed-off-by: Ed Tanous <edtanous@google.com> Change-Id: I24eb13b83eff41e7dfd98ea9ecc160d578d2faa6
Diffstat (limited to 'redfish-core')
-rw-r--r--redfish-core/lib/log_services.hpp71
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;