metrics-0.1.0.0: src/Data/HealthCheck.hs
-- |
-- Module : Data.HealthCheck
-- Copyright : (c) Ian Duncan 2013
-- Stability : experimental
-- Portability : non-portable
--
-- A simple interface through which simple status dashboards can be built.
--
-- > import Data.HealthCheck
-- > import Data.Metrics.Reporter.StdOut
-- >
-- > healthCheck1 :: HealthCheck
-- > healthCheck1 = healthCheck "benign_warm_fuzzy_thing" $
-- > return $ StatusReport Good Nothing
-- >
-- > healthCheck2 :: HealthCheck
-- > healthCheck2 = healthCheck "nuclear_missile_launcher" $
-- > return $ StatusReport Ugly $ Just "out of missiles"
-- >
-- > main :: IO ()
-- > main = printHealthChecks [ healthCheck1, healthCheck2 ]
--
module Data.HealthCheck (
HealthCheck(..),
HealthChecks,
healthCheck,
Status(..),
StatusReport(..)
) where
import Data.Text (Text)
-- | Clean up type signatures for bundling sets of health checks for reporting
type HealthChecks = [HealthCheck]
-- | A simple discrete health reporter
data HealthCheck = HealthCheck
{ healthCheckStatusReport :: IO StatusReport -- ^ An action which determines the current status of the health check
, healthCheckName :: Text -- ^ A unique identifier for the health check
}
-- | Provides a simple status reporting mechanism for checking application health at a glance.
data Status
= Good -- ^ Everything appears to be going well.
| Bad -- ^ Something is broken.
| Ugly -- ^ There is some sort of non-critical issue that deserves attention.
| Unknown
-- ^ There is no information, either good or bad, at the moment.
-- An example of this might be something like a loss of network connectivity to a non-crucial service.
deriving (Read, Show, Eq, Ord)
-- | A report on the current status of a subsystem.
data StatusReport = StatusReport
{ status :: Status -- ^ Current status
, statusMessage :: Maybe Text -- ^ An optional message to display about the current status.
} deriving (Show)
-- | Create a health check.
healthCheck :: Text -> IO StatusReport -> HealthCheck
healthCheck = flip HealthCheck