diff options
Diffstat (limited to 'redfish-core/lib/managers.hpp')
-rw-r--r-- | redfish-core/lib/managers.hpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp index 376f70c52b..0be135400f 100644 --- a/redfish-core/lib/managers.hpp +++ b/redfish-core/lib/managers.hpp @@ -33,6 +33,7 @@ #include <algorithm> #include <array> +#include <chrono> #include <cstdint> #include <memory> #include <sstream> @@ -1769,6 +1770,47 @@ inline void }); } +inline void + afterGetManagerStartTime(const std::shared_ptr<bmcweb::AsyncResp>& aResp, + const boost::system::error_code& ec, + uint64_t bmcwebResetTime) +{ + if (ec) + { + return; + } + using std::chrono::steady_clock; + std::chrono::microseconds usReset{bmcwebResetTime}; + steady_clock::time_point resetTime{usReset}; + + steady_clock::time_point now = steady_clock::now(); + + steady_clock::duration run = now - resetTime; + + if (run < steady_clock::duration::zero()) + { + BMCWEB_LOG_CRITICAL << "Uptime was negative????"; + messages::internalError(aResp->res); + return; + } + + using Milli = std::chrono::milliseconds; + Milli uptimeMs = std::chrono::duration_cast<Milli>(run); + + using redfish::time_utils::toDurationString; + aResp->res.jsonValue["ServiceRootUptime"] = toDurationString(uptimeMs); +} + +inline void + managerGetServiceRootUptime(const std::shared_ptr<bmcweb::AsyncResp>& aResp) +{ + sdbusplus::asio::getProperty<uint64_t>( + *crow::connections::systemBus, "org.freedesktop.systemd1", + "/org/freedesktop/systemd1/unit/bmcweb_2eservice", + "org.freedesktop.systemd1.Unit", "ActiveEnterTimestampMonotonic", + std::bind_front(afterGetManagerStartTime, aResp)); +} + /** * @brief Set the running firmware image * @@ -2026,6 +2068,8 @@ inline void requestRoutesManager(App& app) managerGetLastResetTime(asyncResp); + managerGetServiceRootUptime(asyncResp); + // ManagerDiagnosticData is added for all BMCs. nlohmann::json& managerDiagnosticData = asyncResp->res.jsonValue["ManagerDiagnosticData"]; |