| #pragma once | 
 |  | 
 | #include "constants.hpp" | 
 | #include "types.hpp" | 
 |  | 
 | #include <iostream> | 
 | #include <optional> | 
 | #include <string> | 
 | #include <unordered_map> | 
 |  | 
 | namespace vpd | 
 | { | 
 | /** | 
 |  * @brief Class for logging events. | 
 |  * | 
 |  * Class handles logging PEL under 'logging' service. | 
 |  * Provide separate async API's for calling out inventory_path, device_path and | 
 |  * i2c bus. | 
 |  */ | 
 | class EventLogger | 
 | { | 
 |   public: | 
 |     /** | 
 |      * @brief An API to create a PEL with inventory path callout. | 
 |      * | 
 |      * This API calls an async method to create PEL, and also handles inventory | 
 |      * path callout. | 
 |      * | 
 |      * Note: If inventory path callout info is not provided, it will create a | 
 |      * PEL without any callout. Currently only one callout is handled in this | 
 |      * API. | 
 |      * | 
 |      * @todo: Symbolic FRU and procedure callout needs to be handled in this | 
 |      * API. | 
 |      * | 
 |      * @param[in] i_errorType - Enum to map with event message name. | 
 |      * @param[in] i_severity - Severity of the event. | 
 |      * @param[in] i_callouts - Callout information, list of tuple having | 
 |      * inventory path and priority as input [optional]. | 
 |      * @param[in] i_fileName - File name. | 
 |      * @param[in] i_funcName - Function name. | 
 |      * @param[in] i_internalRc - Internal return code. | 
 |      * @param[in] i_description - Error description. | 
 |      * @param[in] i_userData1 - Additional user data [optional]. | 
 |      * @param[in] i_userData2 - Additional user data [optional]. | 
 |      * @param[in] i_symFru - Symblolic FRU callout data [optional]. | 
 |      * @param[in] i_procedure - Procedure callout data [optional]. | 
 |      * | 
 |      * @throw exception in case of error. | 
 |      */ | 
 |     static void createAsyncPelWithInventoryCallout( | 
 |         const types::ErrorType& i_errorType, | 
 |         const types::SeverityType& i_severity, | 
 |         const std::vector<types::InventoryCalloutData>& i_callouts, | 
 |         const std::string& i_fileName, const std::string& i_funcName, | 
 |         const uint8_t i_internalRc, const std::string& i_description, | 
 |         const std::optional<std::string> i_userData1, | 
 |         const std::optional<std::string> i_userData2, | 
 |         const std::optional<std::string> i_symFru, | 
 |         const std::optional<std::string> i_procedure); | 
 |  | 
 |     /** | 
 |      * @brief An API to create a PEL with device path callout. | 
 |      * | 
 |      * @param[in] i_errorType - Enum to map with event message name. | 
 |      * @param[in] i_severity - Severity of the event. | 
 |      * @param[in] i_callouts - Callout information, list of tuple having device | 
 |      * path and error number as input. | 
 |      * @param[in] i_fileName - File name. | 
 |      * @param[in] i_funcName - Function name. | 
 |      * @param[in] i_internalRc - Internal return code. | 
 |      * @param[in] i_userData1 - Additional user data [optional]. | 
 |      * @param[in] i_userData2 - Additional user data [optional]. | 
 |      */ | 
 |     static void createAsyncPelWithI2cDeviceCallout( | 
 |         const types::ErrorType i_errorType, | 
 |         const types::SeverityType i_severity, | 
 |         const std::vector<types::DeviceCalloutData>& i_callouts, | 
 |         const std::string& i_fileName, const std::string& i_funcName, | 
 |         const uint8_t i_internalRc, | 
 |         const std::optional<std::pair<std::string, std::string>> i_userData1, | 
 |         const std::optional<std::pair<std::string, std::string>> i_userData2); | 
 |  | 
 |     /** | 
 |      * @brief An API to create a PEL with I2c bus callout. | 
 |      * | 
 |      * @param[in] i_errorType - Enum to map with event message name. | 
 |      * @param[in] i_severity - Severity of the event. | 
 |      * @param[in] i_callouts - Callout information, list of tuple having i2c | 
 |      * bus, i2c address and error number as input. | 
 |      * @param[in] i_fileName - File name. | 
 |      * @param[in] i_funcName - Function name. | 
 |      * @param[in] i_internalRc - Internal return code. | 
 |      * @param[in] i_userData1 - Additional user data [optional]. | 
 |      * @param[in] i_userData2 - Additional user data [optional]. | 
 |      */ | 
 |     static void createAsyncPelWithI2cBusCallout( | 
 |         const types::ErrorType i_errorType, | 
 |         const types::SeverityType i_severity, | 
 |         const std::vector<types::I2cBusCalloutData>& i_callouts, | 
 |         const std::string& i_fileName, const std::string& i_funcName, | 
 |         const uint8_t i_internalRc, | 
 |         const std::optional<std::pair<std::string, std::string>> i_userData1, | 
 |         const std::optional<std::pair<std::string, std::string>> i_userData2); | 
 |  | 
 |     /** | 
 |      * @brief An API to create a PEL. | 
 |      * | 
 |      * @param[in] i_errorType - Enum to map with event message name. | 
 |      * @param[in] i_severity - Severity of the event. | 
 |      * @param[in] i_fileName - File name. | 
 |      * @param[in] i_funcName - Function name. | 
 |      * @param[in] i_internalRc - Internal return code. | 
 |      * @param[in] i_description - Error description. | 
 |      * @param[in] i_userData1 - Additional user data [optional]. | 
 |      * @param[in] i_userData2 - Additional user data [optional]. | 
 |      * @param[in] i_symFru - Symblolic FRU callout data [optional]. | 
 |      * @param[in] i_procedure - Procedure callout data [optional]. | 
 |      * | 
 |      * @todo: Symbolic FRU and procedure callout needs to be handled in this | 
 |      * API. | 
 |      */ | 
 |     static void createAsyncPel( | 
 |         const types::ErrorType& i_errorType, | 
 |         const types::SeverityType& i_severity, const std::string& i_fileName, | 
 |         const std::string& i_funcName, const uint8_t i_internalRc, | 
 |         const std::string& i_description, | 
 |         const std::optional<std::string> i_userData1, | 
 |         const std::optional<std::string> i_userData2, | 
 |         const std::optional<std::string> i_symFru, | 
 |         const std::optional<std::string> i_procedure); | 
 |  | 
 |     /** | 
 |      * @brief An API to create PEL. | 
 |      * | 
 |      * This API makes synchronous call to phosphor-logging Create method. | 
 |      * | 
 |      * @param[in] i_errorType - Enum to map with event message name. | 
 |      * @param[in] i_severity - Severity of the event. | 
 |      * @param[in] i_fileName - File name. | 
 |      * @param[in] i_funcName - Function name. | 
 |      * @param[in] i_internalRc - Internal return code. | 
 |      * @param[in] i_description - Error description. | 
 |      * @param[in] i_userData1 - Additional user data [optional]. | 
 |      * @param[in] i_userData2 - Additional user data [optional]. | 
 |      * @param[in] i_symFru - Symblolic FRU callout data [optional].s | 
 |      * @param[in] i_procedure - Procedure callout data [optional]. | 
 |      * | 
 |      * @todo: Symbolic FRU and procedure callout needs to be handled in this | 
 |      * API. | 
 |      */ | 
 |     static void createSyncPel( | 
 |         const types::ErrorType& i_errorType, | 
 |         const types::SeverityType& i_severity, const std::string& i_fileName, | 
 |         const std::string& i_funcName, const uint8_t i_internalRc, | 
 |         const std::string& i_description, | 
 |         const std::optional<std::string> i_userData1, | 
 |         const std::optional<std::string> i_userData2, | 
 |         const std::optional<std::string> i_symFru, | 
 |         const std::optional<std::string> i_procedure); | 
 |  | 
 |   private: | 
 |     static const std::unordered_map<types::SeverityType, std::string> | 
 |         m_severityMap; | 
 |     static const std::unordered_map<types::ErrorType, std::string> | 
 |         m_errorMsgMap; | 
 |     static const std::unordered_map<types::CalloutPriority, std::string> | 
 |         m_priorityMap; | 
 | }; | 
 | } // namespace vpd |