manager: use new Logging.Cleared event
Modify the internal manager support for creating internal events
to be able to support the sdbusplus generated events. Transition
from the local Logging.Error.LogsCleared to the global Logging.Cleared
event. Clean up references to the old event.
Tested:
```
$ busctl --user call xyz.openbmc_project.Logging /xyz/openbmc_project/logging xyz.openbmc_project.Collection.DeleteAll DeleteAll
$ busctl --user introspect xyz.openbmc_project.Logging /xyz/openbmc_project/logging/entry/1 -l | cat
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
xyz.openbmc_project.Logging.Entry interface - - -
.GetEntry method - h -
.AdditionalData property as 5 "NUMBER_OF_LOGS=210" "_CODE_FILE=../log_manager.hpp" "_CODE_FUNC=virtual void phosphor::logging::Manager::deleteAll()" "_CODE_LINE=361" "_PID=3318436" emits-change writable
.EventId property s "" emits-change writable
.Id property u 1 emits-change writable
.Message property s "xyz.openbmc_project.Logging.Cleared" emits-change writable
.Resolution property s "" emits-change writable
.Resolved property b false emits-change writable
.ServiceProviderNotify property s "xyz.openbmc_project.Logging.Entry.Notify.NotSupported" emits-change writable
.Severity property s "xyz.openbmc_project.Logging.Entry.Level.Informational" emits-change writable
.Timestamp property t 1730408674348 emits-change writable
.UpdateTimestamp property t 1730408674348 emits-change writable
```
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I470f33ae2f5bfae6bf6d6a80ac2c5f028e41da95
diff --git a/extensions/openpower-pels/registry/message_registry.json b/extensions/openpower-pels/registry/message_registry.json
index bd79c2e..cbcb8d2 100644
--- a/extensions/openpower-pels/registry/message_registry.json
+++ b/extensions/openpower-pels/registry/message_registry.json
@@ -552,7 +552,7 @@
},
{
- "Name": "xyz.openbmc_project.Logging.Error.LogsCleared",
+ "Name": "xyz.openbmc_project.Logging.Cleared",
"Subsystem": "bmc_firmware",
"Severity": "non_error",
@@ -561,7 +561,7 @@
"Words6To9": {
"6": {
"Description": "Number of logs deleted",
- "AdditionalDataPropSource": "NUM_LOGS"
+ "AdditionalDataPropSource": "NUMBER_OF_LOGS"
}
}
},
diff --git a/gen/xyz/openbmc_project/Logging/meson.build b/gen/xyz/openbmc_project/Logging/meson.build
index c27f679..6421d35 100644
--- a/gen/xyz/openbmc_project/Logging/meson.build
+++ b/gen/xyz/openbmc_project/Logging/meson.build
@@ -1,16 +1,2 @@
# Generated file; do not modify.
-generated_sources += custom_target(
- 'xyz/openbmc_project/Logging__cpp'.underscorify(),
- input: [ '../../../../yaml/xyz/openbmc_project/Logging.errors.yaml', ],
- output: [ 'error.cpp', 'error.hpp', ],
- depend_files: sdbusplusplus_depfiles,
- command: [
- sdbuspp_gen_meson_prog, '--command', 'cpp',
- '--output', meson.current_build_dir(),
- '--tool', sdbusplusplus_prog,
- '--directory', meson.current_source_dir() / '../../../../yaml',
- 'xyz/openbmc_project/Logging',
- ],
-)
-
subdir('Internal')
diff --git a/gen/xyz/openbmc_project/meson.build b/gen/xyz/openbmc_project/meson.build
index 1e56539..1b45c9d 100644
--- a/gen/xyz/openbmc_project/meson.build
+++ b/gen/xyz/openbmc_project/meson.build
@@ -1,16 +1,2 @@
# Generated file; do not modify.
subdir('Logging')
-generated_others += custom_target(
- 'xyz/openbmc_project/Logging__markdown'.underscorify(),
- input: [ '../../../yaml/xyz/openbmc_project/Logging.errors.yaml', ],
- output: [ 'Logging.md' ],
- depend_files: sdbusplusplus_depfiles,
- command: [
- sdbuspp_gen_meson_prog, '--command', 'markdown',
- '--output', meson.current_build_dir(),
- '--tool', sdbusplusplus_prog,
- '--directory', meson.current_source_dir() / '../../../yaml',
- 'xyz/openbmc_project/Logging',
- ],
-)
-
diff --git a/lib/lg2_commit.cpp b/lib/lg2_commit.cpp
index 4d75594..6f11a4c 100644
--- a/lib/lg2_commit.cpp
+++ b/lib/lg2_commit.cpp
@@ -1,3 +1,5 @@
+#include "lg2_commit.hpp"
+
#include <sys/syslog.h>
#include <nlohmann/json.hpp>
@@ -117,4 +119,19 @@
data_from_json(t));
}
+auto extractEvent(sdbusplus::exception::generated_event_base&& t)
+ -> std::tuple<std::string, Entry::Level, std::vector<std::string>>
+{
+ auto data = data_from_json(t);
+ std::vector<std::string> additional_data = {};
+
+ for (auto& [key, data] : data)
+ {
+ additional_data.emplace_back(key + "=" + data);
+ }
+
+ return {t.name(), severity_from_syslog(t.severity()),
+ std::move(additional_data)};
+}
+
} // namespace lg2::details
diff --git a/lib/lg2_commit.hpp b/lib/lg2_commit.hpp
new file mode 100644
index 0000000..db6bab0
--- /dev/null
+++ b/lib/lg2_commit.hpp
@@ -0,0 +1,22 @@
+#pragma once
+#include <sdbusplus/exception.hpp>
+#include <xyz/openbmc_project/Logging/Entry/client.hpp>
+
+#include <string>
+#include <tuple>
+#include <vector>
+
+namespace lg2::details
+{
+
+using Entry = sdbusplus::client::xyz::openbmc_project::logging::Entry<>;
+
+/** Extract the message, level, and additional data from agenerated event.
+ *
+ * @param[in] The event to extract data from.
+ * @return A tuple containing the message, level, and additional data.
+ */
+auto extractEvent(sdbusplus::exception::generated_event_base&&)
+ -> std::tuple<std::string, Entry::Level, std::vector<std::string>>;
+
+} // namespace lg2::details
diff --git a/log_manager.cpp b/log_manager.cpp
index 1b0cf3f..de3509d 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -6,6 +6,7 @@
#include "elog_meta.hpp"
#include "elog_serialize.hpp"
#include "extensions.hpp"
+#include "lib/lg2_commit.hpp"
#include "paths.hpp"
#include "util.hpp"
@@ -259,6 +260,13 @@
return objPath;
}
+auto Manager::createFromEvent(sdbusplus::exception::generated_event_base&&
+ event) -> sdbusplus::message::object_path
+{
+ auto [msg, level, data] = lg2::details::extractEvent(std::move(event));
+ return this->createEntry(msg, level, std::move(data));
+}
+
bool Manager::isQuiesceOnErrorEnabled()
{
// When running under tests, the Logging.Settings service will not be
diff --git a/log_manager.hpp b/log_manager.hpp
index cd5ae1d..2535832 100644
--- a/log_manager.hpp
+++ b/log_manager.hpp
@@ -2,14 +2,14 @@
#include "elog_block.hpp"
#include "elog_entry.hpp"
-#include "xyz/openbmc_project/Collection/DeleteAll/server.hpp"
-#include "xyz/openbmc_project/Logging/Create/server.hpp"
-#include "xyz/openbmc_project/Logging/Entry/server.hpp"
#include "xyz/openbmc_project/Logging/Internal/Manager/server.hpp"
-#include "xyz/openbmc_project/Logging/error.hpp"
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
+#include <xyz/openbmc_project/Collection/DeleteAll/server.hpp>
+#include <xyz/openbmc_project/Logging/Create/server.hpp>
+#include <xyz/openbmc_project/Logging/Entry/server.hpp>
+#include <xyz/openbmc_project/Logging/event.hpp>
#include <list>
@@ -26,8 +26,7 @@
sdbusplus::server::xyz::openbmc_project::collection::DeleteAll;
using Severity = sdbusplus::xyz::openbmc_project::Logging::server::Entry::Level;
-using LogsCleared =
- sdbusplus::xyz::openbmc_project::Logging::Error::LogsCleared;
+using LoggingCleared = sdbusplus::event::xyz::openbmc_project::Logging::Cleared;
namespace details
{
@@ -187,6 +186,13 @@
const FFDCEntries& ffdc = FFDCEntries{})
-> sdbusplus::message::object_path;
+ /** @brief Create an internal event log from the sdbusplus generated event
+ *
+ * @param[in] event - The event to create.
+ */
+ auto createFromEvent(sdbusplus::exception::generated_event_base&& event)
+ -> sdbusplus::message::object_path;
+
/** @brief Common wrapper for creating an Entry object
*
* @return true if quiesce on error setting is enabled, false otherwise
@@ -351,10 +357,8 @@
{
log<level::INFO>("Deleting all log entries");
auto numbersOfLogs = manager.eraseAll();
- std::map<std::string, std::string> additionalData;
- additionalData.emplace("NUM_LOGS", std::to_string(numbersOfLogs));
- manager.create(LogsCleared::errName, Severity::Informational,
- additionalData);
+ manager.createFromEvent(
+ LoggingCleared("NUMBER_OF_LOGS", numbersOfLogs));
}
/** @brief D-Bus method call implementation to create an event log.
diff --git a/yaml/xyz/openbmc_project/Logging.errors.yaml b/yaml/xyz/openbmc_project/Logging.errors.yaml
deleted file mode 100644
index e90bc7c..0000000
--- a/yaml/xyz/openbmc_project/Logging.errors.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# xyz.openbmc_project.Logging.Error
-- name: LogsCleared
- description: Indicate the user cleared all the logs
diff --git a/yaml/xyz/openbmc_project/Logging.metadata.yaml b/yaml/xyz/openbmc_project/Logging.metadata.yaml
deleted file mode 100644
index 99d647a..0000000
--- a/yaml/xyz/openbmc_project/Logging.metadata.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-- name: LogsCleared
- level: INFO
- meta:
- - str: "NUM_LOGS=%u"
- type: size_t