blob: 1e72a6b45d7f27c044161ff4882ae1c131c4e19f [file] [log] [blame]
#pragma once
#include <sdbusplus/asio/object_server.hpp>
#include <xyz/openbmc_project/Common/FilePath/server.hpp>
#include <format>
#include <string>
namespace bios_bmc_smm_error_logger
{
/**
* @brief A class for notifying file paths of CPER logs.
*/
class CperFileNotifier
{
public:
/**
* @brief Constructor for the CperFileNotifier class.
*
* @param server - sdbusplus asio object server.
* @param filePath - full path of the CPER log JSON file.
* @param entry - index of the DBus file path object.
*/
CperFileNotifier(sdbusplus::asio::object_server& server,
const std::string& filePath, uint64_t entry) :
server(server)
{
pathIface = server.add_interface(generatePath(entry).c_str(),
"xyz.openbmc_project.Common.FilePath");
pathIface->register_property("Path", filePath);
pathIface->initialize();
}
~CperFileNotifier()
{
server.remove_interface(pathIface);
}
CperFileNotifier& operator=(const CperFileNotifier&) = delete;
CperFileNotifier& operator=(CperFileNotifier&&) = delete;
CperFileNotifier(const CperFileNotifier&) = delete;
CperFileNotifier(CperFileNotifier&&) = default;
static constexpr const char* cperBasePath =
"/xyz/openbmc_project/external_storer/bios_bmc_smm_error_logger/CPER";
private:
sdbusplus::asio::object_server& server;
std::shared_ptr<sdbusplus::asio::dbus_interface> pathIface;
/**
* @brief Generate a path for the CperFileNotifier DBus object.
*
* @param[in] entry - unique index for the DBus object.
*/
std::string generatePath(uint64_t entry)
{
return std::format("{}/entry{}", cperBasePath, entry);
}
};
} // namespace bios_bmc_smm_error_logger