blob: f0eb651dc205c033f4dd73785101ab9f06e98ac6 [file] [log] [blame]
Ed Tanous6c068982023-02-07 15:44:38 -08001#pragma once
2
3#include "app.hpp"
4#include "error_messages.hpp"
5#include "http_request.hpp"
6#include "http_response.hpp"
7#include "query.hpp"
8#include "registries/privilege_registry.hpp"
9
10#include <nlohmann/json.hpp>
11
12#include <functional>
13#include <memory>
14
15namespace redfish
16{
17
18inline void handleAggregationServiceHead(
19 App& app, const crow::Request& req,
20 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
21{
22 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
23 {
24 return;
25 }
26 asyncResp->res.addHeader(
27 boost::beast::http::field::link,
28 "</redfish/v1/JsonSchemas/AggregationService/AggregationService.json>; rel=describedby");
29}
30
31inline void handleAggregationServiceGet(
32 App& app, const crow::Request& req,
33 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
34{
35 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
36 {
37 return;
38 }
39 asyncResp->res.addHeader(
40 boost::beast::http::field::link,
41 "</redfish/v1/JsonSchemas/AggregationService/AggregationService.json>; rel=describedby");
42 nlohmann::json& json = asyncResp->res.jsonValue;
43 json["@odata.id"] = "/redfish/v1/AggregationService";
44 json["@odata.type"] = "#AggregationService.v1_0_1.AggregationService";
45 json["Id"] = "AggregationService";
46 json["Name"] = "Aggregation Service";
47 json["Description"] = "Aggregation Service";
48 json["ServiceEnabled"] = true;
Carson Labrado5315c1b2023-02-18 01:02:18 +000049 json["AggregationSources"]["@odata.id"] =
50 "/redfish/v1/AggregationService/AggregationSources";
Ed Tanous6c068982023-02-07 15:44:38 -080051}
52
53inline void requestAggregationServiceRoutes(App& app)
54{
55 BMCWEB_ROUTE(app, "/redfish/v1/AggregationService/")
56 .privileges(redfish::privileges::headAggregationService)
57 .methods(boost::beast::http::verb::head)(
58 std::bind_front(handleAggregationServiceHead, std::ref(app)));
59 BMCWEB_ROUTE(app, "/redfish/v1/AggregationService/")
60 .privileges(redfish::privileges::getAggregationService)
61 .methods(boost::beast::http::verb::get)(
62 std::bind_front(handleAggregationServiceGet, std::ref(app)));
63}
64
Carson Labrado5315c1b2023-02-18 01:02:18 +000065inline void handleAggregationSourcesGet(
66 App& app, const crow::Request& req,
67 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
68{
69 if (!redfish::setUpRedfishRoute(app, req, asyncResp))
70 {
71 return;
72 }
73 asyncResp->res.addHeader(
74 boost::beast::http::field::link,
75 "</redfish/v1/JsonSchemas/AggregationSourceCollection/AggregationSourceCollection.json>; rel=describedby");
76 nlohmann::json& json = asyncResp->res.jsonValue;
77 json["@odata.id"] = "/redfish/v1/AggregationService/AggregationSources";
78 json["@odata.type"] =
79 "#AggregationSourceCollection.AggregationSourceCollection";
80 json["Name"] = "Aggregation Source Collection";
81 json["Members"] = nlohmann::json::array();
82 json["Members@odata.count"] = 0;
83
84 // TODO: Query D-Bus for satellite configs and add them to the Members array
85}
86
87inline void requestAggregationSourcesRoutes(App& app)
88{
89 BMCWEB_ROUTE(app, "/redfish/v1/AggregationService/AggregationSources/")
90 .privileges(redfish::privileges::getAggregationService)
91 .methods(boost::beast::http::verb::get)(
92 std::bind_front(handleAggregationSourcesGet, std::ref(app)));
93}
94
Ed Tanous6c068982023-02-07 15:44:38 -080095} // namespace redfish