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 28*ca1600c1SSzymon Dompke struct IncorrectMetricUri 29*ca1600c1SSzymon Dompke { 30*ca1600c1SSzymon Dompke std::string uri; 31*ca1600c1SSzymon Dompke size_t index; 32*ca1600c1SSzymon Dompke }; 33*ca1600c1SSzymon Dompke 34*ca1600c1SSzymon Dompke inline std::optional<IncorrectMetricUri> getChassisSensorNode( 35*ca1600c1SSzymon Dompke const std::vector<std::string>& uris, 36*ca1600c1SSzymon Dompke boost::container::flat_set<std::pair<std::string, std::string>>& matched) 37*ca1600c1SSzymon Dompke { 38*ca1600c1SSzymon Dompke size_t uriIdx = 0; 39*ca1600c1SSzymon Dompke for (const std::string& uri : uris) 40*ca1600c1SSzymon Dompke { 41*ca1600c1SSzymon Dompke boost::urls::result<boost::urls::url_view> parsed = 42*ca1600c1SSzymon Dompke boost::urls::parse_relative_ref(uri); 43*ca1600c1SSzymon Dompke 44*ca1600c1SSzymon Dompke if (!parsed) 45*ca1600c1SSzymon Dompke { 46*ca1600c1SSzymon Dompke BMCWEB_LOG_ERROR << "Failed to get chassis and sensor Node " 47*ca1600c1SSzymon Dompke "from " 48*ca1600c1SSzymon Dompke << uri; 49*ca1600c1SSzymon Dompke return std::make_optional<IncorrectMetricUri>({uri, uriIdx}); 50*ca1600c1SSzymon Dompke } 51*ca1600c1SSzymon Dompke 52*ca1600c1SSzymon Dompke std::string chassis; 53*ca1600c1SSzymon Dompke std::string node; 54*ca1600c1SSzymon Dompke 55*ca1600c1SSzymon Dompke if (crow::utility::readUrlSegments(*parsed, "redfish", "v1", "Chassis", 56*ca1600c1SSzymon Dompke std::ref(chassis), std::ref(node))) 57*ca1600c1SSzymon Dompke { 58*ca1600c1SSzymon Dompke matched.emplace(std::move(chassis), std::move(node)); 59*ca1600c1SSzymon Dompke uriIdx++; 60*ca1600c1SSzymon Dompke continue; 61*ca1600c1SSzymon Dompke } 62*ca1600c1SSzymon Dompke 63*ca1600c1SSzymon Dompke // Those 2 segments cannot be validated here, as we don't know which 64*ca1600c1SSzymon Dompke // sensors exist at the moment of parsing. 65*ca1600c1SSzymon Dompke std::string ignoredSenorId; 66*ca1600c1SSzymon Dompke std::string ignoredSensorUnit; 67*ca1600c1SSzymon Dompke 68*ca1600c1SSzymon Dompke if (crow::utility::readUrlSegments(*parsed, "redfish", "v1", "Chassis", 69*ca1600c1SSzymon Dompke std::ref(chassis), "Sensors", 70*ca1600c1SSzymon Dompke std::ref(ignoredSenorId), 71*ca1600c1SSzymon Dompke std::ref(ignoredSensorUnit))) 72*ca1600c1SSzymon Dompke { 73*ca1600c1SSzymon Dompke matched.emplace(std::move(chassis), "Sensors"); 74*ca1600c1SSzymon Dompke uriIdx++; 75*ca1600c1SSzymon Dompke continue; 76*ca1600c1SSzymon Dompke } 77*ca1600c1SSzymon Dompke 78*ca1600c1SSzymon Dompke BMCWEB_LOG_ERROR << "Failed to get chassis and sensor Node " 79*ca1600c1SSzymon Dompke "from " 80*ca1600c1SSzymon Dompke << uri; 81*ca1600c1SSzymon Dompke return std::make_optional<IncorrectMetricUri>({uri, uriIdx}); 82*ca1600c1SSzymon Dompke } 83*ca1600c1SSzymon Dompke return std::nullopt; 84*ca1600c1SSzymon Dompke } 85*ca1600c1SSzymon Dompke 86081ebf06SWludzik, Jozef } // namespace telemetry 87081ebf06SWludzik, Jozef } // namespace redfish 88