Add helper method to resolve a log object path

Add a helper method to resolve a previously generated
log entry which can be used by other services in conjunction
with the `lg2::commit` API.

Change-Id: Ia1582177b51ca2f0bfecae98f999b5b8f2f61c93
Signed-off-by: Amithash Prasasd <amithash@meta.com>
diff --git a/lib/include/phosphor-logging/commit.hpp b/lib/include/phosphor-logging/commit.hpp
index d3b291c..fa65077 100644
--- a/lib/include/phosphor-logging/commit.hpp
+++ b/lib/include/phosphor-logging/commit.hpp
@@ -16,6 +16,16 @@
 auto commit(sdbusplus::exception::generated_event_base&& e)
     -> sdbusplus::message::object_path;
 
+/** Resolve an existing event/error.
+ *
+ *  @param logPath - The object path of the event to resolve.
+ *  @return None.
+ *
+ *  Note: Similar to elog(), this will use the default dbus connection to
+ *  perform the operation.
+ */
+void resolve(const sdbusplus::message::object_path& logPath);
+
 /** Commit a generated event/error (using async context).
  *
  *  @param ctx - The async context to use.
@@ -25,4 +35,15 @@
 auto commit(sdbusplus::async::context& ctx,
             sdbusplus::exception::generated_event_base&& e)
     -> sdbusplus::async::task<sdbusplus::message::object_path>;
+
+/** Resolve an existing event/error (using async context).
+ *
+ *  @param ctx - The async context to use.
+ *  @param logPath - The object path of the event to resolve.
+ *  @return None
+ */
+auto resolve(sdbusplus::async::context& ctx,
+             const sdbusplus::message::object_path& logPath)
+    -> sdbusplus::async::task<>;
+
 } // namespace lg2
diff --git a/lib/lg2_commit.cpp b/lib/lg2_commit.cpp
index 6916bf5..a35b91e 100644
--- a/lib/lg2_commit.cpp
+++ b/lib/lg2_commit.cpp
@@ -142,6 +142,20 @@
     return {};
 }
 
+void resolve(const sdbusplus::message::object_path& logPath)
+{
+    if constexpr (LG2_COMMIT_DBUS)
+    {
+        using details::Entry;
+
+        auto b = sdbusplus::bus::new_default();
+        auto m = b.new_method_call(Entry::default_service, logPath.str.c_str(),
+                                   "org.freedesktop.DBus.Properties", "Set");
+        m.append(Entry::interface, "Resolved", std::variant<bool>(true));
+        auto reply = b.call(m);
+    }
+}
+
 auto commit(sdbusplus::async::context& ctx,
             sdbusplus::exception::generated_event_base&& t)
     -> sdbusplus::async::task<sdbusplus::message::object_path>
@@ -164,4 +178,21 @@
     co_return {};
 }
 
+auto resolve(sdbusplus::async::context& ctx,
+             const sdbusplus::message::object_path& logPath)
+    -> sdbusplus::async::task<>
+{
+    using details::Entry;
+
+    if constexpr (LG2_COMMIT_DBUS)
+    {
+        std::string path = logPath.str;
+        co_await Entry(ctx)
+            .service(Entry::default_service)
+            .path(path)
+            .resolved(true);
+    }
+    co_return;
+}
+
 } // namespace lg2