xref: /openbmc/phosphor-logging/elog_block.hpp (revision 075c79237505ea3b810a461f5f514e4d520a0c44)
16a0ef6f5SAndrew Geissler #pragma once
26a0ef6f5SAndrew Geissler 
30add0b79SAndrew Geissler #include "config.h"
40add0b79SAndrew Geissler 
56a0ef6f5SAndrew Geissler #include "xyz/openbmc_project/Logging/ErrorBlocksTransition/server.hpp"
66a0ef6f5SAndrew Geissler 
76a0ef6f5SAndrew Geissler #include <sdbusplus/bus.hpp>
86a0ef6f5SAndrew Geissler #include <sdbusplus/server/object.hpp>
90add0b79SAndrew Geissler #include <xyz/openbmc_project/Association/Definitions/server.hpp>
106a0ef6f5SAndrew Geissler 
116a0ef6f5SAndrew Geissler namespace phosphor
126a0ef6f5SAndrew Geissler {
136a0ef6f5SAndrew Geissler namespace logging
146a0ef6f5SAndrew Geissler {
156a0ef6f5SAndrew Geissler 
1645e83521SPatrick Williams using BlockIface = sdbusplus::server::object_t<
176ddbf69eSWilly Tu     sdbusplus::server::xyz::openbmc_project::logging::ErrorBlocksTransition,
186ddbf69eSWilly Tu     sdbusplus::server::xyz::openbmc_project::association::Definitions>;
190add0b79SAndrew Geissler 
200add0b79SAndrew Geissler using AssociationList =
210add0b79SAndrew Geissler     std::vector<std::tuple<std::string, std::string, std::string>>;
226a0ef6f5SAndrew Geissler 
236a0ef6f5SAndrew Geissler /** @class Block
246a0ef6f5SAndrew Geissler  *  @brief OpenBMC logging Block implementation.
256a0ef6f5SAndrew Geissler  *  @details A concrete implementation for the
266a0ef6f5SAndrew Geissler  *  xyz.openbmc_project.Logging.ErrorBlocksTransition DBus API
276a0ef6f5SAndrew Geissler  */
286a0ef6f5SAndrew Geissler class Block : public BlockIface
296a0ef6f5SAndrew Geissler {
306a0ef6f5SAndrew Geissler   public:
316a0ef6f5SAndrew Geissler     Block() = delete;
326a0ef6f5SAndrew Geissler     Block(const Block&) = delete;
336a0ef6f5SAndrew Geissler     Block& operator=(const Block&) = delete;
346a0ef6f5SAndrew Geissler     Block(Block&&) = delete;
356a0ef6f5SAndrew Geissler     Block& operator=(Block&&) = delete;
366a0ef6f5SAndrew Geissler     virtual ~Block() = default;
376a0ef6f5SAndrew Geissler 
386a0ef6f5SAndrew Geissler     /** @brief Constructor to put object onto bus at a dbus path.
396a0ef6f5SAndrew Geissler      *  @param[in] bus - Bus to attach to.
406a0ef6f5SAndrew Geissler      *  @param[in] path - Path to attach at.
416a0ef6f5SAndrew Geissler      *  @param[in] entryId - Distinct ID of the error.
426a0ef6f5SAndrew Geissler      */
Block(sdbusplus::bus_t & bus,const std::string & path,uint32_t entryId)4345e83521SPatrick Williams     Block(sdbusplus::bus_t& bus, const std::string& path, uint32_t entryId) :
440add0b79SAndrew Geissler         BlockIface(bus, path.c_str()), entryId(entryId)
450add0b79SAndrew Geissler     {
46*075c7923SPatrick Williams         std::string entryPath{
47*075c7923SPatrick Williams             std::string(OBJ_ENTRY) + '/' + std::to_string(entryId)};
48*075c7923SPatrick Williams         AssociationList assoc{
49*075c7923SPatrick Williams             std::make_tuple(std::string{"blocking_error"},
50*075c7923SPatrick Williams                             std::string{"blocking_obj"}, entryPath)};
510add0b79SAndrew Geissler         associations(std::move(assoc));
520add0b79SAndrew Geissler     };
536a0ef6f5SAndrew Geissler 
546a0ef6f5SAndrew Geissler     uint32_t entryId;
556a0ef6f5SAndrew Geissler 
566a0ef6f5SAndrew Geissler   private:
576a0ef6f5SAndrew Geissler };
586a0ef6f5SAndrew Geissler 
596a0ef6f5SAndrew Geissler } // namespace logging
606a0ef6f5SAndrew Geissler } // namespace phosphor
61