summaryrefslogtreecommitdiff
path: root/redfish-core/lib/message_registries.hpp
diff options
context:
space:
mode:
authorJames Feist <james.feist@linux.intel.com>2020-03-17 20:38:18 +0300
committerJames Feist <james.feist@linux.intel.com>2020-03-19 20:41:44 +0300
commite51c710ec6b369e0bf7f35e9be4f9ba17884d0bd (patch)
tree068ec562aa1bc9a998eec6fa80fdbdfd8bf8e8e9 /redfish-core/lib/message_registries.hpp
parent5a64a6f309f118aa445e501f7c971b89639dfebc (diff)
downloadbmcweb-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/message_registries.hpp')
-rw-r--r--redfish-core/lib/message_registries.hpp261
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> &params) override
{
+ if (params.size() != 1)
+ {
+ messages::internalError(res);
+ res.end();
+ return;
+ }
+
+ const std::string &registry = 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> &params) 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 &registry = params[0];
+ const std::string &registry1 = 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> &params) 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> &params) 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);
}
}
}