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
handleManagersLogServiceEventLogLogEntryCollection(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId)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
handleManagersJournalEventLogEntry(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId,const std::string & param)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
handleManagersJournalEventLogClear(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId)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
requestRoutesManagersJournalEventLog(App & app)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