diff options
author | James Feist <james.feist@linux.intel.com> | 2020-03-17 20:38:18 +0300 |
---|---|---|
committer | James Feist <james.feist@linux.intel.com> | 2020-03-19 20:41:44 +0300 |
commit | e51c710ec6b369e0bf7f35e9be4f9ba17884d0bd (patch) | |
tree | 068ec562aa1bc9a998eec6fa80fdbdfd8bf8e8e9 /redfish-core/lib | |
parent | 5a64a6f309f118aa445e501f7c971b89639dfebc (diff) | |
download | bmcweb-e51c710ec6b369e0bf7f35e9be4f9ba17884d0bd.tar.xz |
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 <james.feist@linux.intel.com>
Diffstat (limited to 'redfish-core/lib')
-rw-r--r-- | redfish-core/lib/message_registries.hpp | 261 |
1 files changed, 131 insertions, 130 deletions
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 <typename CrowApp> - BaseMessageRegistryFile(CrowApp &app) : - Node(app, "/redfish/v1/Registries/Base/") + MessageRegistryFile(CrowApp &app) : + Node(app, "/redfish/v1/Registries/<str>/", 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<std::string> ¶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 <typename CrowApp> - BaseMessageRegistry(CrowApp &app) : - Node(app, "/redfish/v1/Registries/Base/Base/") + MessageRegistry(CrowApp &app) : + Node(app, "/redfish/v1/Registries/<str>/<str>/", 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<std::string> ¶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<const message_registries::MessageEntry *> 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 <typename CrowApp> - 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<std::string> ¶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 <typename CrowApp> - 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<std::string> ¶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); } } } |