Get the timestamp from the log entry
Change-Id: Id00f6e1e6f65c17babc5d06abe1b9fc39a4de8b8
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/selutility.cpp b/selutility.cpp
index 0107515..3f9d9ab 100644
--- a/selutility.cpp
+++ b/selutility.cpp
@@ -182,6 +182,38 @@
return internal::prepareSELEntry(objPath, iter);
}
+std::chrono::seconds getEntryTimeStamp(const std::string& objPath)
+{
+ sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+
+ auto service = ipmi::getService(bus, logEntryIntf, objPath);
+
+ using namespace std::string_literals;
+ static const auto propTimeStamp = "Timestamp"s;
+
+ auto methodCall = bus.new_method_call(service.c_str(),
+ objPath.c_str(),
+ propIntf,
+ "Get");
+ methodCall.append(logEntryIntf);
+ methodCall.append(propTimeStamp);
+
+ auto reply = bus.call(methodCall);
+ if (reply.is_method_error())
+ {
+ log<level::ERR>("Error in reading Timestamp from Entry interface");
+ elog<InternalFailure>();
+ }
+
+ sdbusplus::message::variant<uint64_t> timeStamp;
+ reply.read(timeStamp);
+
+ std::chrono::milliseconds chronoTimeStamp(
+ sdbusplus::message::variant_ns::get<uint64_t>(timeStamp));
+
+ return std::chrono::duration_cast<std::chrono::seconds>(chronoTimeStamp);
+}
+
} // namespace sel
} // namespace ipmi
diff --git a/selutility.hpp b/selutility.hpp
index 573e89b..09104a3 100644
--- a/selutility.hpp
+++ b/selutility.hpp
@@ -51,6 +51,14 @@
*/
GetSELEntryResponse convertLogEntrytoSEL(const std::string& objPath);
+/** @brief Get the timestamp of the log entry
+ *
+ * @param[in] objPath - DBUS object path of the logging entry.
+ *
+ * @return On success return the timestamp of the log entry as number of
+ * seconds from epoch.
+ */
+std::chrono::seconds getEntryTimeStamp(const std::string& objPath);
namespace internal
{
@@ -68,7 +76,7 @@
const std::string& objPath,
ipmi::sensor::InvObjectIDMap::const_iterator iter);
-} //internal
+}
} // namespace sel