From e51c710ec6b369e0bf7f35e9be4f9ba17884d0bd Mon Sep 17 00:00:00 2001 From: James Feist Date: Tue, 17 Mar 2020 10:38:18 -0700 Subject: Add TaskEvent registry This updates the parse registries script and adds the task registry to be used by task service. This templates the original Base Registry so it can be reused for all registries. Tested: script works, validator passes Change-Id: Id1cf3a41fb76ccaadace114725480f410bfba3e8 Signed-off-by: James Feist --- redfish-core/lib/message_registries.hpp | 261 ++++++++++++++++---------------- 1 file changed, 131 insertions(+), 130 deletions(-) (limited to 'redfish-core/lib/message_registries.hpp') diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp index 628c63a6ca..7c957e909b 100644 --- a/redfish-core/lib/message_registries.hpp +++ b/redfish-core/lib/message_registries.hpp @@ -19,6 +19,7 @@ #include "registries.hpp" #include "registries/base_message_registry.hpp" #include "registries/openbmc_message_registry.hpp" +#include "registries/task_event_message_registry.hpp" namespace redfish { @@ -55,21 +56,22 @@ class MessageRegistryFileCollection : public Node {"@odata.id", "/redfish/v1/Registries"}, {"Name", "MessageRegistryFile Collection"}, {"Description", "Collection of MessageRegistryFiles"}, - {"Members@odata.count", 2}, + {"Members@odata.count", 3}, {"Members", {{{"@odata.id", "/redfish/v1/Registries/Base"}}, + {{"@odata.id", "/redfish/v1/Registries/TaskEvent"}}, {{"@odata.id", "/redfish/v1/Registries/OpenBMC"}}}}}; res.end(); } }; -class BaseMessageRegistryFile : public Node +class MessageRegistryFile : public Node { public: template - BaseMessageRegistryFile(CrowApp &app) : - Node(app, "/redfish/v1/Registries/Base/") + MessageRegistryFile(CrowApp &app) : + Node(app, "/redfish/v1/Registries//", std::string()) { entityPrivileges = { {boost::beast::http::verb::get, {{"Login"}}}, @@ -84,31 +86,74 @@ class BaseMessageRegistryFile : public Node void doGet(crow::Response &res, const crow::Request &req, const std::vector ¶ms) override { + if (params.size() != 1) + { + messages::internalError(res); + res.end(); + return; + } + + const std::string ®istry = params[0]; + const message_registries::Header *header; + std::string dmtf = "DMTF "; + const char *url = nullptr; + + if (registry == "Base") + { + header = &message_registries::base::header; + url = message_registries::base::url; + } + else if (registry == "TaskEvent") + { + header = &message_registries::task_event::header; + url = message_registries::task_event::url; + } + else if (registry == "OpenBMC") + { + header = &message_registries::openbmc::header; + dmtf.clear(); + } + else + { + messages::resourceNotFound( + res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile", + registry); + res.end(); + return; + } + res.jsonValue = { - {"@odata.id", "/redfish/v1/Registries/Base"}, + {"@odata.id", "/redfish/v1/Registries/" + registry}, {"@odata.type", "#MessageRegistryFile.v1_1_0.MessageRegistryFile"}, - {"Name", "Base Message Registry File"}, - {"Description", "DMTF Base Message Registry File Location"}, - {"Id", message_registries::base::header.registryPrefix}, - {"Registry", message_registries::base::header.id}, + {"Name", registry + " Message Registry File"}, + {"Description", + dmtf + registry + " Message Registry File Location"}, + {"Id", header->registryPrefix}, + {"Registry", header->id}, {"Languages", {"en"}}, {"Languages@odata.count", 1}, {"Location", {{{"Language", "en"}, - {"PublicationUri", - "https://redfish.dmtf.org/registries/Base.1.4.0.json"}, - {"Uri", "/redfish/v1/Registries/Base/Base"}}}}, + {"Uri", + "/redfish/v1/Registries/" + registry + "/" + registry}}}}, {"Location@odata.count", 1}}; + + if (url != nullptr) + { + res.jsonValue["Location"][0]["PublicationUri"] = url; + } + res.end(); } }; -class BaseMessageRegistry : public Node +class MessageRegistry : public Node { public: template - BaseMessageRegistry(CrowApp &app) : - Node(app, "/redfish/v1/Registries/Base/Base/") + MessageRegistry(CrowApp &app) : + Node(app, "/redfish/v1/Registries///", std::string(), + std::string()) { entityPrivileges = { {boost::beast::http::verb::get, {{"Login"}}}, @@ -123,136 +168,92 @@ class BaseMessageRegistry : public Node void doGet(crow::Response &res, const crow::Request &req, const std::vector ¶ms) override { - res.jsonValue = { - {"@Redfish.Copyright", message_registries::base::header.copyright}, - {"@odata.type", message_registries::base::header.type}, - {"Id", message_registries::base::header.id}, - {"Name", message_registries::base::header.name}, - {"Language", message_registries::base::header.language}, - {"Description", message_registries::base::header.description}, - {"RegistryPrefix", message_registries::base::header.registryPrefix}, - {"RegistryVersion", - message_registries::base::header.registryVersion}, - {"OwningEntity", message_registries::base::header.owningEntity}}; + if (params.size() != 2) + { + messages::internalError(res); + res.end(); + return; + } - nlohmann::json &messageObj = res.jsonValue["Messages"]; + const std::string ®istry = params[0]; + const std::string ®istry1 = params[1]; - // Go through the Message Registry and populate each Message - for (const message_registries::MessageEntry &message : - message_registries::base::registry) + const message_registries::Header *header; + std::vector registryEntries; + if (registry == "Base") { - nlohmann::json &obj = messageObj[message.first]; - obj = {{"Description", message.second.description}, - {"Message", message.second.message}, - {"Severity", message.second.severity}, - {"NumberOfArgs", message.second.numberOfArgs}, - {"Resolution", message.second.resolution}}; - if (message.second.numberOfArgs > 0) + header = &message_registries::base::header; + for (const message_registries::MessageEntry &entry : + message_registries::base::registry) { - nlohmann::json &messageParamArray = obj["ParamTypes"]; - for (const char *str : message.second.paramTypes) - { - if (str == nullptr) - { - break; - } - messageParamArray.push_back(str); - } + registryEntries.emplace_back(&entry); } } - res.end(); - } -}; - -class OpenBMCMessageRegistryFile : public Node -{ - public: - template - OpenBMCMessageRegistryFile(CrowApp &app) : - Node(app, "/redfish/v1/Registries/OpenBMC/") - { - entityPrivileges = { - {boost::beast::http::verb::get, {{"Login"}}}, - {boost::beast::http::verb::head, {{"Login"}}}, - {boost::beast::http::verb::patch, {{"ConfigureManager"}}}, - {boost::beast::http::verb::put, {{"ConfigureManager"}}}, - {boost::beast::http::verb::delete_, {{"ConfigureManager"}}}, - {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; - } - - private: - void doGet(crow::Response &res, const crow::Request &req, - const std::vector ¶ms) override - { - res.jsonValue = { - {"@odata.id", "/redfish/v1/Registries/OpenBMC"}, - {"@odata.type", "#MessageRegistryFile.v1_1_0.MessageRegistryFile"}, - {"Name", "Open BMC Message Registry File"}, - {"Description", "Open BMC Message Registry File Location"}, - {"Id", message_registries::openbmc::header.registryPrefix}, - {"Registry", message_registries::openbmc::header.id}, - {"Languages", {"en"}}, - {"Languages@odata.count", 1}, - {"Location", - {{{"Language", "en"}, - {"Uri", "/redfish/v1/Registries/OpenBMC/OpenBMC"}}}}, - {"Location@odata.count", 1}}; - - res.end(); - } -}; + else if (registry == "TaskEvent") + { + header = &message_registries::task_event::header; + for (const message_registries::MessageEntry &entry : + message_registries::task_event::registry) + { + registryEntries.emplace_back(&entry); + } + } + else if (registry == "OpenBMC") + { + header = &message_registries::openbmc::header; + for (const message_registries::MessageEntry &entry : + message_registries::openbmc::registry) + { + registryEntries.emplace_back(&entry); + } + } + else + { + messages::resourceNotFound( + res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile", + registry); + res.end(); + return; + } -class OpenBMCMessageRegistry : public Node -{ - public: - template - OpenBMCMessageRegistry(CrowApp &app) : - Node(app, "/redfish/v1/Registries/OpenBMC/OpenBMC/") - { - entityPrivileges = { - {boost::beast::http::verb::get, {{"Login"}}}, - {boost::beast::http::verb::head, {{"Login"}}}, - {boost::beast::http::verb::patch, {{"ConfigureManager"}}}, - {boost::beast::http::verb::put, {{"ConfigureManager"}}}, - {boost::beast::http::verb::delete_, {{"ConfigureManager"}}}, - {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; - } + if (registry != registry1) + { + messages::resourceNotFound(res, header->type, registry1); + res.end(); + return; + } - private: - void doGet(crow::Response &res, const crow::Request &req, - const std::vector ¶ms) override - { - res.jsonValue = { - {"@Redfish.Copyright", - message_registries::openbmc::header.copyright}, - {"@odata.type", message_registries::openbmc::header.type}, - {"Id", message_registries::openbmc::header.id}, - {"Name", message_registries::openbmc::header.name}, - {"Language", message_registries::openbmc::header.language}, - {"Description", message_registries::openbmc::header.description}, - {"RegistryPrefix", - message_registries::openbmc::header.registryPrefix}, - {"RegistryVersion", - message_registries::openbmc::header.registryVersion}, - {"OwningEntity", message_registries::openbmc::header.owningEntity}}; + res.jsonValue = {{"@Redfish.Copyright", header->copyright}, + {"@odata.type", header->type}, + {"Id", header->id}, + {"Name", header->name}, + {"Language", header->language}, + {"Description", header->description}, + {"RegistryPrefix", header->registryPrefix}, + {"RegistryVersion", header->registryVersion}, + {"OwningEntity", header->owningEntity}}; nlohmann::json &messageObj = res.jsonValue["Messages"]; + // Go through the Message Registry and populate each Message - for (const message_registries::MessageEntry &message : - message_registries::openbmc::registry) + for (const message_registries::MessageEntry *message : registryEntries) { - nlohmann::json &obj = messageObj[message.first]; - obj = {{"Description", message.second.description}, - {"Message", message.second.message}, - {"Severity", message.second.severity}, - {"NumberOfArgs", message.second.numberOfArgs}, - {"Resolution", message.second.resolution}}; - if (message.second.numberOfArgs > 0) + nlohmann::json &obj = messageObj[message->first]; + obj = {{"Description", message->second.description}, + {"Message", message->second.message}, + {"Severity", message->second.severity}, + {"NumberOfArgs", message->second.numberOfArgs}, + {"Resolution", message->second.resolution}}; + if (message->second.numberOfArgs > 0) { nlohmann::json &messageParamArray = obj["ParamTypes"]; - for (size_t i = 0; i < message.second.numberOfArgs; i++) + for (const char *str : message->second.paramTypes) { - messageParamArray.push_back(message.second.paramTypes[i]); + if (str == nullptr) + { + break; + } + messageParamArray.push_back(str); } } } -- cgit v1.2.3