summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch
diff options
context:
space:
mode:
authorP Dheeraj Srujan Kumar <p.dheeraj.srujan.kumar@intel.com>2022-03-31 00:20:48 +0300
committerP Dheeraj Srujan Kumar <p.dheeraj.srujan.kumar@intel.com>2022-05-06 02:21:19 +0300
commit18f97faa411078b95d042d207f5fff32bc8ece1d (patch)
treec557da2136640a8ce48439f19fe5f7071faffeca /meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch
parent2af35ee50ce9918ee3626c59f2cff62cd3ab9568 (diff)
downloadopenbmc-18f97faa411078b95d042d207f5fff32bc8ece1d.tar.xz
Update to internal 1-0.91
Signed-off-by: P Dheeraj Srujan Kumar <p.dheeraj.srujan.kumar@intel.com>
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch295
1 files changed, 0 insertions, 295 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch
deleted file mode 100644
index 3088a7f9d..000000000
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/telemetry/0002-Sync-Telmetry-service-with-EventService.patch
+++ /dev/null
@@ -1,295 +0,0 @@
-From 541353a4e4b06de42b6a9a400629f5a5fba04e86 Mon Sep 17 00:00:00 2001
-From: "Wludzik, Jozef" <jozef.wludzik@intel.com>
-Date: Tue, 15 Dec 2020 12:30:31 +0100
-Subject: [PATCH] Sync Telmetry service with EventService
-
-Synced the latest changes in Telemetry service with Event Service
-code. Now assembling MetricReport is covered in single place in
-code. Updated method of fetching Readings from Telemetry by
-Event Service. Using ReportUpdate signal is no longer
-supported. Now Event Service monitors for PropertiesChanged signal
-from /xyz/openbmc_project/Telemetry/Reports path.
-
-Tested:
- - Verified that EventListener received MetricReport response from
- Event Service in insecure http push style eventing mode
-
-Change-Id: I2fc1841a6c9259a8bff30b34bddc0d4aabd41912
-Signed-off-by: Wludzik, Jozef <jozef.wludzik@intel.com>
-Signed-off-by: Lukasz Kazmierczak <lukasz.kazmierczak@intel.com>
----
- .../include/event_service_manager.hpp | 156 ++++++------------
- redfish-core/lib/metric_report.hpp | 28 ++--
- 2 files changed, 69 insertions(+), 115 deletions(-)
-
-diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
-index 3f398d7..cf9f658 100644
---- a/redfish-core/include/event_service_manager.hpp
-+++ b/redfish-core/include/event_service_manager.hpp
-@@ -14,6 +14,7 @@
- // limitations under the License.
- */
- #pragma once
-+#include "metric_report.hpp"
- #include "registries.hpp"
- #include "registries/base_message_registry.hpp"
- #include "registries/openbmc_message_registry.hpp"
-@@ -511,47 +512,32 @@ class Subscription : public persistent_data::UserSubscription
- }
- #endif
-
-- void filterAndSendReports(const std::string& id2,
-- const std::string& readingsTs,
-- const ReadingsObjType& readings)
-+ void filterAndSendReports(
-+ const std::string& id,
-+ const std::variant<telemetry::TimestampReadings>& var)
- {
-- std::string metricReportDef =
-- "/redfish/v1/TelemetryService/MetricReportDefinitions/" + id2;
-+ std::string mrdUri = telemetry::metricReportDefinitionUri + id;
-
- // Empty list means no filter. Send everything.
- if (metricReportDefinitions.size())
- {
- if (std::find(metricReportDefinitions.begin(),
- metricReportDefinitions.end(),
-- metricReportDef) == metricReportDefinitions.end())
-+ mrdUri) == metricReportDefinitions.end())
- {
- return;
- }
- }
-
-- nlohmann::json metricValuesArray = nlohmann::json::array();
-- for (const auto& it : readings)
-+ nlohmann::json msg;
-+ if (!telemetry::fillReport(msg, id, var))
- {
-- metricValuesArray.push_back({});
-- nlohmann::json& entry = metricValuesArray.back();
--
-- auto& [id, property, value, timestamp] = it;
--
-- entry = {{"MetricId", id},
-- {"MetricProperty", property},
-- {"MetricValue", std::to_string(value)},
-- {"Timestamp", crow::utility::getDateTime(timestamp)}};
-+ BMCWEB_LOG_ERROR << "Failed to fill the MetricReport for DBus "
-+ "Report with id "
-+ << id;
-+ return;
- }
-
-- nlohmann::json msg = {
-- {"@odata.id", "/redfish/v1/TelemetryService/MetricReports/" + id},
-- {"@odata.type", "#MetricReport.v1_3_0.MetricReport"},
-- {"Id", id2},
-- {"Name", id2},
-- {"Timestamp", readingsTs},
-- {"MetricReportDefinition", {{"@odata.id", metricReportDef}}},
-- {"MetricValues", metricValuesArray}};
--
- this->sendEvent(
- msg.dump(2, ' ', true, nlohmann::json::error_handler_t::replace));
- }
-@@ -1317,75 +1303,6 @@ class EventServiceManager
- }
-
- #endif
--
-- void getMetricReading(const std::string& service,
-- const std::string& objPath, const std::string& intf)
-- {
-- std::size_t found = objPath.find_last_of('/');
-- if (found == std::string::npos)
-- {
-- BMCWEB_LOG_DEBUG << "Invalid objPath received";
-- return;
-- }
--
-- std::string idStr = objPath.substr(found + 1);
-- if (idStr.empty())
-- {
-- BMCWEB_LOG_DEBUG << "Invalid ID in objPath";
-- return;
-- }
--
-- crow::connections::systemBus->async_method_call(
-- [idStr{std::move(idStr)}](
-- const boost::system::error_code ec,
-- boost::container::flat_map<
-- std::string, std::variant<int32_t, ReadingsObjType>>&
-- resp) {
-- if (ec)
-- {
-- BMCWEB_LOG_DEBUG
-- << "D-Bus call failed to GetAll metric readings.";
-- return;
-- }
--
-- const int32_t* timestampPtr =
-- std::get_if<int32_t>(&resp["Timestamp"]);
-- if (!timestampPtr)
-- {
-- BMCWEB_LOG_DEBUG << "Failed to Get timestamp.";
-- return;
-- }
--
-- ReadingsObjType* readingsPtr =
-- std::get_if<ReadingsObjType>(&resp["Readings"]);
-- if (!readingsPtr)
-- {
-- BMCWEB_LOG_DEBUG << "Failed to Get Readings property.";
-- return;
-- }
--
-- if (!readingsPtr->size())
-- {
-- BMCWEB_LOG_DEBUG << "No metrics report to be transferred";
-- return;
-- }
--
-- for (const auto& it :
-- EventServiceManager::getInstance().subscriptionsMap)
-- {
-- std::shared_ptr<Subscription> entry = it.second;
-- if (entry->eventFormatType == metricReportFormatType)
-- {
-- entry->filterAndSendReports(
-- idStr, crow::utility::getDateTime(*timestampPtr),
-- *readingsPtr);
-- }
-- }
-- },
-- service, objPath, "org.freedesktop.DBus.Properties", "GetAll",
-- intf);
-- }
--
- void unregisterMetricReportSignal()
- {
- if (matchTelemetryMonitor)
-@@ -1405,9 +1322,11 @@ class EventServiceManager
- }
-
- BMCWEB_LOG_DEBUG << "Metrics report signal - Register";
-- std::string matchStr(
-- "type='signal',member='ReportUpdate', "
-- "interface='xyz.openbmc_project.MonitoringService.Report'");
-+ std::string matchStr = "type='signal',member='PropertiesChanged',"
-+ "interface='org.freedesktop.DBus.Properties',"
-+ "path_namespace=/xyz/openbmc_project/Telemetry/"
-+ "Reports/TelemetryService,"
-+ "arg0=xyz.openbmc_project.Telemetry.Report";
-
- matchTelemetryMonitor = std::make_shared<sdbusplus::bus::match::match>(
- *crow::connections::systemBus, matchStr,
-@@ -1418,10 +1337,43 @@ class EventServiceManager
- return;
- }
-
-- std::string service = msg.get_sender();
-- std::string objPath = msg.get_path();
-- std::string intf = msg.get_interface();
-- getMetricReading(service, objPath, intf);
-+ sdbusplus::message::object_path path(msg.get_path());
-+ std::string id = path.filename();
-+ if (id.empty())
-+ {
-+ BMCWEB_LOG_ERROR << "Failed to get Id from path";
-+ return;
-+ }
-+
-+ std::string intf;
-+ std::vector<std::pair<
-+ std::string, std::variant<telemetry::TimestampReadings>>>
-+ props;
-+ std::vector<std::string> invalidProps;
-+ msg.read(intf, props, invalidProps);
-+
-+ auto found =
-+ std::find_if(props.begin(), props.end(), [](const auto& x) {
-+ return x.first == "Readings";
-+ });
-+ if (found == props.end())
-+ {
-+ BMCWEB_LOG_INFO
-+ << "Failed to get Readings from Report properties";
-+ return;
-+ }
-+
-+ const std::variant<telemetry::TimestampReadings>& readings =
-+ found->second;
-+ for (const auto& it :
-+ EventServiceManager::getInstance().subscriptionsMap)
-+ {
-+ Subscription& entry = *it.second.get();
-+ if (entry.eventFormatType == metricReportFormatType)
-+ {
-+ entry.filterAndSendReports(id, readings);
-+ }
-+ }
- });
- }
-
-diff --git a/redfish-core/lib/metric_report.hpp b/redfish-core/lib/metric_report.hpp
-index 63c8c19..7fe281d 100644
---- a/redfish-core/lib/metric_report.hpp
-+++ b/redfish-core/lib/metric_report.hpp
-@@ -33,16 +33,14 @@ inline nlohmann::json toMetricValues(const Readings& readings)
- return metricValues;
- }
-
--inline void fillReport(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-- const std::string& id,
-+inline bool fillReport(nlohmann::json& json, const std::string& id,
- const std::variant<TimestampReadings>& var)
- {
-- asyncResp->res.jsonValue["@odata.type"] =
-- "#MetricReport.v1_3_0.MetricReport";
-- asyncResp->res.jsonValue["@odata.id"] = telemetry::metricReportUri + id;
-- asyncResp->res.jsonValue["Id"] = id;
-- asyncResp->res.jsonValue["Name"] = id;
-- asyncResp->res.jsonValue["MetricReportDefinition"]["@odata.id"] =
-+ json["@odata.type"] = "#MetricReport.v1_3_0.MetricReport";
-+ json["@odata.id"] = telemetry::metricReportUri + id;
-+ json["Id"] = id;
-+ json["Name"] = id;
-+ json["MetricReportDefinition"]["@odata.id"] =
- telemetry::metricReportDefinitionUri + id;
-
- const TimestampReadings* timestampReadings =
-@@ -50,14 +48,14 @@ inline void fillReport(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- if (!timestampReadings)
- {
- BMCWEB_LOG_ERROR << "Property type mismatch or property is missing";
-- messages::internalError(asyncResp->res);
-- return;
-+ return false;
- }
-
- const auto& [timestamp, readings] = *timestampReadings;
-- asyncResp->res.jsonValue["Timestamp"] =
-+ json["Timestamp"] =
- crow::utility::getDateTime(static_cast<time_t>(timestamp));
-- asyncResp->res.jsonValue["MetricValues"] = toMetricValues(readings);
-+ json["MetricValues"] = toMetricValues(readings);
-+ return true;
- }
- } // namespace telemetry
-
-@@ -118,7 +116,11 @@ inline void requestRoutesMetricReport(App& app)
- return;
- }
-
-- telemetry::fillReport(asyncResp, id, ret);
-+ if (!telemetry::fillReport(
-+ asyncResp->res.jsonValue, id, ret))
-+ {
-+ messages::internalError(asyncResp->res);
-+ }
- },
- telemetry::service, reportPath,
- "org.freedesktop.DBus.Properties", "Get",
---
-2.25.1