{-# LANGUAGE TemplateHaskell #-} module Web.Mackerel.Types.Alert where import Data.Aeson import qualified Data.Aeson as Aeson import Data.Aeson.TH (deriveJSON, constructorTagModifier) import Data.Aeson.Types (typeMismatch) import Data.Char (toUpper) import qualified Data.Text as Text import Web.Mackerel.Internal.TH import Web.Mackerel.Types.Host (HostId) import Web.Mackerel.Types.Monitor (MonitorId, MonitorType) data AlertId = AlertId String deriving (Eq, Show) instance FromJSON AlertId where parseJSON (Aeson.String alertId) = return $ AlertId $ Text.unpack alertId parseJSON o = typeMismatch "AlertId" o instance ToJSON AlertId where toJSON (AlertId alertId) = toJSON alertId data AlertStatus = AlertStatusOk | AlertStatusCritical | AlertStatusWarning | AlertStatusUnknown deriving (Eq, Show) $(deriveJSON options { constructorTagModifier = map toUpper . drop 11 } ''AlertStatus) data Alert = Alert { alertId :: AlertId, alertStatus :: AlertStatus, alertMonitorId :: Maybe MonitorId, alertType :: MonitorType, alertHostId :: Maybe HostId, alertValue :: Maybe Double, alertMessage :: Maybe String, alertReason :: Maybe String, alertOpenedAt :: Integer, alertClosedAt :: Maybe Integer } deriving (Eq, Show) $(deriveJSON options ''Alert)