188d7cf8dSAdriana Kobylak #pragma once 288d7cf8dSAdriana Kobylak 388d7cf8dSAdriana Kobylak #include <sdbusplus/bus.hpp> 488d7cf8dSAdriana Kobylak #include <sdbusplus/server/object.hpp> 588d7cf8dSAdriana Kobylak #include "xyz/openbmc_project/Logging/Entry/server.hpp" 636db46c2SDeepak Kodihalli #include "xyz/openbmc_project/Object/Delete/server.hpp" 7b388da65SDeepak Kodihalli #include "org/openbmc/Associations/server.hpp" 888d7cf8dSAdriana Kobylak 988d7cf8dSAdriana Kobylak namespace phosphor 1088d7cf8dSAdriana Kobylak { 1188d7cf8dSAdriana Kobylak namespace logging 1288d7cf8dSAdriana Kobylak { 1388d7cf8dSAdriana Kobylak 14b388da65SDeepak Kodihalli using EntryIfaces = sdbusplus::server::object::object< 15b388da65SDeepak Kodihalli sdbusplus::xyz::openbmc_project::Logging::server::Entry, 1636db46c2SDeepak Kodihalli sdbusplus::xyz::openbmc_project::Object::server::Delete, 17b388da65SDeepak Kodihalli sdbusplus::org::openbmc::server::Associations>; 1888d7cf8dSAdriana Kobylak 1935b46379SDeepak Kodihalli using AssociationList = 2035b46379SDeepak Kodihalli std::vector<std::tuple<std::string, std::string, std::string>>; 2135b46379SDeepak Kodihalli 228110ca6dSDeepak Kodihalli class Manager; 238110ca6dSDeepak Kodihalli 2488d7cf8dSAdriana Kobylak /** @class Entry 2588d7cf8dSAdriana Kobylak * @brief OpenBMC logging entry implementation. 2688d7cf8dSAdriana Kobylak * @details A concrete implementation for the 27b388da65SDeepak Kodihalli * xyz.openbmc_project.Logging.Entry and 28b388da65SDeepak Kodihalli * org.openbmc.Associations DBus APIs. 2988d7cf8dSAdriana Kobylak */ 30b388da65SDeepak Kodihalli class Entry : public EntryIfaces 3188d7cf8dSAdriana Kobylak { 3288d7cf8dSAdriana Kobylak public: 3388d7cf8dSAdriana Kobylak Entry() = delete; 3488d7cf8dSAdriana Kobylak Entry(const Entry&) = delete; 3588d7cf8dSAdriana Kobylak Entry& operator=(const Entry&) = delete; 3688d7cf8dSAdriana Kobylak Entry(Entry&&) = delete; 3788d7cf8dSAdriana Kobylak Entry& operator=(Entry&&) = delete; 3888d7cf8dSAdriana Kobylak virtual ~Entry() = default; 3988d7cf8dSAdriana Kobylak 40df995fafSAdriana Kobylak /** @brief Constructor to put object onto bus at a dbus path. 414ea7f312SAdriana Kobylak * Defer signal registration (pass true for deferSignal to the 424ea7f312SAdriana Kobylak * base class) until after the properties are set. 43df995fafSAdriana Kobylak * @param[in] bus - Bus to attach to. 44df995fafSAdriana Kobylak * @param[in] path - Path to attach at. 45c5f0bbd9SAdriana Kobylak * @param[in] idErr - The error entry id. 46c5f0bbd9SAdriana Kobylak * @param[in] timestampErr - The commit timestamp. 47c5f0bbd9SAdriana Kobylak * @param[in] severityErr - The severity of the error. 48c5f0bbd9SAdriana Kobylak * @param[in] msgErr - The message of the error. 49c5f0bbd9SAdriana Kobylak * @param[in] additionalDataErr - The error metadata. 508110ca6dSDeepak Kodihalli * @param[in] parent - The error's parent. 5188d7cf8dSAdriana Kobylak */ 524ea7f312SAdriana Kobylak Entry(sdbusplus::bus::bus& bus, 534ea7f312SAdriana Kobylak const std::string& path, 544ea7f312SAdriana Kobylak uint32_t idErr, 55c5f0bbd9SAdriana Kobylak uint64_t timestampErr, 564ea7f312SAdriana Kobylak Level severityErr, 574ea7f312SAdriana Kobylak std::string&& msgErr, 5835b46379SDeepak Kodihalli std::vector<std::string>&& additionalDataErr, 598110ca6dSDeepak Kodihalli AssociationList&& objects, 608110ca6dSDeepak Kodihalli Manager& parent) : 618110ca6dSDeepak Kodihalli EntryIfaces(bus, path.c_str(), true), 628110ca6dSDeepak Kodihalli parent(parent) 634ea7f312SAdriana Kobylak { 644ea7f312SAdriana Kobylak id(idErr); 654ea7f312SAdriana Kobylak severity(severityErr); 66c5f0bbd9SAdriana Kobylak timestamp(timestampErr); 674ea7f312SAdriana Kobylak message(std::move(msgErr)); 684ea7f312SAdriana Kobylak additionalData(std::move(additionalDataErr)); 6935b46379SDeepak Kodihalli associations(std::move(objects)); 7016aed11dSDeepak Kodihalli // Store a copy of associations in case we need to recreate 7116aed11dSDeepak Kodihalli assocs = associations(); 721c9f16eeSDeepak Kodihalli resolved(false); 734ea7f312SAdriana Kobylak 744ea7f312SAdriana Kobylak // Emit deferred signal. 754ea7f312SAdriana Kobylak this->emit_object_added(); 764ea7f312SAdriana Kobylak }; 774ea7f312SAdriana Kobylak 78*72654f10SDeepak Kodihalli /** @brief Constructor that puts an "empty" error object on the bus, 79*72654f10SDeepak Kodihalli * with only the id property populated. Rest of the properties 80*72654f10SDeepak Kodihalli * to be set by the caller. Caller should emit the added signal. 81*72654f10SDeepak Kodihalli * @param[in] bus - Bus to attach to. 82*72654f10SDeepak Kodihalli * @param[in] path - Path to attach at. 83*72654f10SDeepak Kodihalli * @param[in] id - The error entry id. 84*72654f10SDeepak Kodihalli * @param[in] parent - The error's parent. 85*72654f10SDeepak Kodihalli */ 86*72654f10SDeepak Kodihalli Entry(sdbusplus::bus::bus& bus, 87*72654f10SDeepak Kodihalli const std::string& path, 88*72654f10SDeepak Kodihalli uint32_t entryId, 89*72654f10SDeepak Kodihalli Manager& parent) : 90*72654f10SDeepak Kodihalli EntryIfaces(bus, path.c_str(), true), 91*72654f10SDeepak Kodihalli parent(parent) 92*72654f10SDeepak Kodihalli { 93*72654f10SDeepak Kodihalli id(entryId); 94*72654f10SDeepak Kodihalli }; 95*72654f10SDeepak Kodihalli 9690abed66SDeepak Kodihalli /** @brief Set resolution status of the error. 9790abed66SDeepak Kodihalli * @param[in] value - boolean indicating resolution 9890abed66SDeepak Kodihalli * status (true = resolved) 9990abed66SDeepak Kodihalli * @returns value of 'Resolved' property 10090abed66SDeepak Kodihalli */ 10190abed66SDeepak Kodihalli bool resolved(bool value) override 10290abed66SDeepak Kodihalli { 10390abed66SDeepak Kodihalli value ? 10490abed66SDeepak Kodihalli associations({}) : 10590abed66SDeepak Kodihalli associations(assocs); 10690abed66SDeepak Kodihalli 10790abed66SDeepak Kodihalli return sdbusplus::xyz::openbmc_project:: 10890abed66SDeepak Kodihalli Logging::server::Entry::resolved(value); 10990abed66SDeepak Kodihalli } 110*72654f10SDeepak Kodihalli using sdbusplus::xyz::openbmc_project:: 111*72654f10SDeepak Kodihalli Logging::server::Entry::resolved; 11290abed66SDeepak Kodihalli 11336db46c2SDeepak Kodihalli /** @brief Delete this d-bus object. 11436db46c2SDeepak Kodihalli */ 11536db46c2SDeepak Kodihalli void delete_() override; 11636db46c2SDeepak Kodihalli 11716aed11dSDeepak Kodihalli private: 11816aed11dSDeepak Kodihalli /** @brief This entry's associations */ 11916aed11dSDeepak Kodihalli AssociationList assocs = {}; 1208110ca6dSDeepak Kodihalli 1218110ca6dSDeepak Kodihalli /** @brief This entry's parent */ 1228110ca6dSDeepak Kodihalli Manager& parent; 12388d7cf8dSAdriana Kobylak }; 12488d7cf8dSAdriana Kobylak 12588d7cf8dSAdriana Kobylak } // namespace logging 12688d7cf8dSAdriana Kobylak } // namespace phosphor 127