@node liveness @chapter liveness @anchor{ilveness_overview} @section Overview This is a cluster-specific convenience setup for enabling a Kubernetes-style liveness/readiness test as outlined in @url{https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/}. Conceptually, it provides an application with means to: @itemize @item Run a collection of functions to validate sanity of the environment @item Set a no-error state before execution of the main routine @item Modify the error state during execution @item Invalidating all state when execution ends @end itemize @section Python module Three python methods are provided. @subsection load This is meant to be called after configurations and environment has been set up, but before the execution logic has commenced. It receives a list of externally defined fully-qualified python modules. Each of these modules must implement the method @code{health(*args,**kwargs)} in its global namespace. Any module returning @code{False} will cause a @code{RuntimeException}. The component will not trap any other exception from the modules. If successful, it will write the @code{pid} of the application to the specified run data folder. By default this is @code{/run/}, but the path can be modified if desired. @subsection set This is meant to be called during the execution of the main program routine begins. @subsubsection at startup It should be called once at the @emph{start} of execution of the main program routine. For one-shot routines, this would mean the start of any code only run when the module name is @code{__main__}. For daemons, it would be just before handing over execution to the main loop. @subsubsection during execution Call @code{set(error_code=, ...} any time the health state temporarily changes. Any @code{error} value other than @code{0} is considered an unhealthy state. @subsubsection at shutdown Call @code{reset(...)}, which will indicate that the state is to be considered the same as at startup. @section shell A bash script is provided for @emph{Kubernetes} to perform the health check. It performs the following checks: @enumerate @item A numeric value exists in @file{//pid}. @item The numeric value is a directory in @file{/proc} (a valid pid) @item The file @file{//error} contains "0" @end enumerate If any of these checks fail should inditcate that the container is unhealthy.