#pragma once #include #include #include #include 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 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