| #include "tlbmc/redfish/routes/power_subsystem.h" |
| |
| #include <functional> |
| #include <string> |
| |
| #include "absl/functional/bind_front.h" |
| #include "absl/status/statusor.h" |
| #include "tlbmc/redfish/app.h" |
| #include "tlbmc/redfish/request.h" |
| #include "tlbmc/redfish/response.h" |
| #include "tlbmc/redfish/url.h" |
| #include "tlbmc/store/store.h" |
| |
| namespace milotic_tlbmc::power_subsystem { |
| |
| namespace { |
| |
| void HandlePowerSubsystem(const RedfishApp& app, const RedfishRequest& req, |
| RedfishResponse& resp, |
| const std::string& chassis_id) { |
| // Assume chassis dosen't exist if it doesn't have a FRU key. |
| const Store& store = *app.GetStore(); |
| absl::StatusOr<std::string> fru_key = store.GetFruKeyByConfigKey(chassis_id); |
| if (!fru_key.ok()) { |
| resp.SetToAbslStatus(fru_key.status()); |
| return; |
| } |
| |
| resp.SetKeyInJsonBody( |
| "/@odata.id", |
| CreateUrl({"redfish", "v1", "Chassis", chassis_id, "PowerSubsystem"})); |
| resp.SetKeyInJsonBody("/@odata.type", |
| "#PowerSubsystem.v1_1_0.PowerSubsystem"); |
| resp.SetKeyInJsonBody("/Id", "PowerSubsystem"); |
| resp.SetKeyInJsonBody("/Name", "Power Subsystem"); |
| resp.SetKeyInJsonBody("/PowerSupplies/@odata.id", |
| CreateUrl({"redfish", "v1", "Chassis", chassis_id, |
| "PowerSubsystem", "PowerSupplies"})); |
| resp.SetKeyInJsonBody("/Status/Health", "OK"); |
| resp.SetKeyInJsonBody("/Status/State", "Enabled"); |
| } |
| |
| } // namespace |
| |
| void RegisterRoutes(RedfishApp& app) { |
| TLBMC_ROUTE(app, "/redfish/v1/Chassis/<str>/PowerSubsystem/") |
| .methods(boost::beast::http::verb::get)( |
| absl::bind_front(HandlePowerSubsystem, std::cref(app))); |
| } |
| |
| } // namespace milotic_tlbmc::power_subsystem |