blob: 5457530fbd2e9b9fcb01d71c46fc86251ac01506 [file] [log] [blame]
Wludzik, Jozef081ebf02020-04-27 17:24:15 +02001#pragma once
2
Wludzik, Jozef081ebf02020-04-27 17:24:15 +02003#include "utils/telemetry_utils.hpp"
4
John Edward Broadbent7e860f12021-04-08 15:57:16 -07005#include <app.hpp>
Ed Tanous168e20c2021-12-13 14:39:53 -08006#include <dbus_utility.hpp>
Ed Tanoused398212021-06-09 17:05:54 -07007#include <registries/privilege_registry.hpp>
John Edward Broadbent7e860f12021-04-08 15:57:16 -07008
Wludzik, Jozef081ebf02020-04-27 17:24:15 +02009namespace redfish
10{
11
John Edward Broadbent26bd9b52021-07-12 14:06:30 -070012inline void handleTelemetryServiceGet(
Ed Tanous104f09c2022-01-25 09:56:04 -080013 const crow::Request& /*req*/,
14 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
John Edward Broadbent26bd9b52021-07-12 14:06:30 -070015{
16 asyncResp->res.jsonValue["@odata.type"] =
17 "#TelemetryService.v1_2_1.TelemetryService";
18 asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1/TelemetryService";
19 asyncResp->res.jsonValue["Id"] = "TelemetryService";
20 asyncResp->res.jsonValue["Name"] = "Telemetry Service";
21
22 asyncResp->res.jsonValue["MetricReportDefinitions"]["@odata.id"] =
23 "/redfish/v1/TelemetryService/MetricReportDefinitions";
24 asyncResp->res.jsonValue["MetricReports"]["@odata.id"] =
25 "/redfish/v1/TelemetryService/MetricReports";
Lukasz Kazmierczak07148cf2021-08-02 11:08:53 +020026 asyncResp->res.jsonValue["Triggers"]["@odata.id"] =
27 "/redfish/v1/TelemetryService/Triggers";
John Edward Broadbent26bd9b52021-07-12 14:06:30 -070028
29 crow::connections::systemBus->async_method_call(
Ed Tanous168e20c2021-12-13 14:39:53 -080030 [asyncResp](
31 const boost::system::error_code ec,
32 const std::vector<
33 std::pair<std::string, dbus::utility::DbusVariantType>>& ret) {
John Edward Broadbent26bd9b52021-07-12 14:06:30 -070034 if (ec == boost::system::errc::host_unreachable)
35 {
36 asyncResp->res.jsonValue["Status"]["State"] = "Absent";
37 return;
38 }
39 if (ec)
40 {
41 BMCWEB_LOG_ERROR << "respHandler DBus error " << ec;
42 messages::internalError(asyncResp->res);
43 return;
44 }
45
46 asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
47
48 const size_t* maxReports = nullptr;
49 const uint64_t* minInterval = nullptr;
50 for (const auto& [key, var] : ret)
51 {
52 if (key == "MaxReports")
53 {
54 maxReports = std::get_if<size_t>(&var);
55 }
56 else if (key == "MinInterval")
57 {
58 minInterval = std::get_if<uint64_t>(&var);
59 }
60 }
61 if (!maxReports || !minInterval)
62 {
63 BMCWEB_LOG_ERROR
64 << "Property type mismatch or property is missing";
65 messages::internalError(asyncResp->res);
66 return;
67 }
68
69 asyncResp->res.jsonValue["MaxReports"] = *maxReports;
70 asyncResp->res.jsonValue["MinCollectionInterval"] =
71 time_utils::toDurationString(std::chrono::milliseconds(
72 static_cast<time_t>(*minInterval)));
73 },
74 telemetry::service, "/xyz/openbmc_project/Telemetry/Reports",
75 "org.freedesktop.DBus.Properties", "GetAll",
76 "xyz.openbmc_project.Telemetry.ReportManager");
77}
78
John Edward Broadbent7e860f12021-04-08 15:57:16 -070079inline void requestRoutesTelemetryService(App& app)
Wludzik, Jozef081ebf02020-04-27 17:24:15 +020080{
John Edward Broadbent7e860f12021-04-08 15:57:16 -070081 BMCWEB_ROUTE(app, "/redfish/v1/TelemetryService/")
Ed Tanoused398212021-06-09 17:05:54 -070082 .privileges(redfish::privileges::getTelemetryService)
John Edward Broadbent26bd9b52021-07-12 14:06:30 -070083 .methods(boost::beast::http::verb::get)(handleTelemetryServiceGet);
John Edward Broadbent7e860f12021-04-08 15:57:16 -070084}
John Edward Broadbent26bd9b52021-07-12 14:06:30 -070085
Wludzik, Jozef081ebf02020-04-27 17:24:15 +020086} // namespace redfish