module Aws.Ec2.Commands.DescribeInstanceStatus where
import Data.Aeson (Value(..), FromJSON, parseJSON, (.:), (.:?))
import Data.Aeson.Types (typeMismatch)
import qualified Data.Text as T
import Aws.Ec2.TH
import Aws.Ec2.Types (InstanceState)
data DescribeInstanceStatus = DescribeInstanceStatus { dis_instanceIds :: [Text] }
deriving (Show)
ec2ValueTransactionDef ''DescribeInstanceStatus 'DescribeInstanceStatus "instanceStatusSet" "InstanceId"
data InstanceStatusDetailName = Reachability deriving Eq
instance Show InstanceStatusDetailName where
show Reachability = "reachability"
instance Read InstanceStatusDetailName where
readsPrec _ h =
case h of
"reachability" -> [(Reachability, "")]
_ -> fail $ "Failed to parse " ++ h ++ " into InstanceStatusDetailName."
data InstanceStatusDetailStatus = Passed
| Failed
| DInsufficientData
| DInitializing
deriving Eq
instance Show InstanceStatusDetailStatus where
show Passed = "passed"
show Failed = "failed"
show DInsufficientData = "insufficient-data"
show DInitializing = "initializing"
instance Read InstanceStatusDetailStatus where
readsPrec _ h =
case h of
"passed" -> [(Passed, "")]
"failed" -> [(Failed, "")]
"insufficient-data" -> [(DInsufficientData, "")]
"initializing" -> [(DInitializing, "")]
_ -> fail $ "Failed to parse " ++ h ++ " into InstanceStatusDetailStatus."
data InstanceStatusDetails =
InstanceStatusDetails { isdName :: InstanceStatusDetailName
, isdStatus :: InstanceStatusDetailStatus
} deriving Show
instance FromJSON InstanceStatusDetails where
parseJSON (Object v) = InstanceStatusDetails <$>
(read <$> (v .: "name")) <*>
(read <$> (v .: "status"))
parseJSON invalid = typeMismatch "InstanceState" invalid
data InstanceStatusStatus = Ok
| Impaired
| InsufficientData
| NotApplicable
| Initializing
deriving Eq
instance Show InstanceStatusStatus where
show Ok = "ok"
show Impaired = "impaired"
show InsufficientData = "insufficient-data"
show NotApplicable = "not-applicable"
show Initializing = "initializing"
instance Read InstanceStatusStatus where
readsPrec _ h =
case h of
"ok" -> [(Ok, "")]
"impaired" -> [(Impaired, "")]
"insufficient-data" -> [(InsufficientData, "")]
"not-applicable" -> [(NotApplicable, "")]
"initializing" -> [(Initializing, "")]
_ -> fail $ "Failed to parse " ++ h ++ " into InstanceStatusStatus."
data InstanceStatusSummary =
InstanceStatusSummary { siStatus :: InstanceStatusStatus
, siDetails :: [InstanceStatusDetails]
} deriving Show
instance FromJSON InstanceStatusSummary where
parseJSON (Object v) = InstanceStatusSummary <$>
(read <$> (v .: "status")) <*>
v .: "details"
parseJSON invalid = typeMismatch "InstanceStatusSummary" invalid
data InstanceStatus =
InstanceStatus { isInstanceId :: T.Text
, isAvailabilityZone :: T.Text
, isInstanceStatus :: Maybe InstanceStatusSummary
, isSystemStatus :: Maybe InstanceStatusSummary
, isState :: Maybe InstanceState
} deriving Show
instance FromJSON InstanceStatus where
parseJSON (Object v) = InstanceStatus <$>
v .: "instanceId" <*>
v .: "availabilityZone" <*>
v .:? "instanceStatus" <*>
v .:? "systemStatus" <*>
v .:? "instanceState"
parseJSON invalid = typeMismatch "InstanceStatusSummary" invalid
newtype DescribeInstanceStatusResponse =
DescribeInstanceStatusResponse {disrInstanceStatuses :: [InstanceStatus]} deriving (Show)
instance FromJSON DescribeInstanceStatusResponse where
parseJSON v = DescribeInstanceStatusResponse <$>
(maybeToList <$> parseJSON v)