diff options
author | Ed Tanous <edtanous@google.com> | 2021-10-25 20:29:45 +0300 |
---|---|---|
committer | Ed Tanous <ed@tanous.net> | 2021-11-05 19:37:14 +0300 |
commit | 4028ff77ddebe603b009a8afaf6bc36bc5949612 (patch) | |
tree | 68082bed78f7845f9add1f7e36b425068cdc113a | |
parent | b7028ebff16566762b71cdbc597c1244529d208a (diff) | |
download | bmcweb-4028ff77ddebe603b009a8afaf6bc36bc5949612.tar.xz |
Make telemetry use the common collection utilities
getReportCollection is almost a 1:1 copy of getCollectionMembers, but
hardcoded for report interface. This commit moves to using the common
implementation, rather than duplicating the code.
In the course of writing this patchset, it looks like the definition in
metric_report_definition.hpp is incorrect, as we pulling metric reports
instead of pulling metric report definitions. This commit has the same
behavior as the old, but will need to be looked at in the future.
Tested:
Basic touch testing done by Szymon Dompke. "Everything looks good to me"
Signed-off-by: Ed Tanous <edtanous@google.com>
Change-Id: I643da1849aacc38848db1da3eeaad0c111521d34
-rw-r--r-- | redfish-core/include/utils/telemetry_utils.hpp | 51 | ||||
-rw-r--r-- | redfish-core/lib/metric_report.hpp | 14 | ||||
-rw-r--r-- | redfish-core/lib/metric_report_definition.hpp | 12 |
3 files changed, 18 insertions, 59 deletions
diff --git a/redfish-core/include/utils/telemetry_utils.hpp b/redfish-core/include/utils/telemetry_utils.hpp index 5872350cfa..76ffe96046 100644 --- a/redfish-core/include/utils/telemetry_utils.hpp +++ b/redfish-core/include/utils/telemetry_utils.hpp @@ -11,56 +11,9 @@ namespace telemetry constexpr const char* service = "xyz.openbmc_project.Telemetry"; constexpr const char* reportInterface = "xyz.openbmc_project.Telemetry.Report"; constexpr const char* metricReportDefinitionUri = - "/redfish/v1/TelemetryService/MetricReportDefinitions/"; + "/redfish/v1/TelemetryService/MetricReportDefinitions"; constexpr const char* metricReportUri = - "/redfish/v1/TelemetryService/MetricReports/"; - -inline void - getReportCollection(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, - const std::string& uri) -{ - const std::array<const char*, 1> interfaces = {reportInterface}; - - crow::connections::systemBus->async_method_call( - [asyncResp, uri](const boost::system::error_code ec, - const std::vector<std::string>& reports) { - if (ec == boost::system::errc::io_error) - { - asyncResp->res.jsonValue["Members"] = nlohmann::json::array(); - asyncResp->res.jsonValue["Members@odata.count"] = 0; - return; - } - if (ec) - { - BMCWEB_LOG_ERROR << "Dbus method call failed: " << ec; - messages::internalError(asyncResp->res); - return; - } - - nlohmann::json& members = asyncResp->res.jsonValue["Members"]; - members = nlohmann::json::array(); - - for (const std::string& report : reports) - { - sdbusplus::message::object_path path(report); - std::string name = path.filename(); - if (name.empty()) - { - BMCWEB_LOG_ERROR << "Received invalid path: " << report; - messages::internalError(asyncResp->res); - return; - } - members.push_back({{"@odata.id", uri + name}}); - } - - asyncResp->res.jsonValue["Members@odata.count"] = members.size(); - }, - "xyz.openbmc_project.ObjectMapper", - "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths", - "/xyz/openbmc_project/Telemetry/Reports/TelemetryService", 1, - interfaces); -} + "/redfish/v1/TelemetryService/MetricReports"; inline std::string getDbusReportPath(const std::string& id) { diff --git a/redfish-core/lib/metric_report.hpp b/redfish-core/lib/metric_report.hpp index 63c8c19acb..159968aaf5 100644 --- a/redfish-core/lib/metric_report.hpp +++ b/redfish-core/lib/metric_report.hpp @@ -1,5 +1,6 @@ #pragma once +#include "utils/collection.hpp" #include "utils/telemetry_utils.hpp" #include <app.hpp> @@ -39,11 +40,12 @@ inline void fillReport(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, { asyncResp->res.jsonValue["@odata.type"] = "#MetricReport.v1_3_0.MetricReport"; - asyncResp->res.jsonValue["@odata.id"] = telemetry::metricReportUri + id; + asyncResp->res.jsonValue["@odata.id"] = + telemetry::metricReportUri + std::string("/") + id; asyncResp->res.jsonValue["Id"] = id; asyncResp->res.jsonValue["Name"] = id; asyncResp->res.jsonValue["MetricReportDefinition"]["@odata.id"] = - telemetry::metricReportDefinitionUri + id; + telemetry::metricReportDefinitionUri + std::string("/") + id; const TimestampReadings* timestampReadings = std::get_if<TimestampReadings>(&var); @@ -73,9 +75,11 @@ inline void requestRoutesMetricReportCollection(App& app) asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/TelemetryService/MetricReports"; asyncResp->res.jsonValue["Name"] = "Metric Report Collection"; - - telemetry::getReportCollection(asyncResp, - telemetry::metricReportUri); + const std::vector<const char*> interfaces{ + telemetry::reportInterface}; + collection_util::getCollectionMembers( + asyncResp, telemetry::metricReportUri, interfaces, + "/xyz/openbmc_project/Telemetry/Reports/TelemetryService"); }); } diff --git a/redfish-core/lib/metric_report_definition.hpp b/redfish-core/lib/metric_report_definition.hpp index a0c4f1d224..fc717e4073 100644 --- a/redfish-core/lib/metric_report_definition.hpp +++ b/redfish-core/lib/metric_report_definition.hpp @@ -30,11 +30,11 @@ inline void fillReportDefinition( asyncResp->res.jsonValue["@odata.type"] = "#MetricReportDefinition.v1_3_0.MetricReportDefinition"; asyncResp->res.jsonValue["@odata.id"] = - telemetry::metricReportDefinitionUri + id; + telemetry::metricReportDefinitionUri + std::string("/") + id; asyncResp->res.jsonValue["Id"] = id; asyncResp->res.jsonValue["Name"] = id; asyncResp->res.jsonValue["MetricReport"]["@odata.id"] = - telemetry::metricReportUri + id; + telemetry::metricReportUri + std::string("/") + id; asyncResp->res.jsonValue["Status"]["State"] = "Enabled"; asyncResp->res.jsonValue["ReportUpdates"] = "Overwrite"; @@ -362,9 +362,11 @@ inline void requestRoutesMetricReportDefinitionCollection(App& app) "/redfish/v1/TelemetryService/MetricReportDefinitions"; asyncResp->res.jsonValue["Name"] = "Metric Definition Collection"; - - telemetry::getReportCollection( - asyncResp, telemetry::metricReportDefinitionUri); + const std::vector<const char*> interfaces{ + telemetry::reportInterface}; + collection_util::getCollectionMembers( + asyncResp, telemetry::metricReportDefinitionUri, interfaces, + "/xyz/openbmc_project/Telemetry/Reports/TelemetryService"); }); BMCWEB_ROUTE(app, "/redfish/v1/TelemetryService/MetricReportDefinitions/") |