module Network.PagerDuty.REST.Services
(
ListServices
, listServices
, lsTimeZone
, CreateService
, createService
, csName
, csDescription
, csType
, csVendorId
, csEscalationPolicyId
, csAcknowledgementTimeout
, csAutoResolveTimeout
, csSeverityFilter
, getService
, UpdateService
, updateService
, usName
, usEscalationPolicyId
, usDescription
, usAcknowledgementTimeout
, usAutoResolveTimeout
, usSeverityFilter
, deleteService
, enableService
, disableService
, regenerateKey
, EmailFilterMode (..)
, EmailIncidentCreation (..)
, ServiceStatus (..)
, ServiceType (..)
, SeverityFilter (..)
, IncidentCounts
, cntTriggered
, cntAcknowledged
, cntResolved
, cntTotal
, PolicyInfo
, pinfoId
, pinfoName
, Service
, svcId
, svcName
, svcDescription
, svcServiceUrl
, svcServiceKey
, svcAutoResolveTimeout
, svcAcknowledgementTimeout
, svcCreatedAt
, svcStatus
, svcLastIncidentTimestamp
, svcEmailIncidentCreation
, svcIncidentCounts
, svcEmailFilterMode
, svcType
, svcEscalationPolicy
, svcEmailFilters
, svcSeverityFilter
) where
import Control.Lens
import Data.Aeson.Lens
import Data.Text (Text)
import Data.Time
import Network.HTTP.Types
import Network.PagerDuty.REST.Services.EmailFilters
import Network.PagerDuty.Internal.TH
import Network.PagerDuty.Internal.Types
default (Path)
services :: Path
services = "services"
includes :: Query
includes =
[ ("include[]", Just "escalation_policy")
, ("include[]", Just "email_filters")
]
data IncidentCounts = IncidentCounts
{ _cntTriggered :: !Int
, _cntAcknowledged :: !Int
, _cntResolved :: !Int
, _cntTotal :: !Int
} deriving (Eq, Show)
deriveRecord ''IncidentCounts
data EmailIncidentCreation
= OnNewEmail
| OnNewEmailSubject
| OnlyIfNoOpenIncidents
deriving (Eq, Show)
deriveNullary ''EmailIncidentCreation
data EmailFilterMode
= AllEmail
| OrRulesEmail
| AndRulesEmail
deriving (Eq, Show)
deriveNullaryWith hyphenated ''EmailFilterMode
data ServiceStatus
= Active
| Warning
| Critical
| Maintenance
| Disabled
deriving (Eq, Show)
deriveNullary ''ServiceStatus
data ServiceType
= CloudKick
| GenericEmail
| GenericEventsApi
| Keynote
| Nagios
| Pingdom
| ServerDensity
| SqlMonitor
deriving (Eq, Show)
deriveNullary ''ServiceType
data PolicyInfo = PolicyInfo
{ _pinfoId :: EscalationPolicyId
, _pinfoName :: Text
} deriving (Eq, Show)
deriveRecord ''PolicyInfo
data SeverityFilter
= SevCritical
| SevCriticalOrWarning
| SevOnAny
| SevOnHigh
| SevOnMediumHigh
deriving (Eq, Show)
deriveNullaryWith (dropped 3 underscored) ''SeverityFilter
data Service = Service
{ _svcId :: ServiceId
, _svcName :: Text
, _svcDescription :: Text
, _svcServiceUrl :: Text
, _svcServiceKey :: ServiceKey
, _svcAutoResolveTimeout :: Maybe Int
, _svcAcknowledgementTimeout :: Maybe Int
, _svcCreatedAt :: Date
, _svcStatus :: ServiceStatus
, _svcLastIncidentTimestamp :: Maybe Date
, _svcEmailIncidentCreation :: Maybe EmailIncidentCreation
, _svcIncidentCounts :: IncidentCounts
, _svcEmailFilterMode :: EmailFilterMode
, _svcType :: ServiceType
, _svcEscalationPolicy :: Maybe PolicyInfo
, _svcEmailFilters :: Maybe [EmailFilterInfo]
, _svcSeverityFilter :: Maybe SeverityFilter
} deriving (Eq, Show)
deriveJSON ''Service
makeLens "_svcId" ''Service
makeLens "_svcName" ''Service
makeLens "_svcDescription" ''Service
makeLens "_svcServiceUrl" ''Service
makeLens "_svcServiceKey" ''Service
makeLens "_svcAutoResolveTimeout" ''Service
makeLens "_svcAcknowledgementTimeout" ''Service
svcCreatedAt :: Lens' Service UTCTime
svcCreatedAt = lens _svcCreatedAt (\s x -> s { _svcCreatedAt = x }) . _D
makeLens "_svcStatus" ''Service
svcLastIncidentTimestamp :: Lens' Service (Maybe UTCTime)
svcLastIncidentTimestamp =
lens _svcLastIncidentTimestamp
(\s x -> s { _svcLastIncidentTimestamp = x }) . mapping _D
makeLens "_svcEmailIncidentCreation" ''Service
makeLens "_svcIncidentCounts" ''Service
makeLens "_svcEmailFilterMode" ''Service
makeLens "_svcType" ''Service
makeLens "_svcEscalationPolicy" ''Service
makeLens "_svcEmailFilters" ''Service
makeLens "_svcSeverityFilter" ''Service
newtype ListServices = ListServices
{ _lsTimeZone' :: Maybe TZ
} deriving (Eq, Show)
instance Paginate ListServices
queryRequest ''ListServices
lsTimeZone :: Lens' (Request ListServices s r) (Maybe TimeZone)
lsTimeZone = upd.lsTimeZone'.mapping _TZ
listServices :: Request ListServices s [Service]
listServices =
mk ListServices
{ _lsTimeZone' = Nothing
} & path .~ services
& query .~ includes
& unwrap .~ key "escalation_policies"
data CreateService = CreateService
{ _csName' :: Text
, _csEscalationPolicyId' :: EscalationPolicyId
, _csType' :: !ServiceType
, _csVendorId' :: Maybe VendorId
, _csDescription' :: Maybe Text
, _csAcknowledgementTimeout' :: Maybe Int
, _csAutoResolveTimeout' :: Maybe Int
, _csSeverityFilter' :: Maybe SeverityFilter
} deriving (Eq, Show)
jsonRequest ''CreateService
csName :: Lens' (Request CreateService s r) Text
csName = upd.csName'
csDescription :: Lens' (Request CreateService s r) (Maybe Text)
csDescription = upd.csDescription'
csType :: Lens' (Request CreateService s r) ServiceType
csType = upd.csType'
csVendorId :: Lens' (Request CreateService s r) (Maybe VendorId)
csVendorId = upd.csVendorId'
csEscalationPolicyId :: Lens' (Request CreateService s r) EscalationPolicyId
csEscalationPolicyId = upd.csEscalationPolicyId'
csAcknowledgementTimeout :: Lens' (Request CreateService s r) (Maybe Int)
csAcknowledgementTimeout = upd.csAcknowledgementTimeout'
csAutoResolveTimeout :: Lens' (Request CreateService s r) (Maybe Int)
csAutoResolveTimeout = upd.csAutoResolveTimeout'
csSeverityFilter :: Lens' (Request CreateService s r) (Maybe SeverityFilter)
csSeverityFilter = upd.csSeverityFilter'
createService :: Text
-> EscalationPolicyId
-> ServiceType
-> Request CreateService s Service
createService n p t =
mk CreateService
{ _csName' = n
, _csEscalationPolicyId' = p
, _csType' = t
, _csVendorId' = Nothing
, _csDescription' = Nothing
, _csAcknowledgementTimeout' = Nothing
, _csAutoResolveTimeout' = Nothing
, _csSeverityFilter' = Nothing
} & path .~ services
& unwrap .~ key "service"
getService :: ServiceId -> Request Empty s Service
getService i = empty
& path .~ services % i
& query <>~ includes
& unwrap .~ key "service"
data UpdateService = UpdateService
{ _usName' :: Maybe Text
, _usDescription' :: Maybe Text
, _usEscalationPolicyId' :: Maybe EscalationPolicyId
, _usAcknowledgementTimeout' :: Maybe Int
, _usAutoResolveTimeout' :: Maybe Int
, _usSeverityFilter' :: Maybe SeverityFilter
} deriving (Eq, Show)
jsonRequest ''UpdateService
usName :: Lens' (Request UpdateService s r) (Maybe Text)
usName = upd.usName'
usDescription :: Lens' (Request UpdateService s r) (Maybe Text)
usDescription = upd.usDescription'
usEscalationPolicyId :: Lens' (Request UpdateService s r) (Maybe EscalationPolicyId)
usEscalationPolicyId = upd.usEscalationPolicyId'
usAcknowledgementTimeout :: Lens' (Request UpdateService s r) (Maybe Int)
usAcknowledgementTimeout = upd.usAcknowledgementTimeout'
usAutoResolveTimeout :: Lens' (Request UpdateService s r) (Maybe Int)
usAutoResolveTimeout = upd.usAutoResolveTimeout'
usSeverityFilter :: Lens' (Request UpdateService s r) (Maybe SeverityFilter)
usSeverityFilter = upd.usSeverityFilter'
updateService :: ServiceId -> Request UpdateService s Service
updateService i =
mk UpdateService
{ _usName' = Nothing
, _usEscalationPolicyId' = Nothing
, _usDescription' = Nothing
, _usAcknowledgementTimeout' = Nothing
, _usAutoResolveTimeout' = Nothing
, _usSeverityFilter' = Nothing
} & meth .~ PUT
& path .~ services % i
& unwrap .~ key "service"
deleteService :: ServiceId -> Request Empty s Empty
deleteService i = empty & meth .~ DELETE & path .~ services % i
enableService :: RequesterId -> ServiceId -> Request Empty s Empty
enableService r i =
auth (enableServiceBasic i) & query .~ [("requester_id", r)]
enableServiceBasic :: ServiceId -> Request Empty Basic Empty
enableServiceBasic i = empty & meth .~ PUT & path .~ services % i % "enable"
disableService :: RequesterId -> ServiceId -> Request Empty s Empty
disableService r i =
auth (disableServiceBasic i) & query .~ [("requester_id", r)]
disableServiceBasic :: ServiceId -> Request Empty Basic Empty
disableServiceBasic i = empty & meth .~ PUT & path .~ services % i % "disable"
regenerateKey :: ServiceId -> Request Empty s Service
regenerateKey i = empty & meth .~ POST & path .~ services % i % "regenerate_key"