1081ebf06SWludzik, Jozef #pragma once 2081ebf06SWludzik, Jozef 34dbb8aeaSWludzik, Jozef #include "dbus_utility.hpp" 4456cd875SSzymon Dompke #include "utility.hpp" 54dbb8aeaSWludzik, Jozef 6081ebf06SWludzik, Jozef namespace redfish 7081ebf06SWludzik, Jozef { 8081ebf06SWludzik, Jozef 9081ebf06SWludzik, Jozef namespace telemetry 10081ebf06SWludzik, Jozef { 11081ebf06SWludzik, Jozef constexpr const char* service = "xyz.openbmc_project.Telemetry"; 12081ebf06SWludzik, Jozef constexpr const char* reportInterface = "xyz.openbmc_project.Telemetry.Report"; 13081ebf06SWludzik, Jozef 14081ebf06SWludzik, Jozef inline std::string getDbusReportPath(const std::string& id) 15081ebf06SWludzik, Jozef { 16163994a8SSzymon Dompke sdbusplus::message::object_path reportsPath( 17163994a8SSzymon Dompke "/xyz/openbmc_project/Telemetry/Reports/TelemetryService"); 18163994a8SSzymon Dompke return {reportsPath / id}; 19163994a8SSzymon Dompke } 20163994a8SSzymon Dompke 21163994a8SSzymon Dompke inline std::string getDbusTriggerPath(const std::string& id) 22163994a8SSzymon Dompke { 23163994a8SSzymon Dompke sdbusplus::message::object_path triggersPath( 24163994a8SSzymon Dompke "/xyz/openbmc_project/Telemetry/Triggers/TelemetryService"); 25163994a8SSzymon Dompke return {triggersPath / id}; 26081ebf06SWludzik, Jozef } 27081ebf06SWludzik, Jozef 28ca1600c1SSzymon Dompke struct IncorrectMetricUri 29ca1600c1SSzymon Dompke { 30ca1600c1SSzymon Dompke std::string uri; 31ca1600c1SSzymon Dompke size_t index; 32ca1600c1SSzymon Dompke }; 33ca1600c1SSzymon Dompke 34ca1600c1SSzymon Dompke inline std::optional<IncorrectMetricUri> getChassisSensorNode( 35ca1600c1SSzymon Dompke const std::vector<std::string>& uris, 36ca1600c1SSzymon Dompke boost::container::flat_set<std::pair<std::string, std::string>>& matched) 37ca1600c1SSzymon Dompke { 38ca1600c1SSzymon Dompke size_t uriIdx = 0; 39ca1600c1SSzymon Dompke for (const std::string& uri : uris) 40ca1600c1SSzymon Dompke { 41ca1600c1SSzymon Dompke boost::urls::result<boost::urls::url_view> parsed = 42ca1600c1SSzymon Dompke boost::urls::parse_relative_ref(uri); 43ca1600c1SSzymon Dompke 44ca1600c1SSzymon Dompke if (!parsed) 45ca1600c1SSzymon Dompke { 46ca1600c1SSzymon Dompke BMCWEB_LOG_ERROR << "Failed to get chassis and sensor Node " 47ca1600c1SSzymon Dompke "from " 48ca1600c1SSzymon Dompke << uri; 49ca1600c1SSzymon Dompke return std::make_optional<IncorrectMetricUri>({uri, uriIdx}); 50ca1600c1SSzymon Dompke } 51ca1600c1SSzymon Dompke 52ca1600c1SSzymon Dompke std::string chassis; 53ca1600c1SSzymon Dompke std::string node; 54ca1600c1SSzymon Dompke 55ca1600c1SSzymon Dompke if (crow::utility::readUrlSegments(*parsed, "redfish", "v1", "Chassis", 56ca1600c1SSzymon Dompke std::ref(chassis), std::ref(node))) 57ca1600c1SSzymon Dompke { 58ca1600c1SSzymon Dompke matched.emplace(std::move(chassis), std::move(node)); 59ca1600c1SSzymon Dompke uriIdx++; 60ca1600c1SSzymon Dompke continue; 61ca1600c1SSzymon Dompke } 62ca1600c1SSzymon Dompke 63ca1600c1SSzymon Dompke // Those 2 segments cannot be validated here, as we don't know which 64ca1600c1SSzymon Dompke // sensors exist at the moment of parsing. 65ca1600c1SSzymon Dompke std::string ignoredSenorId; 66ca1600c1SSzymon Dompke 67ca1600c1SSzymon Dompke if (crow::utility::readUrlSegments(*parsed, "redfish", "v1", "Chassis", 68ca1600c1SSzymon Dompke std::ref(chassis), "Sensors", 69*c1d019a6SEd Tanous std::ref(ignoredSenorId))) 70ca1600c1SSzymon Dompke { 71ca1600c1SSzymon Dompke matched.emplace(std::move(chassis), "Sensors"); 72ca1600c1SSzymon Dompke uriIdx++; 73ca1600c1SSzymon Dompke continue; 74ca1600c1SSzymon Dompke } 75ca1600c1SSzymon Dompke 76ca1600c1SSzymon Dompke BMCWEB_LOG_ERROR << "Failed to get chassis and sensor Node " 77ca1600c1SSzymon Dompke "from " 78ca1600c1SSzymon Dompke << uri; 79ca1600c1SSzymon Dompke return std::make_optional<IncorrectMetricUri>({uri, uriIdx}); 80ca1600c1SSzymon Dompke } 81ca1600c1SSzymon Dompke return std::nullopt; 82ca1600c1SSzymon Dompke } 83ca1600c1SSzymon Dompke 84081ebf06SWludzik, Jozef } // namespace telemetry 85081ebf06SWludzik, Jozef } // namespace redfish 86