watchdog: Cache service name

We have occasionally noticed that the watchdog will be enabled and then
immediately trip upon booting of the BMC. This happens if the host is
still running when the BMC is coming up. Digging into the issue we notice
that the phosphor-mapper can be under very heavy load responding to all
of the initial mapping requests from BMC daemons starting. This causes a
delay in the phosphor-watchdog service name lookup during an attempt to
reset the watchdog countdown. The lookup delay is so long that the
watchdog ends up tripping before the reset is actually issued, causing
the BMC to reset the host. Since we know that the watchdog will not be
armed until the service resolves for the first time, we can reduce the
dependence and pressure on the service mapper by caching the service
name. Since it is the case that we want to keep issuing resets to the
same daemon that was initially configured, we should have no worries
about invalidating the cached service name. The name will be invalidated
any time we encounter a dbus level error issuing a watchdog commmand.

Change-Id: I303a39be997c2e57050b71efc8ef2e2cb27f8cf7
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/app/watchdog_service.hpp b/app/watchdog_service.hpp
index 432c7ce..e93b7f3 100644
--- a/app/watchdog_service.hpp
+++ b/app/watchdog_service.hpp
@@ -2,6 +2,8 @@
 #include <sdbusplus/bus.hpp>
 #include <xyz/openbmc_project/State/Watchdog/server.hpp>
 
+#include "utils.hpp"
+
 /** @class WatchdogService
  *  @brief Access to the running OpenBMC watchdog implementation.
  *  @details Easy accessor for servers that implement the
@@ -67,7 +69,7 @@
         /** @brief sdbusplus handle */
         sdbusplus::bus::bus bus;
         /** @brief The name of the mapped host watchdog service */
-        const std::string wd_service;
+        static ipmi::ServiceCache wd_service;
 
         /** @brief Sets the value of the property on the host watchdog
          *