@@ -2,6 +2,7 @@
2{-# LANGUAGE ExtendedDefaultRules #-}
2{-# LANGUAGE ExtendedDefaultRules #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE TemplateHaskell #-}
4{-# LANGUAGE TemplateHaskell #-}
5+{-# LANGUAGE TypeFamilies #-}
6{-# OPTIONS_GHC -fno-warn-type-defaults #-}
7{-# OPTIONS_GHC -fno-warn-type-defaults #-}
@@ -139,8 +140,7 @@ data IncidentCounts = IncidentCounts
139 , _cntTotal :: !Int
140 , _cntTotal :: !Int
140 } deriving (Eq, Show)
141 } deriving (Eq, Show)
142−deriveJSON ''IncidentCounts
143−makeLenses ''IncidentCounts
143+deriveRecord ''IncidentCounts
145data EmailIncidentCreation
145data EmailIncidentCreation
146 = OnNewEmail
146 = OnNewEmail
@@ -151,7 +151,7 @@ data EmailIncidentCreation
151 -- ^ Open a new incident only if an open incident does not already exist.
151 -- ^ Open a new incident only if an open incident does not already exist.
152 deriving (Eq, Show)
152 deriving (Eq, Show)
154−deriveJSON ''EmailIncidentCreation
154+deriveNullary ''EmailIncidentCreation
156data EmailFilterMode
156data EmailFilterMode
157 = AllEmail
157 = AllEmail
@@ -162,7 +162,7 @@ data EmailFilterMode
162 -- ^ Accept email only if it matches ALL of the rules below
162 -- ^ Accept email only if it matches ALL of the rules below
163 deriving (Eq, Show)
163 deriving (Eq, Show)
165−deriveJSONWith hyphenated ''EmailFilterMode
165+deriveNullaryWith hyphenated ''EmailFilterMode
167data ServiceStatus
167data ServiceStatus
@@ -178,7 +178,7 @@ data ServiceStatus
178 -- ^ The service is disabled and will not have any new triggered incidents.
178 -- ^ The service is disabled and will not have any new triggered incidents.
179 deriving (Eq, Show)
179 deriving (Eq, Show)
181−deriveJSON ''ServiceStatus
181+deriveNullary ''ServiceStatus
183data ServiceType
183data ServiceType
184 = CloudKick
184 = CloudKick
@@ -191,15 +191,14 @@ data ServiceType
191 | SqlMonitor
191 | SqlMonitor
192 deriving (Eq, Show)
192 deriving (Eq, Show)
194−deriveJSON ''ServiceType
194+deriveNullary ''ServiceType
196data PolicyInfo = PolicyInfo
196data PolicyInfo = PolicyInfo
197 { _pinfoId :: PolicyId
197 { _pinfoId :: PolicyId
198 , _pinfoName :: Text
198 , _pinfoName :: Text
199 } deriving (Eq, Show)
199 } deriving (Eq, Show)
201−makeLenses ''PolicyInfo
202−deriveJSON ''PolicyInfo
201+deriveRecord ''PolicyInfo
204data MatchMode
203data MatchMode
@@ -207,7 +206,7 @@ data MatchMode
207 | NoMatch
206 | NoMatch
208 deriving (Eq, Show)
207 deriving (Eq, Show)
210−deriveJSONWith hyphenated ''MatchMode
209+deriveNullaryWith hyphenated ''MatchMode
212-- FIXME: Tighten up this type! Make the regex required for match/no-match.
211-- FIXME: Tighten up this type! Make the regex required for match/no-match.
213data EmailFilters = EmailFilters
212data EmailFilters = EmailFilters
@@ -271,7 +270,7 @@ data SeverityFilter
271 -- ^ SQL Monitor: Incidents are created for with high or medium severity
270 -- ^ SQL Monitor: Incidents are created for with high or medium severity
272 deriving (Eq, Show)
271 deriving (Eq, Show)
274−deriveJSONWith (dropped 3 underscored) ''SeverityFilter
273+deriveNullaryWith (dropped 3 underscored) ''SeverityFilter
276data Service = Service
275data Service = Service
277 { _svcId :: ServiceId
276 { _svcId :: ServiceId
@@ -321,13 +320,17 @@ makeLens "_svcAutoResolveTimeout" ''Service
321makeLens "_svcAcknowledgementTimeout" ''Service
320makeLens "_svcAcknowledgementTimeout" ''Service
323-- | The date/time when this service was created.
322-- | The date/time when this service was created.
324−makeLens "_svcCreatedAt" ''Service
323+svcCreatedAt :: Lens' Service UTCTime
324+svcCreatedAt = lens _svcCreatedAt (\s x -> s { _svcCreatedAt = x }) . _Date
326-- | The current state of the Service.
326-- | The current state of the Service.
327makeLens "_svcStatus" ''Service
327makeLens "_svcStatus" ''Service
329-- | The date/time when the most recent incident was created for this service.
329-- | The date/time when the most recent incident was created for this service.
330−makeLens "_svcLastIncidentTimestamp" ''Service
330+svcLastIncidentTimestamp :: Lens' Service (Maybe UTCTime)
331+svcLastIncidentTimestamp =
332+ lens _svcLastIncidentTimestamp
333+ (\s x -> s { _svcLastIncidentTimestamp = x }) . mapping _Date
332-- | If the service is a Generic Email service, this describes what kind of
335-- | If the service is a Generic Email service, this describes what kind of
333-- emails create an incident.
336-- emails create an incident.
@@ -360,8 +363,13 @@ newtype ListServices = ListServices
361instance Paginate ListServices
364instance Paginate ListServices
363−deriveJSON ''ListServices
366+deriveQuery ''ListServices
364−makeLenses ''ListServices
367+
368+-- | Time zone in which dates in the result will be rendered.
370+-- Defaults to account default time zone.
371+lsTimeZone :: Lens' (Request ListServices s r) (Maybe TimeZone)
372+lsTimeZone = upd.lsTimeZone'.mapping _TZ
366-- | List existing services.
374-- | List existing services.
@@ -376,12 +384,6 @@ listServices =
376 & query .~ includes
384 & query .~ includes
377 & unwrap .~ key "escalation_policies"
385 & unwrap .~ key "escalation_policies"
379−-- | Time zone in which dates in the result will be rendered.
381−-- Defaults to account default time zone.
382−lsTimeZone :: Lens' (Request ListServices s r) (Maybe TimeZone)
383−lsTimeZone = upd.lsTimeZone'._TZ
385data CreateService = CreateService
387data CreateService = CreateService
386 { _csName' :: Text
388 { _csName' :: Text
387 , _csEscalationPolicyId' :: PolicyId
389 , _csEscalationPolicyId' :: PolicyId
@@ -393,30 +395,7 @@ data CreateService = CreateService
393 , _csSeverityFilter' :: Maybe SeverityFilter
395 , _csSeverityFilter' :: Maybe SeverityFilter
394 } deriving (Eq, Show)
396 } deriving (Eq, Show)
396−deriveJSON ''CreateService
397−makeLenses ''CreateService
398+deriveBody ''CreateService
399−-- | Creates a new service.
403−-- See: <http://developer.pagerduty.com/documentation/rest/services/create>
404−createService :: Text
407− -> Request CreateService s Service
408−createService n p t =
411− , _csEscalationPolicyId' = p
413− , _csVendorId' = Nothing
414− , _csDescription' = Nothing
415− , _csAcknowledgementTimeout' = Nothing
416− , _csAutoResolveTimeout' = Nothing
417− , _csSeverityFilter' = Nothing
418− } & path .~ services
419− & unwrap .~ key "service"
421-- | The name of the service.
400-- | The name of the service.
422csName :: Lens' (Request CreateService s r) Text
401csName :: Lens' (Request CreateService s r) Text
@@ -456,6 +435,28 @@ csAutoResolveTimeout = upd.csAutoResolveTimeout'
456csSeverityFilter :: Lens' (Request CreateService s r) (Maybe SeverityFilter)
435csSeverityFilter :: Lens' (Request CreateService s r) (Maybe SeverityFilter)
457csSeverityFilter = upd.csSeverityFilter'
436csSeverityFilter = upd.csSeverityFilter'
438+-- | Creates a new service.
442+-- See: <http://developer.pagerduty.com/documentation/rest/services/create>
443+createService :: Text
446+ -> Request CreateService s Service
447+createService n p t =
450+ , _csEscalationPolicyId' = p
452+ , _csVendorId' = Nothing
453+ , _csDescription' = Nothing
454+ , _csAcknowledgementTimeout' = Nothing
455+ , _csAutoResolveTimeout' = Nothing
456+ , _csSeverityFilter' = Nothing
457+ } & path .~ services
458+ & unwrap .~ key "service"
459-- | Get details about an existing service.
460-- | Get details about an existing service.
461-- @GET services\/\:id@
462-- @GET services\/\:id@
@@ -476,26 +477,7 @@ data UpdateService = UpdateService
476 , _usSeverityFilter' :: Maybe SeverityFilter
477 , _usSeverityFilter' :: Maybe SeverityFilter
477 } deriving (Eq, Show)
478 } deriving (Eq, Show)
479−deriveJSON ''UpdateService
480−makeLenses ''UpdateService
480+deriveBody ''UpdateService
482−-- | Update an existing service.
484−-- @PUT services\/\:id@
486−-- See: <http://developer.pagerduty.com/documentation/rest/services/update>
487−updateService :: ServiceId -> Request UpdateService s Service
490− { _usName' = Nothing
491− , _usEscalationPolicyId' = Nothing
492− , _usDescription' = Nothing
493− , _usAcknowledgementTimeout' = Nothing
494− , _usAutoResolveTimeout' = Nothing
495− , _usSeverityFilter' = Nothing
497− & path .~ services % i
498− & unwrap .~ key "service"
500-- | The name of the service.
482-- | The name of the service.
501usName :: Lens' (Request UpdateService s r) (Maybe Text)
483usName :: Lens' (Request UpdateService s r) (Maybe Text)
@@ -526,6 +508,24 @@ usAutoResolveTimeout = upd.usAutoResolveTimeout'
526usSeverityFilter :: Lens' (Request UpdateService s r) (Maybe SeverityFilter)
508usSeverityFilter :: Lens' (Request UpdateService s r) (Maybe SeverityFilter)
527usSeverityFilter = upd.usSeverityFilter'
509usSeverityFilter = upd.usSeverityFilter'
511+-- | Update an existing service.
513+-- @PUT services\/\:id@
515+-- See: <http://developer.pagerduty.com/documentation/rest/services/update>
516+updateService :: ServiceId -> Request UpdateService s Service
519+ { _usName' = Nothing
520+ , _usEscalationPolicyId' = Nothing
521+ , _usDescription' = Nothing
522+ , _usAcknowledgementTimeout' = Nothing
523+ , _usAutoResolveTimeout' = Nothing
524+ , _usSeverityFilter' = Nothing
526+ & path .~ services % i
527+ & unwrap .~ key "service"
529-- | Delete an existing service. Once the service is deleted, it will not be
529-- | Delete an existing service. Once the service is deleted, it will not be
530-- accessible from the web UI and new incidents won't be able to be created
530-- accessible from the web UI and new incidents won't be able to be created
531-- for this service.
531-- for this service.