nagios-check-0.3.0: lib/System/Nagios/Plugin/PerfData.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}
module System.Nagios.Plugin.PerfData
(
UOM(..),
PerfValue(..),
PerfDatum(..),
ToPerfData,
toPerfData,
barePerfDatum
) where
import Data.Int
import Data.Nagios.Perfdata.Metric (UOM (..))
import Data.Text (Text)
-- | Value of a performance metric.
data PerfValue = RealValue Double | IntegralValue Int64
deriving (Eq, Ord)
instance Show PerfValue where
show (RealValue x) = show x
show (IntegralValue x) = show x
-- | One performance metric. A plugin will output zero or more of these,
-- whereupon Nagios generally passes them off to an external system such
-- as <http://oss.oetiker.ch/rrdtool/ RRDTool> or
-- <https://github.com/anchor/vaultaire Vaultaire>.
-- The thresholds are purely informative (designed to be graphed), and
-- do not affect alerting; likewise with `_min` and `_max`.
data PerfDatum = PerfDatum
{ _label :: Text -- ^ Name of quantity being measured.
, _value :: PerfValue -- ^ Measured value, integral or real.
, _uom :: UOM -- ^ Unit of measure; 'NullUOM' is fine here.
, _min :: Maybe PerfValue -- ^ Measured quantity cannot be lower than this.
, _max :: Maybe PerfValue -- ^ Measured quantity cannot be higher than this.
, _warn :: Maybe PerfValue -- ^ Warning threshold for graphing.
, _crit :: Maybe PerfValue -- ^ Critical threshold for graphing.
}
deriving (Eq, Show)
class ToPerfData a where
{ toPerfData :: a -> [PerfDatum] }
-- | Create a PerfDatum from only the required values, using Nothing
-- for all the others.
barePerfDatum ::
Text
-> PerfValue
-> UOM
-> PerfDatum
barePerfDatum info val uom = PerfDatum info val uom Nothing Nothing Nothing Nothing