Add an Escalation Chain
Last updated on 24 February, 2021You can use LogicMonitor’s REST API to programmatically add Escalation Chains to your account.
As with all of our API calls, authentication is required.
HTTP Method:
POST
URI:
/setting/alert/chains
Request Parameters:
You can POST the following properties for all new escalation chains:
Property |
Description |
Required? |
Type |
Example |
name | The name of the Escalation Chain | Yes | String | “name”:”MyEscalationChain” |
description | The description associated with the Escalation Chain | No. Defaults to no description | String | “description”:”routes to the on call engineer” |
enableThrottling | Whether or not throttling (rate limiting) is enabled for this Escalation Chain. If true, throttlingPeriod and throttlingAlerts indicate how alerts will be throttled. | No. Defaults to false | Boolean | “enableThrottling”:false |
throttlingPeriod | The throttling (rate limit) period if enableThrottling is true, in minutes | Only if enableThrottling=true | Integer | “throttlingPeriod”:30 |
throttlingAlerts | If enableThrottling is true, throttingAlerts indicates the maximum number of alerts that can be routed in the throttlingPeriod. | Only if enableThrottling=true | Integer | “throttlingAlerts”:40 |
destinations | The destinations associated with the Escalation Chain. For non-time based escalation chains, the destination object consists of a stages object and type=single, and each stage includes a type (admin | arbitrary | group), a method (for type=admin values can be email | sms, for type=arbitrary value must be email, does not apply for type=group), and addr (the username for type=admin, recipient group for type=group and email for type=arbitrary). For time based escalation chains, the destination object consists of one or more objects, each with type=timebased, a period (includes fields startMinutes (0-1440), endMinutes(0-1440) and weekDays(should be an array with days, where options are 1-7, e.g. [1, 2, 3, 4, 5, 6, 7])), and a stages object (see above re non-time based chains for info about stages object). Note that prior to v89/90, the stages object must be enclosed in double brackets, as shown in the example. | Yes | JSON Object | “destinations”:[{“type”:”single”,”stages”:[[{“type”:”admin”,”method”:”sms”,”addr”:”Bob”},{“type”:”group”,”addr”:”OnCallGroup”},{“type”:”arbitrary”,”method”:”email”,”addr”:”[email protected]”}]]}] |
ccDestinations | CC recipients – these recipients will receive all notifications sent to every stage. Each ccDestination (recipient) will include a type (always is ARBITRARY), method (always is email), and addr (email address) | No. Defaults to no CC recipients | JSON Object | “ccDestinations”:[{“type”:”arbitrary”,”method”:”email”,”addr”:”[email protected]”}] |
Example
The following Python script adds an Escalation Chain ‘DBTeam’ to the account api.logicmonitor.com, where the escalation chain has a single stage for the db team recipient group:
#!/bin/env python
import requests
import json
import hashlib
import base64
import time
import hmac
#Account Info
AccessId ='48v2wRzfK94y53sq5EuF'
AccessKey ='H_D9i(f5~B^U36^K6i42=^nS~e75gy382Bf6{)P+'
Company = 'api'
#Request Info
httpVerb ='POST'
resourcePath = '/setting/alert/chains'
data='{"name":"DBTeam","destinations":[{"type":"single","stages":[[{"type":"group","addr":"dbTeam"}]]}]}'
#Construct URL
url = 'https://'+ Company +'.logicmonitor.com/santaba/rest' + resourcePath
#Get current time in milliseconds
epoch = str(int(time.time() * 1000))
#Concatenate Request details
requestVars = httpVerb + epoch + data + resourcePath
#Construct signature
hmac1 = hmac.new(AccessKey.encode(),msg=requestVars.encode(),digestmod=hashlib.sha256).hexdigest()
signature = base64.b64encode(hmac1.encode())
#Construct headers
auth = 'LMv1 ' + AccessId + ':' + signature.decode() + ':' + epoch
headers = {'Content-Type':'application/json','Authorization':auth
#Make request
response = requests.post(url, data=data, headers=headers)
#Print status and body of response
print('Response Status:',response.status_code)
print('Response Body:',response.content)