Update overall VPD collection status
This commit adds code to use xyz.openbmc_project.Common.Progress
interface instead of the com.ibm.VPD.Manager to update overall VPD
collection status of the system.
Output:
```
Collection status updates when FRUs VPD gets collected
root@p11bmc:~# busctl get-property com.ibm.VPD.Manager /com/ibm/VPD/Manager xyz.openbmc_project.Common.Progress Status
s "xyz.openbmc_project.Common.Progress.OperationStatus.NotStarted"
root@p11bmc:~# busctl get-property com.ibm.VPD.Manager /com/ibm/VPD/Manager xyz.openbmc_project.Common.Progress Status
s "xyz.openbmc_project.Common.Progress.OperationStatus.InProgress"
root@p11bmc:~# busctl get-property com.ibm.VPD.Manager /com/ibm/VPD/Manager xyz.openbmc_project.Common.Progress Status
s "xyz.openbmc_project.Common.Progress.OperationStatus.Completed"
```
Change-Id: I8fc12e5c3ee89092405b6a270cf3eaafa70d41d2
Signed-off-by: Anupama B R <anupama.b.r1@ibm.com>
diff --git a/vpd-manager/include/manager.hpp b/vpd-manager/include/manager.hpp
index 88e328b..c43f52f 100644
--- a/vpd-manager/include/manager.hpp
+++ b/vpd-manager/include/manager.hpp
@@ -33,11 +33,14 @@
*
* @param[in] ioCon - IO context.
* @param[in] iFace - interface to implement.
+ * @param[in] progressiFace - Interface to track collection progress.
* @param[in] connection - Dbus Connection.
*/
- Manager(const std::shared_ptr<boost::asio::io_context>& ioCon,
- const std::shared_ptr<sdbusplus::asio::dbus_interface>& iFace,
- const std::shared_ptr<sdbusplus::asio::connection>& asioConnection);
+ Manager(
+ const std::shared_ptr<boost::asio::io_context>& ioCon,
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& iFace,
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& progressiFace,
+ const std::shared_ptr<sdbusplus::asio::connection>& asioConnection);
/**
* @brief Destructor.
@@ -250,6 +253,9 @@
// Shared pointer to Dbus interface class.
const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_interface;
+ // Shared pointer to collection progress interface class.
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_progressInterface;
+
// Shared pointer to bus connection.
const std::shared_ptr<sdbusplus::asio::connection>& m_asioConnection;
@@ -260,7 +266,7 @@
std::shared_ptr<GpioMonitor> m_gpioMonitor;
// Variable to hold current collection status
- std::string m_vpdCollectionStatus = "NotStarted";
+ std::string m_vpdCollectionStatus{constants::vpdCollectionNotStarted};
// Shared pointer to backup and restore class
std::shared_ptr<BackupAndRestore> m_backupAndRestoreObj;
diff --git a/vpd-manager/oem-handler/ibm_handler.cpp b/vpd-manager/oem-handler/ibm_handler.cpp
index 4b077f5..316184c 100644
--- a/vpd-manager/oem-handler/ibm_handler.cpp
+++ b/vpd-manager/oem-handler/ibm_handler.cpp
@@ -16,11 +16,12 @@
std::shared_ptr<Worker>& o_worker,
std::shared_ptr<BackupAndRestore>& o_backupAndRestoreObj,
const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_iFace,
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_progressiFace,
const std::shared_ptr<boost::asio::io_context>& i_ioCon,
const std::shared_ptr<sdbusplus::asio::connection>& i_asioConnection) :
m_worker(o_worker), m_backupAndRestoreObj(o_backupAndRestoreObj),
- m_interface(i_iFace), m_ioContext(i_ioCon),
- m_asioConnection(i_asioConnection)
+ m_interface(i_iFace), m_progressInterface(i_progressiFace),
+ m_ioContext(i_ioCon), m_asioConnection(i_asioConnection)
{
if (dbusUtility::isChassisPowerOn())
{
@@ -109,8 +110,8 @@
// Triggering FRU VPD collection. Setting status to "In
// Progress".
- m_interface->set_property("CollectionStatus",
- std::string("InProgress"));
+ m_progressInterface->set_property(
+ "Status", std::string(constants::vpdCollectionInProgress));
m_worker->collectFrusFromJson();
}
});
@@ -164,8 +165,8 @@
ConfigurePowerVsSystem();
std::cout << "m_worker->isSystemVPDOnDBus() completed" << std::endl;
- m_interface->set_property("CollectionStatus",
- std::string("Completed"));
+ m_progressInterface->set_property(
+ "Status", std::string(constants::vpdCollectionCompleted));
if (m_backupAndRestoreObj)
{
@@ -545,7 +546,8 @@
void IbmHandler::collectAllFruVpd()
{
// Setting status to "InProgress", before trigeering VPD collection.
- m_interface->set_property("CollectionStatus", std::string("InProgress"));
+ m_progressInterface->set_property(
+ "Status", std::string(constants::vpdCollectionInProgress));
m_worker->collectFrusFromJson();
SetTimerToDetectVpdCollectionStatus();
}
diff --git a/vpd-manager/oem-handler/ibm_handler.hpp b/vpd-manager/oem-handler/ibm_handler.hpp
index 74429a2..e2bf3da 100644
--- a/vpd-manager/oem-handler/ibm_handler.hpp
+++ b/vpd-manager/oem-handler/ibm_handler.hpp
@@ -34,6 +34,7 @@
* @param[in] o_backupAndRestoreObj - Ref to back up and restore class
* object.
* @param[in] i_iFace - interface to implement.
+ * @param[in] i_progressiFace - Interface to track collection progress.
* @param[in] i_ioCon - IO context.
* @param[in] i_asioConnection - Dbus Connection.
*/
@@ -41,6 +42,7 @@
std::shared_ptr<Worker>& o_worker,
std::shared_ptr<BackupAndRestore>& o_backupAndRestoreObj,
const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_iFace,
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_progressiFace,
const std::shared_ptr<boost::asio::io_context>& i_ioCon,
const std::shared_ptr<sdbusplus::asio::connection>& i_asioConnection);
@@ -166,6 +168,9 @@
// Shared pointer to Dbus interface class.
const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_interface;
+ // Shared pointer to Dbus collection progress interface class.
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_progressInterface;
+
// Shared pointer to asio context object.
const std::shared_ptr<boost::asio::io_context>& m_ioContext;
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index 54147d3..d7b512d 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -23,8 +23,10 @@
Manager::Manager(
const std::shared_ptr<boost::asio::io_context>& ioCon,
const std::shared_ptr<sdbusplus::asio::dbus_interface>& iFace,
+ const std::shared_ptr<sdbusplus::asio::dbus_interface>& progressiFace,
const std::shared_ptr<sdbusplus::asio::connection>& asioConnection) :
- m_ioContext(ioCon), m_interface(iFace), m_asioConnection(asioConnection)
+ m_ioContext(ioCon), m_interface(iFace), m_progressInterface(progressiFace),
+ m_asioConnection(asioConnection)
{
#ifdef IBM_SYSTEM
if (!dbusUtility::isChassisPowerOn())
@@ -126,13 +128,13 @@
});
// Indicates FRU VPD collection for the system has not started.
- iFace->register_property_rw<std::string>(
- "CollectionStatus", sdbusplus::vtable::property_::emits_change,
+ progressiFace->register_property_rw<std::string>(
+ "Status", sdbusplus::vtable::property_::emits_change,
[this](const std::string& l_currStatus, const auto&) {
if (m_vpdCollectionStatus != l_currStatus)
{
m_vpdCollectionStatus = l_currStatus;
- m_interface->signal_property("CollectionStatus");
+ m_interface->signal_property("Status");
}
return true;
},
@@ -141,11 +143,12 @@
// If required, instantiate OEM specific handler here.
#ifdef IBM_SYSTEM
m_ibmHandler = std::make_shared<IbmHandler>(
- m_worker, m_backupAndRestoreObj, m_interface, m_ioContext,
- m_asioConnection);
+ m_worker, m_backupAndRestoreObj, m_interface, m_progressInterface,
+ m_ioContext, m_asioConnection);
#else
m_worker = std::make_shared<Worker>(INVENTORY_JSON_DEFAULT);
- m_interface->set_property("CollectionStatus", std::string("Completed"));
+ m_progressInterface->set_property(
+ "Status", std::string(constants::vpdCollectionCompleted));
#endif
}
catch (const std::exception& e)
@@ -347,7 +350,7 @@
void Manager::collectSingleFruVpd(
const sdbusplus::message::object_path& i_dbusObjPath)
{
- if (m_vpdCollectionStatus != "Completed")
+ if (m_vpdCollectionStatus != constants::vpdCollectionCompleted)
{
logging::logMessage(
"Currently VPD CollectionStatus is not completed. Cannot perform single FRU VPD collection for " +
@@ -650,12 +653,12 @@
try
{
types::SeverityType l_severityType;
- if (m_vpdCollectionStatus == "NotStarted")
+ if (m_vpdCollectionStatus == constants::vpdCollectionNotStarted)
{
l_severityType = types::SeverityType::Informational;
}
- else if (m_vpdCollectionStatus == "Completed" ||
- m_vpdCollectionStatus == "Failed")
+ else if (m_vpdCollectionStatus == constants::vpdCollectionCompleted ||
+ m_vpdCollectionStatus == constants::vpdCollectionFailed)
{
l_severityType = types::SeverityType::Warning;
}
diff --git a/vpd-manager/src/manager_main.cpp b/vpd-manager/src/manager_main.cpp
index 2e05a18..ab1d374 100644
--- a/vpd-manager/src/manager_main.cpp
+++ b/vpd-manager/src/manager_main.cpp
@@ -1,6 +1,7 @@
#include "config.h"
#include "bios_handler.hpp"
+#include "constants.hpp"
#include "event_logger.hpp"
#include "exceptions.hpp"
#include "logger.hpp"
@@ -27,8 +28,12 @@
std::shared_ptr<sdbusplus::asio::dbus_interface> interface =
server.add_interface(OBJPATH, IFACE);
- auto vpdManager =
- std::make_shared<vpd::Manager>(io_con, interface, connection);
+ std::shared_ptr<sdbusplus::asio::dbus_interface> progressInf =
+ server.add_interface(OBJPATH,
+ vpd::constants::vpdCollectionInterface);
+
+ auto vpdManager = std::make_shared<vpd::Manager>(
+ io_con, interface, progressInf, connection);
// TODO: Take this under conditional compilation for IBM
auto biosHandler =
@@ -36,6 +41,7 @@
connection, vpdManager);
interface->initialize();
+ progressInf->initialize();
vpd::logging::logMessage("Start VPD-Manager event loop");