Ed Tanous | 40e9b92 | 2024-09-10 13:50:16 -0700 | [diff] [blame] | 1 | // SPDX-License-Identifier: Apache-2.0 |
| 2 | // SPDX-FileCopyrightText: Copyright OpenBMC Authors |
Wludzik, Jozef | 081ebf0 | 2020-04-27 17:24:15 +0200 | [diff] [blame] | 3 | #pragma once |
| 4 | |
Ed Tanous | 3ccb3ad | 2023-01-13 17:40:03 -0800 | [diff] [blame] | 5 | #include "app.hpp" |
| 6 | #include "dbus_utility.hpp" |
Ed Tanous | 539d8c6 | 2024-06-19 14:38:27 -0700 | [diff] [blame] | 7 | #include "generated/enums/resource.hpp" |
Ed Tanous | 3ccb3ad | 2023-01-13 17:40:03 -0800 | [diff] [blame] | 8 | #include "query.hpp" |
| 9 | #include "registries/privilege_registry.hpp" |
| 10 | #include "utils/dbus_utils.hpp" |
Wludzik, Jozef | 081ebf0 | 2020-04-27 17:24:15 +0200 | [diff] [blame] | 11 | #include "utils/telemetry_utils.hpp" |
Ed Tanous | d093c99 | 2023-01-19 19:01:49 -0800 | [diff] [blame] | 12 | #include "utils/time_utils.hpp" |
Wludzik, Jozef | 081ebf0 | 2020-04-27 17:24:15 +0200 | [diff] [blame] | 13 | |
Krzysztof Grobelny | 8947449 | 2022-09-06 16:30:38 +0200 | [diff] [blame] | 14 | #include <sdbusplus/asio/property.hpp> |
| 15 | #include <sdbusplus/unpack_properties.hpp> |
John Edward Broadbent | 7e860f1 | 2021-04-08 15:57:16 -0700 | [diff] [blame] | 16 | |
Wludzik, Jozef | 081ebf0 | 2020-04-27 17:24:15 +0200 | [diff] [blame] | 17 | namespace redfish |
| 18 | { |
| 19 | |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 20 | inline void handleTelemetryServiceGet( |
Ed Tanous | 45ca1b8 | 2022-03-25 13:07:27 -0700 | [diff] [blame] | 21 | crow::App& app, const crow::Request& req, |
Ed Tanous | 104f09c | 2022-01-25 09:56:04 -0800 | [diff] [blame] | 22 | const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 23 | { |
Carson Labrado | 3ba0007 | 2022-06-06 19:40:56 +0000 | [diff] [blame] | 24 | if (!redfish::setUpRedfishRoute(app, req, asyncResp)) |
Ed Tanous | 45ca1b8 | 2022-03-25 13:07:27 -0700 | [diff] [blame] | 25 | { |
| 26 | return; |
| 27 | } |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 28 | asyncResp->res.jsonValue["@odata.type"] = |
| 29 | "#TelemetryService.v1_2_1.TelemetryService"; |
| 30 | asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/TelemetryService"; |
| 31 | asyncResp->res.jsonValue["Id"] = "TelemetryService"; |
| 32 | asyncResp->res.jsonValue["Name"] = "Telemetry Service"; |
| 33 | |
| 34 | asyncResp->res.jsonValue["MetricReportDefinitions"]["@odata.id"] = |
| 35 | "/redfish/v1/TelemetryService/MetricReportDefinitions"; |
| 36 | asyncResp->res.jsonValue["MetricReports"]["@odata.id"] = |
| 37 | "/redfish/v1/TelemetryService/MetricReports"; |
Lukasz Kazmierczak | 07148cf | 2021-08-02 11:08:53 +0200 | [diff] [blame] | 38 | asyncResp->res.jsonValue["Triggers"]["@odata.id"] = |
| 39 | "/redfish/v1/TelemetryService/Triggers"; |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 40 | |
Ed Tanous | deae6a7 | 2024-11-11 21:58:57 -0800 | [diff] [blame] | 41 | dbus::utility::getAllProperties( |
| 42 | telemetry::service, "/xyz/openbmc_project/Telemetry/Reports", |
Krzysztof Grobelny | 8947449 | 2022-09-06 16:30:38 +0200 | [diff] [blame] | 43 | "xyz.openbmc_project.Telemetry.ReportManager", |
Ed Tanous | 5e7e2dc | 2023-02-16 10:37:01 -0800 | [diff] [blame] | 44 | [asyncResp](const boost::system::error_code& ec, |
Ed Tanous | b9d36b4 | 2022-02-26 21:42:46 -0800 | [diff] [blame] | 45 | const dbus::utility::DBusPropertiesMap& ret) { |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 46 | if (ec == boost::system::errc::host_unreachable) |
| 47 | { |
| 48 | asyncResp->res.jsonValue["Status"]["State"] = |
| 49 | resource::State::Absent; |
| 50 | return; |
| 51 | } |
| 52 | if (ec) |
| 53 | { |
| 54 | BMCWEB_LOG_ERROR("respHandler DBus error {}", ec); |
| 55 | messages::internalError(asyncResp->res); |
| 56 | return; |
| 57 | } |
| 58 | |
Ed Tanous | 539d8c6 | 2024-06-19 14:38:27 -0700 | [diff] [blame] | 59 | asyncResp->res.jsonValue["Status"]["State"] = |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 60 | resource::State::Enabled; |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 61 | |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 62 | const size_t* maxReports = nullptr; |
| 63 | const uint64_t* minInterval = nullptr; |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 64 | |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 65 | const bool success = sdbusplus::unpackPropertiesNoThrow( |
| 66 | dbus_utils::UnpackErrorPrinter(), ret, "MaxReports", maxReports, |
| 67 | "MinInterval", minInterval); |
Krzysztof Grobelny | 8947449 | 2022-09-06 16:30:38 +0200 | [diff] [blame] | 68 | |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 69 | if (!success) |
| 70 | { |
| 71 | messages::internalError(asyncResp->res); |
| 72 | return; |
| 73 | } |
Krzysztof Grobelny | 8947449 | 2022-09-06 16:30:38 +0200 | [diff] [blame] | 74 | |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 75 | if (maxReports != nullptr) |
| 76 | { |
| 77 | asyncResp->res.jsonValue["MaxReports"] = *maxReports; |
| 78 | } |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 79 | |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 80 | if (minInterval != nullptr) |
| 81 | { |
| 82 | asyncResp->res.jsonValue["MinCollectionInterval"] = |
| 83 | time_utils::toDurationString(std::chrono::milliseconds( |
| 84 | static_cast<time_t>(*minInterval))); |
| 85 | } |
| 86 | nlohmann::json::array_t supportedCollectionFunctions; |
| 87 | supportedCollectionFunctions.emplace_back("Maximum"); |
| 88 | supportedCollectionFunctions.emplace_back("Minimum"); |
| 89 | supportedCollectionFunctions.emplace_back("Average"); |
| 90 | supportedCollectionFunctions.emplace_back("Summation"); |
Krzysztof Grobelny | 8947449 | 2022-09-06 16:30:38 +0200 | [diff] [blame] | 91 | |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 92 | asyncResp->res.jsonValue["SupportedCollectionFunctions"] = |
| 93 | std::move(supportedCollectionFunctions); |
| 94 | }); |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 95 | } |
| 96 | |
John Edward Broadbent | 7e860f1 | 2021-04-08 15:57:16 -0700 | [diff] [blame] | 97 | inline void requestRoutesTelemetryService(App& app) |
Wludzik, Jozef | 081ebf0 | 2020-04-27 17:24:15 +0200 | [diff] [blame] | 98 | { |
John Edward Broadbent | 7e860f1 | 2021-04-08 15:57:16 -0700 | [diff] [blame] | 99 | BMCWEB_ROUTE(app, "/redfish/v1/TelemetryService/") |
Ed Tanous | ed39821 | 2021-06-09 17:05:54 -0700 | [diff] [blame] | 100 | .privileges(redfish::privileges::getTelemetryService) |
Ed Tanous | 45ca1b8 | 2022-03-25 13:07:27 -0700 | [diff] [blame] | 101 | .methods(boost::beast::http::verb::get)( |
| 102 | std::bind_front(handleTelemetryServiceGet, std::ref(app))); |
John Edward Broadbent | 7e860f1 | 2021-04-08 15:57:16 -0700 | [diff] [blame] | 103 | } |
John Edward Broadbent | 26bd9b5 | 2021-07-12 14:06:30 -0700 | [diff] [blame] | 104 | |
Wludzik, Jozef | 081ebf0 | 2020-04-27 17:24:15 +0200 | [diff] [blame] | 105 | } // namespace redfish |