xref: /openbmc/bmcweb/features/redfish/lib/manager_logservices_journal_eventlog.hpp (revision 43feb5cd47bd6d87a927a1ec63024ac0eb573bac)
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