I'm looking for a internal watchdog crate for a Rust process. The crate should monitor multiple threads of a process for their health state. Typical this is solved by registering every thread to an central watchdog component and let every thread call an alive-function of the watchdog in a given interval. As long as all monitored threads send their alive signal the watchdog should itself call an alive callback, which may trigger an external watchdog (systemd watchdog or hardware watchdog). On failure it should stop calling its alive callback which will trigger some external code to kill / restart the process or reset the whole system.
I came across vigil::Vigil, but don't like its design, which call a function on failure instead of calling a callback as long the system is alive. To trigger an external watchdog, based on the state of vigil would require an own thread, triggering the external watchdog with the required cycle. On failure one of the vigil error callbacks could stop the cyclic triggering of the external watchdog. The downside of this approach is, that when vigil itself fails or the error callback has some error, the system will fail to the unsafe side.
Are there any common alternatives to the vigil Crate for Rust?