Update a Device Group

Last updated on 24 February, 2021

You can use LogicMonitor’s REST API to programmatically update LogicMonitor device groups.

As with all of our API calls, authentication is required.

There are two ways to update a device group:

  • PUT: A PUT request enables you to replace an entire device group definition (and update fields in the process).  You should use PUT to update a device group if you want to provide an updated JSON definition for the device group.  Note that consistent with REST standards, any properties not specified in a PUT request will revert back to their default values.
  • PATCH: A PATCH request enables you to replace only certain fields for a device group.  You should use PATCH if you don’t have the JSON definition for the device group and you only want to update a few fields.

PUT

HTTP Method: PUT

URI: /device/groups/<id>

You can include the following properties in your PUT request to update a device group:

Property

Description

Required?

Type

Example

parentId The id of the parent group for this device group (the root device group has an Id of 1) No. Defaults to 1 (root group) Integer “parentId”:1
name The name of the device group Yes String “name”:”MyDeviceGroup”
description The description of the device group No String “description”:”My device group description”
disableAlerting Indicates whether alerting is disabled (true) or enabled (false) for this device group No. Defaults to false Boolean “disableAlerting”:false
appliesTo The Applies to custom query for this group. Setting this field will make this a dynamic group. No. Defaults to a non-dynamic group String “appliesTo”:”system.displayname =~ \”Prod\””
customProperties The properties associated with this device group No JSON object “customProperties”:[{“name”:”location”,”value”:”12 E. Carrillo, Santa Barbara, CA”}]

Example

The following Python script updates group 115 to disable alerting:

#!/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 ='PUT'
resourcePath = '/device/groups/115'
queryParams = ''
data = '{"name":"customerA","disableAlerting":true,"customProperties":[{"name":"customer","value":"A"}]}'

#Construct URL 
url = 'https://'+ Company +'.logicmonitor.com/santaba/rest' + resourcePath + queryParams

#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.put(url, data=data, headers=headers)

#Print status and body of response
print('Response Status:',response.status_code)
print('Response Body:',response.content)
Python 3

PATCH

HTTP Method: PATCH

URI: /device/groups/{id}

Request Parameters:

With every PATCH request you must include a query parameter patchFields that indicates which fields should be updated, where multiple fields should be comma separated.  If a field is identified in the patchFields parameter and included in the payload of the request, its value will be updated.  All other field values will remain the same.  E.g. to update a device group’s name, the URI + query parameter would be /santaba/rest/device/groups/{id}?patchFields=name.  The name field would also need to be included in the request payload.  The following fields can be updated via PATCH:

Property

Description

Required?

Type

Example

parentId The id of the parent group for this device group (the root device group has an Id of 1) No. Defaults to 1 (root group) Integer “parentId”:1
name The name of the device group Yes String “name”:”MyDeviceGroup”
description The description of the device group No String “description”:”My device group description”
disableAlerting Indicates whether alerting is disabled (true) or enabled (false) for this device group No. Defaults to false Boolean “disableAlerting”:false
appliesTo The Applies to custom query for this group. Setting this field will make this a dynamic group. No. Defaults to a non-dynamic group String “appliesTo”:”system.displayname =~ \”Prod\””
customProperties Define custom properties for this device group. Each property needs to have a name and a value. To add or update just one or a few device group properties in the customProperties object, but not all of them, you’ll need to additionally use the opType query parameter. The opType query parameter can be set to add, refresh (default) or replace. opType=add indicates that the properties included in the payload will be added, but all existing properties will remain the same. opType=replace indicates that the properties included in the request payload will be added if they don’t already exist, or updated if they do already exist, but all other existing properties will remain the same. opType=refresh indicates that the properties will be replaced with those included in the request payload. No JSON object “customProperties”:[{“name”:”location”,”value”:”12 E. Carrillo, Santa Barbara, CA”}]

Example 1

The following Python script updates group 115 via PATCH to disable alerting:

#!/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 ='PATCH'
resourcePath = '/device/groups/115'
queryParams = '?patchFields=disableAlerting'
data = '{"disableAlerting":true}'

#Construct URL 
url = 'https://'+ Company +'.logicmonitor.com/santaba/rest' + resourcePath +queryParams

#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.patch(url, data=data, headers=headers)

#Print status and body of response
print('Response Status:',response.status_code)
print('Response Body:',response.content)
Python 3

Example 2

The following Python script adds a property to group 4 via PATCH, all other properties and fields remain the same:

#!/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 ='PATCH'
resourcePath = '/device/groups/4'
queryParams = '?patchFields=customProperties&opType=add'
data = '{"customProperties":[{"name":"billing","value":"Ops"}]}'

#Construct URL 
url = 'https://'+ Company +'.logicmonitor.com/santaba/rest' + resourcePath +queryParams

#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.patch(url, data=data, headers=headers)

#Print status and body of response
print('Response Status:',response.status_code)
print('Response Body:',response.content)t
Python 3
In This Article