1*43feb5cdSOliver Brewka // SPDX-License-Identifier: Apache-2.0 2*43feb5cdSOliver Brewka // SPDX-FileCopyrightText: Copyright OpenBMC Authors 3*43feb5cdSOliver Brewka // SPDX-FileCopyrightText: Copyright 2018 Intel Corporation 4*43feb5cdSOliver Brewka #pragma once 5*43feb5cdSOliver Brewka 6*43feb5cdSOliver Brewka #include "app.hpp" 7*43feb5cdSOliver Brewka #include "async_resp.hpp" 8*43feb5cdSOliver Brewka #include "error_messages.hpp" 9*43feb5cdSOliver Brewka #include "http_request.hpp" 10*43feb5cdSOliver Brewka #include "query.hpp" 11*43feb5cdSOliver Brewka #include "registries/privilege_registry.hpp" 12*43feb5cdSOliver Brewka #include "utils/eventlog_utils.hpp" 13*43feb5cdSOliver Brewka #include "utils/query_param.hpp" 14*43feb5cdSOliver Brewka 15*43feb5cdSOliver Brewka #include <boost/beast/http/field.hpp> 16*43feb5cdSOliver Brewka #include <boost/beast/http/status.hpp> 17*43feb5cdSOliver Brewka #include <boost/beast/http/verb.hpp> 18*43feb5cdSOliver Brewka #include <boost/system/linux_error.hpp> 19*43feb5cdSOliver Brewka #include <boost/url/format.hpp> 20*43feb5cdSOliver Brewka #include <boost/url/url.hpp> 21*43feb5cdSOliver Brewka #include <sdbusplus/message.hpp> 22*43feb5cdSOliver Brewka #include <sdbusplus/message/native_types.hpp> 23*43feb5cdSOliver Brewka #include <sdbusplus/unpack_properties.hpp> 24*43feb5cdSOliver Brewka 25*43feb5cdSOliver Brewka #include <string> 26*43feb5cdSOliver Brewka 27*43feb5cdSOliver Brewka namespace redfish 28*43feb5cdSOliver Brewka { 29*43feb5cdSOliver Brewka 30*43feb5cdSOliver Brewka inline void handleManagersLogServiceEventLogLogEntryCollection( 31*43feb5cdSOliver Brewka crow::App& app, const crow::Request& req, 32*43feb5cdSOliver Brewka const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 33*43feb5cdSOliver Brewka const std::string& managerId) 34*43feb5cdSOliver Brewka { 35*43feb5cdSOliver Brewka query_param::QueryCapabilities capabilities = { 36*43feb5cdSOliver Brewka .canDelegateTop = true, 37*43feb5cdSOliver Brewka .canDelegateSkip = true, 38*43feb5cdSOliver Brewka }; 39*43feb5cdSOliver Brewka query_param::Query delegatedQuery; 40*43feb5cdSOliver Brewka if (!redfish::setUpRedfishRouteWithDelegation(app, req, asyncResp, 41*43feb5cdSOliver Brewka delegatedQuery, capabilities)) 42*43feb5cdSOliver Brewka { 43*43feb5cdSOliver Brewka return; 44*43feb5cdSOliver Brewka } 45*43feb5cdSOliver Brewka if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME) 46*43feb5cdSOliver Brewka { 47*43feb5cdSOliver Brewka messages::resourceNotFound(asyncResp->res, "Manager", managerId); 48*43feb5cdSOliver Brewka return; 49*43feb5cdSOliver Brewka } 50*43feb5cdSOliver Brewka 51*43feb5cdSOliver Brewka eventlog_utils:: 52*43feb5cdSOliver Brewka handleSystemsAndManagersLogServiceEventLogLogEntryCollection( 53*43feb5cdSOliver Brewka asyncResp, delegatedQuery, 54*43feb5cdSOliver Brewka eventlog_utils::LogServiceParent::Managers); 55*43feb5cdSOliver Brewka } 56*43feb5cdSOliver Brewka 57*43feb5cdSOliver Brewka inline void handleManagersJournalEventLogEntry( 58*43feb5cdSOliver Brewka crow::App& app, const crow::Request& req, 59*43feb5cdSOliver Brewka const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 60*43feb5cdSOliver Brewka const std::string& managerId, const std::string& param) 61*43feb5cdSOliver Brewka { 62*43feb5cdSOliver Brewka if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 63*43feb5cdSOliver Brewka { 64*43feb5cdSOliver Brewka return; 65*43feb5cdSOliver Brewka } 66*43feb5cdSOliver Brewka if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME) 67*43feb5cdSOliver Brewka { 68*43feb5cdSOliver Brewka messages::resourceNotFound(asyncResp->res, "Manager", managerId); 69*43feb5cdSOliver Brewka return; 70*43feb5cdSOliver Brewka } 71*43feb5cdSOliver Brewka eventlog_utils::handleSystemsAndManagersLogServiceEventLogEntriesGet( 72*43feb5cdSOliver Brewka asyncResp, param, eventlog_utils::LogServiceParent::Managers); 73*43feb5cdSOliver Brewka } 74*43feb5cdSOliver Brewka 75*43feb5cdSOliver Brewka inline void handleManagersJournalEventLogClear( 76*43feb5cdSOliver Brewka 77*43feb5cdSOliver Brewka crow::App& app, const crow::Request& req, 78*43feb5cdSOliver Brewka const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 79*43feb5cdSOliver Brewka const std::string& managerId) 80*43feb5cdSOliver Brewka { 81*43feb5cdSOliver Brewka if (!redfish::setUpRedfishRoute(app, req, asyncResp)) 82*43feb5cdSOliver Brewka { 83*43feb5cdSOliver Brewka return; 84*43feb5cdSOliver Brewka } 85*43feb5cdSOliver Brewka if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME) 86*43feb5cdSOliver Brewka { 87*43feb5cdSOliver Brewka messages::resourceNotFound(asyncResp->res, "Manager", managerId); 88*43feb5cdSOliver Brewka return; 89*43feb5cdSOliver Brewka } 90*43feb5cdSOliver Brewka eventlog_utils::handleSystemsAndManagersLogServicesEventLogActionsClearPost( 91*43feb5cdSOliver Brewka asyncResp); 92*43feb5cdSOliver Brewka } 93*43feb5cdSOliver Brewka 94*43feb5cdSOliver Brewka inline void requestRoutesManagersJournalEventLog(App& app) 95*43feb5cdSOliver Brewka { 96*43feb5cdSOliver Brewka BMCWEB_ROUTE(app, 97*43feb5cdSOliver Brewka "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/") 98*43feb5cdSOliver Brewka .privileges(redfish::privileges::getLogEntryCollection) 99*43feb5cdSOliver Brewka .methods(boost::beast::http::verb::get)(std::bind_front( 100*43feb5cdSOliver Brewka handleManagersLogServiceEventLogLogEntryCollection, std::ref(app))); 101*43feb5cdSOliver Brewka 102*43feb5cdSOliver Brewka BMCWEB_ROUTE( 103*43feb5cdSOliver Brewka app, "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/<str>/") 104*43feb5cdSOliver Brewka .privileges(redfish::privileges::getLogEntry) 105*43feb5cdSOliver Brewka .methods(boost::beast::http::verb::get)( 106*43feb5cdSOliver Brewka std::bind_front(handleManagersJournalEventLogEntry, std::ref(app))); 107*43feb5cdSOliver Brewka 108*43feb5cdSOliver Brewka BMCWEB_ROUTE( 109*43feb5cdSOliver Brewka app, 110*43feb5cdSOliver Brewka "/redfish/v1/Managers/<str>/LogServices/EventLog/Actions/LogService.ClearLog/") 111*43feb5cdSOliver Brewka .privileges(redfish::privileges:: 112*43feb5cdSOliver Brewka postLogServiceSubOverComputerSystemLogServiceCollection) 113*43feb5cdSOliver Brewka .methods(boost::beast::http::verb::post)( 114*43feb5cdSOliver Brewka std::bind_front(handleManagersJournalEventLogClear, std::ref(app))); 115*43feb5cdSOliver Brewka } 116*43feb5cdSOliver Brewka } // namespace redfish 117