From d9baec3ccdff5ed4d1620f374a252c769de5b45b Mon Sep 17 00:00:00 2001 From: Krzysztof Grobelny Date: Thu, 19 Aug 2021 10:55:38 +0000 Subject: [PATCH] Generalize ReadingType in MetricDefinition Recent addition of PMT required adding new type of sensor 'count', which doesnt comply with any of Redfish-defined Sensor.ReadingType values. To support property of this kind MetricDefinition implementation was altered to support sensor types not covered by Redfish types by a 'fallback' to direct usage of sensor type. Populating 'Units' was also modified, so it won't be shown if value does not have any units mapped. Testing: - PMT counters are shown properly in MetricDefinitions/Count - Redfish Validator passes --- redfish-core/lib/metric_definition.hpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/redfish-core/lib/metric_definition.hpp b/redfish-core/lib/metric_definition.hpp index 019168b..df29b65 100644 --- a/redfish-core/lib/metric_definition.hpp +++ b/redfish-core/lib/metric_definition.hpp @@ -33,6 +33,18 @@ bool containsOdata(const nlohmann::json& json, const std::string& odataId) return it != json.end(); } +std::string groupName(const std::string& sensorType) +{ + std::string group = sensors::toReadingType(sensorType); + if (group.empty()) + { + // Fallback for types not covered by standard Redfish Sensor.ReadingType + group = sensorType; + group[0] = static_cast(std::toupper(group[0])); + } + return group; +} + void addMembers(crow::Response& res, const boost::container::flat_map& el) { @@ -52,8 +64,7 @@ void addMembers(crow::Response& res, nlohmann::json& members = res.jsonValue["Members"]; const std::string odataId = - std::string(telemetry::metricDefinitionUri) + - sensors::toReadingType(type); + std::string(telemetry::metricDefinitionUri) + groupName(type); if (!containsOdata(members, odataId)) { @@ -149,15 +160,15 @@ inline void requestRoutesMetricDefinitionCollection(App& app) namespace telemetry { -bool isSensorIdSupported(std::string_view readingType) +bool isSensorIdSupported(std::string_view group) { for (const std::pair>& typeToPaths : sensors::dbus::paths) { for (const char* supportedPath : typeToPaths.second) { - if (readingType == - sensors::toReadingType( + if (group == + groupName( sdbusplus::message::object_path(supportedPath).filename())) { return true; @@ -168,7 +179,7 @@ bool isSensorIdSupported(std::string_view readingType) } void addMetricProperty( - bmcweb::AsyncResp& asyncResp, const std::string& readingType, + bmcweb::AsyncResp& asyncResp, const std::string& group, const boost::container::flat_map& el) { nlohmann::json& metricProperties = @@ -179,7 +190,7 @@ void addMetricProperty( std::string sensorId; if (dbus::utility::getNthStringFromPath(dbusSensor, 3, sensorId)) { - if (sensors::toReadingType(sensorId) == readingType) + if (groupName(sensorId) == group) { metricProperties.push_back(redfishSensor); } -- 2.25.1