From 52e60022ce88ece15d004d84f4baaddf29025560 Mon Sep 17 00:00:00 2001 From: RekhaAparna01 Date: Wed, 18 Dec 2024 11:25:18 -0600 Subject: [PATCH] PEL for Manager class This commit adds code to log a PEL in Manager class, in case of error where PEL is required. Also removed try catch block in manager constructor, as we are not doing any error handling. output: ''' root@p10bmc:/tmp# peltool -i 0x5000213a { "Private Header": { "Section Version": "1", "Sub-section type": "0", "Created by": "bmc vpd", "Created at": "01/02/2025 12:01:10", "Committed at": "01/02/2025 12:01:10", "Creator Subsystem": "BMC", "CSSVER": "", "Platform Log Id": "0x5000213A", "Entry Id": "0x5000213A", "BMC Event Log Id": "522" }, "User Header": { "Section Version": "1", "Sub-section type": "0", "Log Committed by": "bmc error logging", "Subsystem": "CEC Hardware - VPD Interface", "Event Scope": "Entire Platform", "Event Severity": "Informational Event", "Event Type": "Miscellaneous, Informational Only", "Action Flags": [ "Event not customer viewable", "Report Externally" ], "Host Transmission": "Not Sent", "HMC Transmission": "Not Sent" }, "Primary SRC": { "Section Version": "1", "Sub-section type": "1", "Created by": "bmc vpd", "SRC Version": "0x02", "SRC Format": "0x55", "Virtual Progress SRC": "False", "I5/OS Service Event Bit": "False", "Hypervisor Dump Initiated":"False", "Backplane CCIN": "2E2D", "Terminate FW Error": "False", "Deconfigured": "False", "Guarded": "False", "Error Details": { "Message": "A VPD data exception occurred." }, "Valid Word Count": "0x09", "Reference Code": "BD554001", "Hex Word 2": "00000055", "Hex Word 3": "2E2D0010", "Hex Word 4": "00000000", "Hex Word 5": "00000000", "Hex Word 6": "00000000", "Hex Word 7": "00000000", "Hex Word 8": "00000000", "Hex Word 9": "00000000" }, "Extended User Header": { "Section Version": "1", "Sub-section type": "0", "Created by": "bmc error logging", "Reporting Machine Type": " ", "Reporting Serial Number": " ", "FW Released Ver": "", "FW SubSys Version": "fw1110.00-3.34", "Common Ref Time": "00/00/0000 00:00:00", "Symptom Id Len": "20", "Symptom Id": "BD554001_2E2D0010" }, "Failing MTMS": { "Section Version": "1", "Sub-section type": "0", "Created by": "bmc error logging", "Machine Type Model": " ", "Serial Number": " " }, "User Data 0": { "Section Version": "1", "Sub-section type": "1", "Created by": "bmc error logging", "BMCLoad": "0.86 0.94 0.82", "BMCState": "Quiesced", "BMCUptime": "0y 0d 0h 28m 13s", "BootState": "Unspecified", "ChassisState": "Off", "FW Version ID": "fw1110.00-3.34-2-g45a17a06f3-dirty", "HostState": "Off", "System IM": "50001001" }, "User Data 1": { "Section Version": "1", "Sub-section type": "1", "Created by": "bmc error logging", "DESCRIPTION": "Test Error", "FileName": "/usr/src/debug/openpower-fru-vpd/1.0+git/vpd-manager/src/manager.cpp", "FunctionName": "deleteSingleFruVpd", "InteranlRc": "0", "UserData1": "", "UserData2": "" } } ''' Signed-off-by: RekhaAparna01 --- vpd-manager/src/manager.cpp | 219 ++++++++++++++++++------------------ 1 file changed, 111 insertions(+), 108 deletions(-) diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp index 4383a972..c045ba8d 100644 --- a/vpd-manager/src/manager.cpp +++ b/vpd-manager/src/manager.cpp @@ -4,6 +4,7 @@ #include "backup_restore.hpp" #include "constants.hpp" +#include "event_logger.hpp" #include "exceptions.hpp" #include "logger.hpp" #include "parser.hpp" @@ -26,113 +27,102 @@ Manager::Manager( const std::shared_ptr& asioConnection) : m_ioContext(ioCon), m_interface(iFace), m_asioConnection(asioConnection) { - try - { #ifdef IBM_SYSTEM - m_worker = std::make_shared(INVENTORY_JSON_DEFAULT); + m_worker = std::make_shared(INVENTORY_JSON_DEFAULT); - // Set up minimal things that is needed before bus name is claimed. - m_worker->performInitialSetup(); + // Set up minimal things that is needed before bus name is claimed. + m_worker->performInitialSetup(); - // set callback to detect any asset tag change - registerAssetTagChangeCallback(); + // set callback to detect any asset tag change + registerAssetTagChangeCallback(); - // set async timer to detect if system VPD is published on D-Bus. - SetTimerToDetectSVPDOnDbus(); + // set async timer to detect if system VPD is published on D-Bus. + SetTimerToDetectSVPDOnDbus(); - // set async timer to detect if VPD collection is done. - SetTimerToDetectVpdCollectionStatus(); + // set async timer to detect if VPD collection is done. + SetTimerToDetectVpdCollectionStatus(); - // Instantiate GpioMonitor class - m_gpioMonitor = std::make_shared( - m_worker->getSysCfgJsonObj(), m_worker, m_ioContext); + // Instantiate GpioMonitor class + m_gpioMonitor = std::make_shared(m_worker->getSysCfgJsonObj(), + m_worker, m_ioContext); #endif - // set callback to detect host state change. - registerHostStateChangeCallback(); - - // For backward compatibility. Should be depricated. - iFace->register_method( - "WriteKeyword", - [this](const sdbusplus::message::object_path i_path, - const std::string i_recordName, const std::string i_keyword, - const types::BinaryVector i_value) -> int { - return this->updateKeyword( - i_path, std::make_tuple(i_recordName, i_keyword, i_value)); - }); - - // Register methods under com.ibm.VPD.Manager interface - iFace->register_method( - "UpdateKeyword", - [this](const types::Path i_vpdPath, - const types::WriteVpdParams i_paramsToWriteData) -> int { - return this->updateKeyword(i_vpdPath, i_paramsToWriteData); - }); - - iFace->register_method( - "ReadKeyword", - [this](const types::Path i_fruPath, - const types::ReadVpdParams i_paramsToReadData) - -> types::DbusVariantType { - return this->readKeyword(i_fruPath, i_paramsToReadData); - }); - - iFace->register_method( - "CollectFRUVPD", - [this](const sdbusplus::message::object_path& i_dbusObjPath) { - this->collectSingleFruVpd(i_dbusObjPath); - }); - - iFace->register_method( - "deleteFRUVPD", - [this](const sdbusplus::message::object_path& i_dbusObjPath) { - this->deleteSingleFruVpd(i_dbusObjPath); - }); - - iFace->register_method( - "GetExpandedLocationCode", - [this](const std::string& i_unexpandedLocationCode, - uint16_t& i_nodeNumber) -> std::string { - return this->getExpandedLocationCode(i_unexpandedLocationCode, - i_nodeNumber); - }); - - iFace->register_method("GetFRUsByExpandedLocationCode", - [this](const std::string& i_expandedLocationCode) - -> types::ListOfPaths { - return this->getFrusByExpandedLocationCode(i_expandedLocationCode); - }); - - iFace->register_method( - "GetFRUsByUnexpandedLocationCode", - [this](const std::string& i_unexpandedLocationCode, - uint16_t& i_nodeNumber) -> types::ListOfPaths { - return this->getFrusByUnexpandedLocationCode( - i_unexpandedLocationCode, i_nodeNumber); - }); - - iFace->register_method( - "GetHardwarePath", - [this](const sdbusplus::message::object_path& i_dbusObjPath) - -> std::string { return this->getHwPath(i_dbusObjPath); }); - - iFace->register_method("PerformVPDRecollection", - [this]() { this->performVpdRecollection(); }); - - // Indicates FRU VPD collection for the system has not started. - iFace->register_property_rw( - "CollectionStatus", sdbusplus::vtable::property_::emits_change, - [this](const std::string l_currStatus, const auto&) { - m_vpdCollectionStatus = l_currStatus; - return 0; - }, [this](const auto&) { return m_vpdCollectionStatus; }); - } - catch (const std::exception& e) - { - logging::logMessage("VPD-Manager service failed. " + - std::string(e.what())); - throw; - } + // set callback to detect host state change. + registerHostStateChangeCallback(); + + // For backward compatibility. Should be depricated. + iFace->register_method("WriteKeyword", + [this](const sdbusplus::message::object_path i_path, + const std::string i_recordName, + const std::string i_keyword, + const types::BinaryVector i_value) -> int { + return this->updateKeyword( + i_path, std::make_tuple(i_recordName, i_keyword, i_value)); + }); + + // Register methods under com.ibm.VPD.Manager interface + iFace->register_method( + "UpdateKeyword", + [this](const types::Path i_vpdPath, + const types::WriteVpdParams i_paramsToWriteData) -> int { + return this->updateKeyword(i_vpdPath, i_paramsToWriteData); + }); + + iFace->register_method("ReadKeyword", + [this](const types::Path i_fruPath, + const types::ReadVpdParams i_paramsToReadData) + -> types::DbusVariantType { + return this->readKeyword(i_fruPath, i_paramsToReadData); + }); + + iFace->register_method( + "CollectFRUVPD", + [this](const sdbusplus::message::object_path& i_dbusObjPath) { + this->collectSingleFruVpd(i_dbusObjPath); + }); + + iFace->register_method( + "deleteFRUVPD", + [this](const sdbusplus::message::object_path& i_dbusObjPath) { + this->deleteSingleFruVpd(i_dbusObjPath); + }); + + iFace->register_method("GetExpandedLocationCode", + [this](const std::string& i_unexpandedLocationCode, + uint16_t& i_nodeNumber) -> std::string { + return this->getExpandedLocationCode(i_unexpandedLocationCode, + i_nodeNumber); + }); + + iFace->register_method("GetFRUsByExpandedLocationCode", + [this](const std::string& i_expandedLocationCode) + -> types::ListOfPaths { + return this->getFrusByExpandedLocationCode(i_expandedLocationCode); + }); + + iFace->register_method( + "GetFRUsByUnexpandedLocationCode", + [this](const std::string& i_unexpandedLocationCode, + uint16_t& i_nodeNumber) -> types::ListOfPaths { + return this->getFrusByUnexpandedLocationCode(i_unexpandedLocationCode, + i_nodeNumber); + }); + + iFace->register_method( + "GetHardwarePath", + [this](const sdbusplus::message::object_path& i_dbusObjPath) + -> std::string { return this->getHwPath(i_dbusObjPath); }); + + iFace->register_method("PerformVPDRecollection", + [this]() { this->performVpdRecollection(); }); + + // Indicates FRU VPD collection for the system has not started. + iFace->register_property_rw( + "CollectionStatus", sdbusplus::vtable::property_::emits_change, + [this](const std::string l_currStatus, const auto&) { + m_vpdCollectionStatus = l_currStatus; + return 0; + }, [this](const auto&) { return m_vpdCollectionStatus; }); } #ifdef IBM_SYSTEM @@ -189,9 +179,12 @@ void Manager::processAssetTagChangeCallback(sdbusplus::message_t& i_msg) } catch (const std::exception& l_ex) { - // TODO: Log PEL with below description. - logging::logMessage("Asset tag callback update failed with error: " + - std::string(l_ex.what())); + EventLogger::createSyncPel( + types::ErrorType::InvalidVpdMessage, + types::SeverityType::Informational, __FILE__, __FUNCTION__, 0, + "Asset tag callback update failed with error: " + + std::string(l_ex.what()), + std::nullopt, std::nullopt, std::nullopt, std::nullopt); } } @@ -488,8 +481,11 @@ void Manager::collectSingleFruVpd( } catch (const std::exception& l_error) { - // TODO: Log PEL - logging::logMessage(std::string(l_error.what())); + EventLogger::createSyncPel(types::ErrorType::InvalidVpdMessage, + types::SeverityType::Informational, + __FILE__, __FUNCTION__, 0, + std::string(l_error.what()), std::nullopt, + std::nullopt, std::nullopt, std::nullopt); } } @@ -515,8 +511,11 @@ void Manager::deleteSingleFruVpd( } catch (const std::exception& l_ex) { - // TODO: Log PEL - logging::logMessage(l_ex.what()); + EventLogger::createSyncPel(types::ErrorType::InvalidVpdMessage, + types::SeverityType::Informational, + __FILE__, __FUNCTION__, 0, l_ex.what(), + std::nullopt, std::nullopt, std::nullopt, + std::nullopt); } } @@ -824,8 +823,12 @@ void Manager::hostStateChangeCallBack(sdbusplus::message_t& i_msg) } catch (const std::exception& l_ex) { - // TODO: Log PEL. - logging::logMessage(l_ex.what()); + EventLogger::createSyncPel( + types::ErrorType::InvalidVpdMessage, + types::SeverityType::Informational, __FILE__, __FUNCTION__, 0, + "Failed to get Host state change call back. Error: " + + std::string(l_ex.what()), + std::nullopt, std::nullopt, std::nullopt, std::nullopt); } }