PEL: Manager: Implemented the GetBMCLogIdFromPELId dbus method

In OpenPOWER based system, the application may need to get
the OpenBMC event log id by using the PEL id (aka Entry ID (EID) which
is a unique id in the PEL) so added the interface for the same.

Tested:
- Tested by below unit test cases.
 - With valid PEL ID
 - With invalid PEL ID

- Tested by using busctl command
 - With valid PEL ID
```
   busctl call xyz.openbmc_project.Logging \
   /xyz/openbmc_project/logging org.open_power.Logging.PEL \
   GetBMCLogIdFromPELId u 1342211909
   >>> u 4534
```
 - With invalid PEL ID
```
   busctl call xyz.openbmc_project.Logging \
   /xyz/openbmc_project/logging org.open_power.Logging.PEL \
   GetBMCLogIdFromPELId u 0xFFFFFFFF
   >>> Call failed: Invalid argument was given.
```

DBus interface:
https://gerrit.openbmc-project.xyz/c/openbmc/phosphor-dbus-interfaces/+/44421

Signed-off-by: Ramesh Iyyar <rameshi1@in.ibm.com>
Change-Id: Ibc67c0d1ad83457800847853e30254e2d9be53e6
diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp
index 0aa2988..c90cacc 100644
--- a/extensions/openpower-pels/manager.cpp
+++ b/extensions/openpower-pels/manager.cpp
@@ -714,5 +714,18 @@
     }
 }
 
+uint32_t Manager::getBMCLogIdFromPELId(uint32_t pelId)
+{
+    Repository::LogID id{Repository::LogID::Pel(pelId)};
+    if (auto logId = _repo.getLogID(id); !logId.has_value())
+    {
+        throw common_error::InvalidArgument();
+    }
+    else
+    {
+        return logId->obmcID.id;
+    }
+}
+
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/manager.hpp b/extensions/openpower-pels/manager.hpp
index 42aae88..aee3eab 100644
--- a/extensions/openpower-pels/manager.hpp
+++ b/extensions/openpower-pels/manager.hpp
@@ -231,6 +231,18 @@
      */
     uint32_t getPELIdFromBMCLogId(uint32_t bmcLogId) override;
 
+    /** @brief Implementation for GetBMCLogIdFromPELId
+     *
+     *  Returns the BMC event log id based on the given PEL id
+     *  (aka Entry ID (EID)).
+     *
+     *  @param[in] pelId - The PEL id to retrieve the BMC event log id.
+     *
+     *  @return uint32_t - The BMC event log id of the PEL.
+     *                     Throw "InvalidArgument" if not found.
+     */
+    uint32_t getBMCLogIdFromPELId(uint32_t pelId) override;
+
   private:
     /**
      * @brief Adds a received raw PEL to the PEL repository
diff --git a/test/openpower-pels/pel_manager_test.cpp b/test/openpower-pels/pel_manager_test.cpp
index 7c9c3ae..0facc33 100644
--- a/test/openpower-pels/pel_manager_test.cpp
+++ b/test/openpower-pels/pel_manager_test.cpp
@@ -459,6 +459,12 @@
     EXPECT_THROW(
         manager.getPELIdFromBMCLogId(pel.obmcLogID() + 1),
         sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument);
+
+    // GetBMCLogIdFromPELId
+    EXPECT_EQ(pel.obmcLogID(), manager.getBMCLogIdFromPELId(pel.id()));
+    EXPECT_THROW(
+        manager.getBMCLogIdFromPELId(pel.id() + 1),
+        sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument);
 }
 
 // An ESEL from the wild