peltool to delete PEL files permanently
Instead of calling xyz.openbmc_project.Logging.Entry to delete PELs
st::filesystem remove is used to permanently delete the corresponding
files. In the future deleting a D-Bus event log will not delete
the corresponding PEL, so the only way to delete a PEL is to delete the file.
Signed-off-by: Miguel Gomez <mgomez@mx1.ibm.com>
Change-Id: Idec00bdbe4864c703bb5a874d12144c44dae7d5e
diff --git a/extensions/openpower-pels/tools/peltool.cpp b/extensions/openpower-pels/tools/peltool.cpp
index 9926833..427216a 100644
--- a/extensions/openpower-pels/tools/peltool.cpp
+++ b/extensions/openpower-pels/tools/peltool.cpp
@@ -571,52 +571,42 @@
}
/**
- * @brief Delete a PEL by deleting its corresponding event log.
+ * @brief Delete a PEL file.
*
- * @param[in] pel - The PEL to delete
- * @param[in] hexDump - Boolean to print hexdump of PEL instead of JSON (unused)
+ * @param[in] id - The PEL ID to delete.
*/
-void deletePEL(const PEL& pel, bool hexDump = false)
+void deletePEL(const std::string& id)
{
- std::string path{object_path::logEntry};
- path += std::to_string(pel.obmcLogID());
+ std::string pelID{id};
- try
+ std::transform(pelID.begin(), pelID.end(), pelID.begin(), toupper);
+
+ if (pelID.find("0X") == 0)
{
- auto bus = sdbusplus::bus::new_default();
- auto method = bus.new_method_call(service::logging, path.c_str(),
- interface::deleteObj, "Delete");
- auto reply = bus.call(method);
+ pelID.erase(0, 2);
}
- catch (const SdBusError& e)
+
+ for (auto it = fs::directory_iterator(EXTENSION_PERSIST_DIR "/pels/logs");
+ it != fs::directory_iterator(); ++it)
{
- std::cerr << "D-Bus call to delete event log " << pel.obmcLogID()
- << " failed: " << e.what() << "\n";
- exit(1);
+ if (ends_with((*it).path(), pelID))
+ {
+ fs::remove((*it).path());
+ }
}
}
/**
- * @brief Delete all PELs by deleting all event logs.
+ * @brief Delete all PEL files.
*/
void deleteAllPELs()
{
- try
- {
- // This may move to an audit log some day
- log<level::INFO>("peltool deleting all event logs");
+ log<level::INFO>("peltool deleting all event logs");
- auto bus = sdbusplus::bus::new_default();
- auto method =
- bus.new_method_call(service::logging, object_path::logging,
- interface::deleteAll, "DeleteAll");
- auto reply = bus.call(method);
- }
- catch (const SdBusError& e)
+ for (const auto& entry :
+ fs::directory_iterator(EXTENSION_PERSIST_DIR "/pels/logs"))
{
- std::cerr << "D-Bus call to delete all event logs failed: " << e.what()
- << "\n";
- exit(1);
+ fs::remove(entry.path());
}
}
@@ -871,7 +861,7 @@
}
else if (!idToDelete.empty())
{
- callFunctionOnPEL(idToDelete, deletePEL);
+ deletePEL(idToDelete);
}
else if (deleteAll)
{