diff options
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | elog_entry.hpp | 10 | ||||
-rw-r--r-- | elog_serialize.cpp | 19 | ||||
-rw-r--r-- | log_manager.cpp | 1 | ||||
-rw-r--r-- | test/serialization_test_properties.cpp | 4 |
5 files changed, 33 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac index 2e4cdd1..d9c022d 100644 --- a/configure.ac +++ b/configure.ac @@ -76,6 +76,8 @@ AC_DEFINE(INVENTORY_ROOT, "/xyz/openbmc_project/inventory", [The inventory root. AC_DEFINE(CALLOUT_FWD_ASSOCIATION, "callout", [The name of the callout's forward association.]) AC_DEFINE(CALLOUT_REV_ASSOCIATION, "fault", [The name of the callout's reverse association.]) AC_DEFINE(BMC_VERSION_FILE, "/etc/os-release", [The file that contains the BMC firmware version]) +AC_DEFINE(FIRST_CEREAL_CLASS_VERSION_WITH_FWLEVEL, "2", + [First Cereal class version with the BMC code version persisted]) AC_ARG_VAR(YAML_DIR_TEST, [The path to the test error yaml files.]) AS_IF([test "x$YAML_DIR_TEST" == "x"], \ @@ -109,7 +111,7 @@ AC_DEFINE_UNQUOTED([ERROR_INFO_CAP], [$ERROR_INFO_CAP], \ [Cap on informational (and below) severity errors]) AC_ARG_VAR(CLASS_VERSION, [Class version to register with Cereal]) -AS_IF([test "x$CLASS_VERSION" == "x"], [CLASS_VERSION=1]) +AS_IF([test "x$CLASS_VERSION" == "x"], [CLASS_VERSION=2]) AC_DEFINE_UNQUOTED([CLASS_VERSION], [$CLASS_VERSION], [Class version to register with Cereal]) AC_CONFIG_HEADERS([config.h]) diff --git a/elog_entry.hpp b/elog_entry.hpp index 8dcc2a2..5ee8f5f 100644 --- a/elog_entry.hpp +++ b/elog_entry.hpp @@ -4,6 +4,7 @@ #include <sdbusplus/server/object.hpp> #include "xyz/openbmc_project/Logging/Entry/server.hpp" #include "xyz/openbmc_project/Object/Delete/server.hpp" +#include "xyz/openbmc_project/Software/Version/server.hpp" #include "org/openbmc/Associations/server.hpp" namespace phosphor @@ -14,7 +15,8 @@ namespace logging using EntryIfaces = sdbusplus::server::object::object< sdbusplus::xyz::openbmc_project::Logging::server::Entry, sdbusplus::xyz::openbmc_project::Object::server::Delete, - sdbusplus::org::openbmc::server::Associations>; + sdbusplus::org::openbmc::server::Associations, + sdbusplus::xyz::openbmc_project::Software::server::Version>; using AssociationList = std::vector<std::tuple<std::string, std::string, std::string>>; @@ -50,6 +52,8 @@ class Entry : public EntryIfaces * @param[in] severityErr - The severity of the error. * @param[in] msgErr - The message of the error. * @param[in] additionalDataErr - The error metadata. + * @param[in] objects - The list of associations. + * @param[in] fwVersion - The BMC code version. * @param[in] parent - The error's parent. */ Entry(sdbusplus::bus::bus& bus, @@ -60,6 +64,7 @@ class Entry : public EntryIfaces std::string&& msgErr, std::vector<std::string>&& additionalDataErr, AssociationList&& objects, + const std::string& fwVersion, internal::Manager& parent) : EntryIfaces(bus, path.c_str(), true), parent(parent) @@ -75,6 +80,9 @@ class Entry : public EntryIfaces sdbusplus::xyz::openbmc_project:: Logging::server::Entry::resolved(false); + version(fwVersion); + purpose(VersionPurpose::BMC); + // Emit deferred signal. this->emit_object_added(); }; diff --git a/elog_serialize.cpp b/elog_serialize.cpp index 1af1946..d807a93 100644 --- a/elog_serialize.cpp +++ b/elog_serialize.cpp @@ -29,7 +29,8 @@ template<class Archive> void save(Archive& a, const Entry& e, const std::uint32_t version) { a(e.id(), e.severity(), e.timestamp(), - e.message(), e.additionalData(), e.associations(), e.resolved()); + e.message(), e.additionalData(), e.associations(), e.resolved(), + e.version()); } /** @brief Function required by Cereal to perform deserialization. @@ -52,9 +53,18 @@ void load(Archive& a, Entry& e, const std::uint32_t version) std::vector<std::string> additionalData{}; bool resolved{}; AssociationList associations{}; + std::string fwVersion{}; - a(id, severity, timestamp, message, - additionalData, associations, resolved); + if (version < std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_FWLEVEL)) + { + a(id, severity, timestamp, message, + additionalData, associations, resolved); + } + else + { + a(id, severity, timestamp, message, + additionalData, associations, resolved, fwVersion); + } e.id(id); e.severity(severity); @@ -64,6 +74,9 @@ void load(Archive& a, Entry& e, const std::uint32_t version) e.sdbusplus::xyz::openbmc_project:: Logging::server::Entry::resolved(resolved); e.associations(associations); + e.version(fwVersion); + e.purpose(sdbusplus::xyz::openbmc_project::Software:: + server::Version::VersionPurpose::BMC); } fs::path serialize(const Entry& e, const fs::path& dir) diff --git a/log_manager.cpp b/log_manager.cpp index 641ed7b..f808e4b 100644 --- a/log_manager.cpp +++ b/log_manager.cpp @@ -201,6 +201,7 @@ void Manager::_commit(uint64_t transactionId, std::string&& errMsg, std::move(errMsg), std::move(additionalData), std::move(objects), + fwVersion, *this); serialize(*e); entries.insert(std::make_pair(entryId, std::move(e))); diff --git a/test/serialization_test_properties.cpp b/test/serialization_test_properties.cpp index 6c8ddf3..be9a7c7 100644 --- a/test/serialization_test_properties.cpp +++ b/test/serialization_test_properties.cpp @@ -16,6 +16,7 @@ TEST_F(TestSerialization, testProperties) std::vector<std::string> testData{"additional", "data"}; uint64_t timestamp{100}; std::string message{"test error"}; + std::string fwLevel{"level42"}; auto input = std::make_unique<Entry>( bus, std::string(OBJ_ENTRY) + '/' + std::to_string(id), @@ -25,6 +26,7 @@ TEST_F(TestSerialization, testProperties) std::move(message), std::move(testData), std::move(assocations), + fwLevel, manager); auto path = serialize(*input, TestSerialization::dir); @@ -44,6 +46,8 @@ TEST_F(TestSerialization, testProperties) EXPECT_EQ(input->additionalData(), output->additionalData()); EXPECT_EQ(input->resolved(), output->resolved()); EXPECT_EQ(input->associations(), output->associations()); + EXPECT_EQ(input->version(), output->version()); + EXPECT_EQ(input->purpose(), output->purpose()); } } // namespace test |