xref: /openbmc/bmcweb/features/redfish/lib/redfish_util.hpp (revision c5d03ff4737b1f4e4eb7e59f533d6c5a1faeeab5)
1*c5d03ff4SJennifer Lee /*
2*c5d03ff4SJennifer Lee // Copyright (c) 2019 Intel Corporation
3*c5d03ff4SJennifer Lee //
4*c5d03ff4SJennifer Lee // Licensed under the Apache License, Version 2.0 (the "License");
5*c5d03ff4SJennifer Lee // you may not use this file except in compliance with the License.
6*c5d03ff4SJennifer Lee // You may obtain a copy of the License at
7*c5d03ff4SJennifer Lee //
8*c5d03ff4SJennifer Lee //      http://www.apache.org/licenses/LICENSE-2.0
9*c5d03ff4SJennifer Lee //
10*c5d03ff4SJennifer Lee // Unless required by applicable law or agreed to in writing, software
11*c5d03ff4SJennifer Lee // distributed under the License is distributed on an "AS IS" BASIS,
12*c5d03ff4SJennifer Lee // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*c5d03ff4SJennifer Lee // See the License for the specific language governing permissions and
14*c5d03ff4SJennifer Lee // limitations under the License.
15*c5d03ff4SJennifer Lee */
16*c5d03ff4SJennifer Lee #ifndef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
17*c5d03ff4SJennifer Lee #pragma once
18*c5d03ff4SJennifer Lee 
19*c5d03ff4SJennifer Lee #include <node.hpp>
20*c5d03ff4SJennifer Lee 
21*c5d03ff4SJennifer Lee namespace redfish
22*c5d03ff4SJennifer Lee {
23*c5d03ff4SJennifer Lee 
24*c5d03ff4SJennifer Lee template <typename CallbackFunc>
25*c5d03ff4SJennifer Lee void getMainChassisId(std::shared_ptr<AsyncResp> asyncResp,
26*c5d03ff4SJennifer Lee                       CallbackFunc&& callback)
27*c5d03ff4SJennifer Lee {
28*c5d03ff4SJennifer Lee     // Find managed chassis
29*c5d03ff4SJennifer Lee     crow::connections::systemBus->async_method_call(
30*c5d03ff4SJennifer Lee         [callback,
31*c5d03ff4SJennifer Lee          asyncResp](const boost::system::error_code ec,
32*c5d03ff4SJennifer Lee                     const crow::openbmc_mapper::GetSubTreeType& subtree) {
33*c5d03ff4SJennifer Lee             if (ec)
34*c5d03ff4SJennifer Lee             {
35*c5d03ff4SJennifer Lee                 BMCWEB_LOG_ERROR << ec;
36*c5d03ff4SJennifer Lee                 return;
37*c5d03ff4SJennifer Lee             }
38*c5d03ff4SJennifer Lee             if (subtree.size() == 0)
39*c5d03ff4SJennifer Lee             {
40*c5d03ff4SJennifer Lee                 BMCWEB_LOG_DEBUG << "Can't find chassis!";
41*c5d03ff4SJennifer Lee                 return;
42*c5d03ff4SJennifer Lee             }
43*c5d03ff4SJennifer Lee 
44*c5d03ff4SJennifer Lee             std::size_t idPos = subtree[0].first.rfind("/");
45*c5d03ff4SJennifer Lee             if (idPos == std::string::npos ||
46*c5d03ff4SJennifer Lee                 (idPos + 1) >= subtree[0].first.size())
47*c5d03ff4SJennifer Lee             {
48*c5d03ff4SJennifer Lee                 messages::internalError(asyncResp->res);
49*c5d03ff4SJennifer Lee                 BMCWEB_LOG_DEBUG << "Can't parse chassis ID!";
50*c5d03ff4SJennifer Lee                 return;
51*c5d03ff4SJennifer Lee             }
52*c5d03ff4SJennifer Lee             std::string chassisId = subtree[0].first.substr(idPos + 1);
53*c5d03ff4SJennifer Lee             BMCWEB_LOG_DEBUG << "chassisId = " << chassisId;
54*c5d03ff4SJennifer Lee             callback(chassisId, asyncResp);
55*c5d03ff4SJennifer Lee         },
56*c5d03ff4SJennifer Lee         "xyz.openbmc_project.ObjectMapper",
57*c5d03ff4SJennifer Lee         "/xyz/openbmc_project/object_mapper",
58*c5d03ff4SJennifer Lee         "xyz.openbmc_project.ObjectMapper", "GetSubTree",
59*c5d03ff4SJennifer Lee         "/xyz/openbmc_project/inventory", 0,
60*c5d03ff4SJennifer Lee         std::array<const char*, 1>{
61*c5d03ff4SJennifer Lee             "xyz.openbmc_project.Inventory.Item.Chassis"});
62*c5d03ff4SJennifer Lee }
63*c5d03ff4SJennifer Lee } // namespace redfish
64*c5d03ff4SJennifer Lee #endif
65