Add an Instance to a Datasource
Last updated on 24 February, 2021You can use LogicMonitor’s REST API to programmatically add instances to datasources that don’t have Active Discovery enabled.
Note: As with all of our API calls, authentication is required.
HTTP Method: POST
URI: /device/devices/{deviceId}/devicedatasources/{deviceDatasourceId}/instances
Where:
- {deviceId} is the device id, which you can get from a GET request to the devices resource
- {deviceDatasourceId} is the device datasource id, which you can get from a GET request to the device datasources resource
Request Parameters: You can include the following parameters in your POST request:
Property |
Description |
Required? |
Type |
groupId | The id of the instance group associated with the datasource instance | No. Defaults to the default group. | Integer |
displayName | The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination. | Yes | String |
description | The description of the datasource instance | No | String |
wildValue | The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used. | Yes | String |
wildValue2 | Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination. | No | String |
disableAlerting | Whether or not alerting is disabled for the instance | No. Defaults to false. | Boolean |
stopMonitoring | Whether or not monitoring is disabled for the instance | No. Defaults to false. | Boolean |
Example Request
The following Python script adds an instance ‘google’ to the HTTP_Page datasource for device 38 in account api.logicmonitor.com.
#!/bin/env python
import requests
import json
import hashlib
import base64
import time
import hmac
#Account Info
AccessId ='YQQ75w6Mxx9zWIeAMq5H'
AccessKey ='f)!Z}%spR=6en+4^s2$t32r-3=NpdQ]2T{-deI)8'
Company = 'api'
#Request Info
httpVerb ='POST'
resourcePath = '/device/devices/38/devicedatasources/2214/instances'
data = '{"wildValue":"www.google.com","displayName":"google"}'
#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
print requestVars
#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)
Example Response
The response associated with the script above may look like this:
Response Status: 200
Response Body: {
"status" : 200,
"errmsg" : "OK",
"data" : {
"id" : 76780611,
"groupId" : 2232,
"groupName" : "@default",
"name" : "HTTP_Page-google",
"displayName" : "google",
"description" : "",
"lockDescription" : false,
"deviceId" : 38,
"deviceDisplayName" : "ip-172-31-36-125.us-west-2.compute.internal",
"wildValue" : "www.google.com",
"wildValue2" : "",
"disableAlerting" : false,
"stopMonitoring" : false,
"alertStatus" : "none",
"alertStatusPriority" : 100000,
"sdtStatus" : "none-none-none",
"alertDisableStatus" : "none-none-none",
"alertingDisabledOn" : null,
"groupsDisabledThisSource" : null,
"sdtAt" : null,
"dataSourceId" : 105,
"deviceDataSourceId" : 2214
}
}