Update a Widget

Last updated on 29 June, 2022

Overview

You can use LogicMonitor’s REST API to programmatically update widgets. As with all of our API resources, authentication is required.

Request Information

HTTP Method: PUT
(consistent with REST standards, any properties not specified in a PUT request will revert back to their default values)

URI: /dashboard/widgets/{id}

Properties

Global Properties

All PUT requests for updating widgets can include the following properties.

Property Description Required? Type Example
name The name of the widget Yes String “name”:”Apache Requests”
description The description of the widget No String “description”:”My Widget Description”
type alert | cgraph | deviceNOC | html | serviceOverallStatus | sgraph | ngraph | serviceNOC | serviceSLA | bigNumber | gmap | serviceIndividualStatus | gauge | pieChart | ngraph | batchjob” Yes String “type”:”alert”
dashboardId The id of the dashboard the widget will be added to Yes Integer “dashboardId”:50
theme The color scheme of the widget. Options are borderPurple | borderGray | borderBlue | solidPurple | solidGray | solidBlue | simplePurple | simpleBlue | simpleGray | newBorderGray | newBorderBlue | newBorderDarkBlue | newSolidGray | newSolidBlue | newSolidDarkBlue | newSimpleGray | newSimpleBlue |newSimpleDarkBlue No. Defaults to borderPurple. String “theme”:”simplePurple”
colSpan The number of columns the widget’s width should consume No. Defaults to 1. Integer “colSpan”:1
rowSpan The number of rows the widget’s height should consume No. Defaults to 1. Integer “rowSpan”:1
interval The refresh interval of the widget. Options are 1 | 3 | 5 | 10 | 15 (all in minutes) No. Defaults to 3. Integer “interval”:1
timescale The default timescale of the widget. Options are 1hour | 2hour | 5hour | 1day | 2days | 7days | 1month | 3month | 1year No. Defaults to 1hour. String “timescale”:”1day”
extra Only applies to alert widgets No JSON Object

Note: colSpan and rowSpan can be used to change widget size, but will not change widget position (and do not allow half size widgets). The only way to currently change widget position (or create half size widgets) is to update the widgetsConfig string for the dashboard itself via the dashboards resource.

Widget-Specific Properties

Additional properties are available depending on the widget you are updating.

Alert Widget Properties

You may additionally include a ‘filters’ object with the following properties for all widgets of type alert (alert widgets).

Property Description Required? Type Example
group Displayed alerts must be associated with groups that meet this filter criteria. Glob is accepted, and * and an empty string both indicate all groups. No. Defaults to all groups. String “group”:”Relay*”
host Displayed alerts must be associated with devices that meet this filter criteria. Glob is accepted, and * and an empty string both indicate all devices. No. Defaults to all hosts. String “host”:”*”
dataSource Displayed alerts must be associated with datasources that meet this filter criteria. Glob is accepted, and * and an empty string both indicate all datasources. No. Defaults to all datasources. String “dataSource”:”*”
instance Displayed alerts must be associated with instances that meet this filter criteria. Glob is accepted, and * and an empty string both match all instances. No. Defaults to all instances. String “instance”:”HTTP_Page-instance0″
dataPoint Displayed alerts must be associated with datapoints that meet this filter criteria. Glob is accepted, and * and an empty string both match all datapoints. No. Defaults to all datapoints. String “dataPoint”:”*”
severity Displayed alerts must have a severity that satisfies this criteria. Multiple severities are separated by commas. No. Defaults to warn. String “severity”:”warn”
acked all | acked. Displayed alerts must have an acknowledgement status that satisfies this criteria. No. Defaults to all. String “acked”:”all”
sdted all | sdted. Displayed alerts must have an SDT status that meets this criteria. No. Defaults to all. String “sdted”:”all”
rule Displayed alerts must match a rule that satisfies this filter. Glob is accepted, and * and an empty string both match all rules. No. Defaults to all rules. String “rule”:”*”
chain Displayed alerts must be routed to an escalation chain that satisfies this filter. Glob is accepted, and * and an empty string both match all escalation chains. No. Defaults to all chains. String “chain”:”*”
cleared all | no. Displayed alerts must be active if cleared=no, and must have cleared in the past 7 days if cleared=all. No. Defaults to no. String “cleared”:”no”

Batchjob Widget Properties

You may additionally include the following properties for all widgets of type batchjob (batchjob widgets).

Property Description Required? Type Example
deviceDisplayName The display name of the device in LogicMonitor that the batchjob is running on No. Defaults to *. String “deviceDisplayName”:”10.36.11.240″
batchJobName The name of the batchjob definition in LogicMonitor One of batchJobName and batchJobId are required. String “batchJobName”:”myBatchJob”
batchJobId The id of the batchjob definition in LogicMonitor One of batchJobName and batchJobId are required. String “batchJobId”:2

Big Number Widget

All widgets of type bigNumber (big number widgets) must include an object bigNumberInfo with the following fields.

Property Description Required? Type Example
dataPoints The datapoints included in the widget, where each datapoint can include:

  • deviceGroupFullPath -Required, Glob accepted
  • deviceDisplayName -Required, Glob accepted
  • dataSourceId -Required
  • dataSourceFullName -Optional (will be accepted instead of dataSourceId in an upcoming version)
  • instanceName -Required, Glob accepted
  • dataPointName – One of dataPointId and dataPointName are required.
  • dataPointId – One of dataPointId and dataPointName are required.
  • name (datapoint configuration name) – Required
  • aggregateFunction (sum | min | max | average) – Optional

Note that a datapoint must be referenced in the bigNumberItems object in order to be displayed.

Yes JSON Object “dataPoints”:[{“deviceGroupFullPath”:”Website”,”deviceDisplayName”:”ip-172-31-37-162.us-west-2.compute.interal”,”dataSourceId”:559,”instanceName”:”NetSNMPCPUwithCores-Core Count: 1″,”dataPointName”:”CPUBusyPercent”,”name”:”CPUBusyPercent”}]
virtualDataPoints The virtual datapoints included in the widget, where each virtual datapoint needs to include a name (of a datapoint configuration) and rpn (calculation). Note that a virtual datapoint must be referenced in the bigNumberItems object in order to be displayed. No JSON Object “virtualDataPoints”:[{“name”:”CPU Idle Percent”,”rpn”:”100 – CPUBusyPercent”}]
bigNumberItems The datapoints and virtual datapoints whose values should be displayed in the big number widget, where each item needs to include:

  • position (1 | 2 | 3 | 4)
  • rightLabel
  • bottomLabel
  • dataPointName
  • rounding (0 | 1 | 2) where 0=no decimal, 1=one decimal place, 2=two decimal places
Yes JSON Object “bigNumberItems”:[{“position”:1,”rightLabel”:”%”,”bottomLabel”:””,”dataPointName”:”CPUBusyPercent”,”rounding”:”0″},{“position”:3,”rightLabel”:””,”bottomLabel”:”%”,”dataPointName”:”CPU Idle Percent”,”rounding”:”1″}]

Custom Graph Widget

All widgets of type cgraph (custom graph widgets) must include an object graphInfo with the following fields.

Property Description Type Required?
title The custom graph title String Yes
aggregate true: You can set this field to true to aggregate results into one line.
false: Results will not be aggregated.
Boolean No. Defaults to false.
top10Only true: You can set this field to true to limit results to 10 lines. Note that only one of aggregate and top10Only can be set to true, as results cannot be both aggregated and limited.
false: Results will not be limited
Boolean No. Defaults to false.
base1024 Change base scale from 1000 to 1024 Boolean No. Defaults to false
maxValue The maximum value that should be displayed on the y-axis Integer No. Defaults to no max
minValue The minimum value that should be displayed on the y-axis Integer No. Defaults to no min
verticalLabel The label that will be display along the y axis String Yes
height The number of pixels tall the graph is. If the widget rowSpan is set to 1, this value will be 120. Integer No. Defaults to 120.
width The number of pixels wide the graph is. If the widget rowSpan is set to 1, this value will be 360. Integer No. Defaulst to 360.
dataPoints The datapoints added to the widget (note that a datapoint must be referenced in a graph line to be displayed). You can to include a name (required), consolidateFunction (1=average, 2=max, 3=min)(Data Series field in the UI, defaults to 1), aggregateFunction (min, max, sum, average), dataPointId or dataPointName (required), deviceDisplayName (required), dataSourceFullName or dataSourceId (required), instanceName (required), and deviceGroupFullPath (required) JSON Object Yes
virtualDataPoints The virtual datapoints added to the widget (note that a virtual datapoint must be referenced in a graph line to be displayed). You must include a name and rpn (calculation that references a dataPoint name in the dataPoints object) JSON Object No
graphLines The graph lines to be displayed in the widget, where graph lines should reference the dataPoints and virtualDataPoints. You need to include dataPointName, legend, and type (1=line, 2=area, 3=stack, 4=column) JSON Object Yes

Device NOC Widget Properties

You may also include the following fields for widgets of type deviceNOC (device NOC widgets).

Property Description Required? Type Example
sortBy How NOC items are sorted. Options are name | severity. No. Defaults to name. String “sortBy”:”name”
displayColumn The maximum number of columns displayed in the NOC widget. No. Defaults to 1. Integer “displayColumn”:3
displayWarnAlert Whether or not warning alerts are displayed in the NOC widget No. Defaults to true. Boolean “displayWarnAlert”:true
displayErrorAlert Whether or not error alerts are displayed in the NOC widget No. Defaults to true. Boolean “displayErrorAlert”:true
displayCriticalAlert Whether or not critical alerts are displayed in the NOC widget No. Defaults to true. Boolean “displayCriticalAlert”:true
ackChecked Whether or not acknowledgements are displayed in the NOC widget No. Defaults to true. Boolean “ackChecked”:true
sdtChecked Whether or not SDTs are displayed in the NOC widget No. Defaults to true. Boolean “sdtChecked”:true
items The NOC items, where each item needs to include:

  • deviceGroupFullPath
  • deviceDisplayName
  • dataSourceDisplayName
  • instanceName
  • dataPointName
  • groupBy (optional – defaults to deviceGroup if omitted)
  • name (the item name, as it will be displayed in the widget)
Yes JSON Object “items”:[{“deviceGroupFullPath”:”*”,”deviceDisplayName”:”ip-172-31-33-214.us-west-2.compute.internal”,”dataSourceDisplayName”:”HTTP-“,”instanceName”:”*”,”dataPointName”:”*”,”groupBy”:”device”,”name”:”##HOSTNAME## – HTTP content/function”},{“deviceGroupFullPath”:”*”,”deviceDisplayName”:”ip-172-31-33-214.us-west-2.compute.internal”,”dataSourceDisplayName”:”Apache-“,”instanceName”:”*”,”dataPointName”:”*”,”groupBy”:”device”,”name”:”##HOSTNAME## – Apache”},{“deviceGroupFullPath”:”*”,”deviceDisplayName”:”ip-172-31-33-214.us-west-2.compute.internal”,”dataSourceDisplayName”:”Host Status”,”instanceName”:”*”,”dataPointName”:”*”,”groupBy”:”device”,”name”:”##HOSTNAME## – Host Status”}]

Gauge Widget Properties

You may also include the following fields for widgets of type gauge (gauge widgets).

Property Description Required? Type Example
showPeak Whether or not the peak value is displayed on the gauge widget No. Defaults to false. Boolean “showPeak”:false
peakTimeRange The time range over which the peak value is determined No. Defaults to hour. String “peakTimeRange”:”30days”
legend The legend for the widget, displayed underneath the gauge No String “legend”:”Apache Accesses”
maxValue The maximum value of the gauge widget, displayed on the right side of the gauge Yes Integer “maxValue”:5.0
minValue The minimum value of the gauge widget, displayed on the left side of the gauge Yes Integer “minValue”:0.0
dataPoint The datapoint whose value is displayed in the gauge widget. The following fields must be specified for each datapoint (unless otherwise noted below):

  • deviceGroupFullPath – Required, Glob accepted
  • deviceDisplayName – Required, Glob accepted
  • dataSourceFullName – One of dataSourceFullName and dataSourceId are required
  • dataSourceId – One of dataSourceFullName and dataSourceId are required
  • instanceName – Required
  • dataPointName – One of dataPointName and dataPointId are required
  • dataPointId – One of dataPointName and dataPointId are required
  • aggregationFunction – this field determines how data is aggregated across instances (defaults to max if omitted). Options are SUM, MAX and MIN.
  • dataSeries (defaults to average if omitted)
  • rpn: Perform a calculation on a datapoint (defaults to blank if omitted)
Yes JSON Object “dataPoint”:{“deviceGroupFullPath”:”Production”,”deviceDisplayName”:”ip-172-31-37-162.us-west-2.compute.interal”,”dataSourceId”:”124″,”instanceName”:”*”,”dataPointName”:”Accesses”,”aggregateFunction”:”SUM”,”rpn”:”Accesses + 10″,”dataSeries”:”average”}

Google Map Widget Properties

You must also include an object mapPoints with the following fields for widgets of type gmap (google map widgets).

Property Description Required? Type Example
type Whether or not the mapPoint represents a device or a group Yes String “type”:”group”
deviceGroupFullPath The full path of the device group associated with the map point. This may be the group the map point represents, or the group of the device that the map point represents. Yes String “deviceGroupFullPath”:”Production/AWS”
deviceDisplayName The display name of the device the map point represents (if type=device). This field supports Glob (*). Yes, if type=device String “deviceDisplayName”:”ProductionServer23″

HTML Widget Properties

You must also include an object ‘resources’ with the following fields for widgets of type html (html widgets).

Property Description Required? Type Example
type html | iframe Yes String “type”:”html”
URL If type = html this should be a url, if type = iframe this should be an iframe. Yes String “URL”:”https://api.logicmonitor.com”

Normal Graph Widget (Device Graphs) Properties

You may also include the following fields for widgets of type ngraph (pinned device level graphs).

Property Description Required? Type Example
hId The id of the device the graph was pinned from Yes Integer “hId”:199
dsiId The id of the datasource instance the graph was pinned from Yes Integer “dsiId”:2133
graphId The id of the datasource graph this widget was pinned from Yes Integer “graphId”:1042

Pie Chart Widget Properties

You must also include an object pieChartInfo with the following fields for all widgets of type pieChart (pie chart widgets):

Property Description Required? Type Example
title The title that will be displayed above the pie chart No String “title”:”CostPerRegion”
showLabelsAndLinesOnPC Whether or not labels and lines should be displayed on the pie chart widget No. Defaults to false. Boolean “showLabelsAndLinesOnPC”:false
maxSlicesCanBeShown The maximum number of slices you’d like displayed in the pie chart. The maximum number of allowed slices is 25. No. Defaults to 10. Integer “maxSlicesCanBeShown”:10
groupRemainingAsOthers If the number of slices exceeds the maxSlicesCanBeShown, this value indicates whether the remaining slices should be grouped together No. Defaults to false. Boolean “groupRemainingAsOthers”:false
dataPoints The datapoints added to the widget. Note that datapoints must be included in the pieChartItems object to be displayed in the widget. Each dataPoint should include:

  • name (for the datapoint configuration) – required
  • dataPointName – One of dataPointName and dataPointId are required
  • dataPointId – One of dataPointName and dataPointId are required
  • deviceDisplayName – Required
  • dataSourceId – One of dataSourceId and dataSourceName are required.
  • dataSourceFullName (this is the datasource name, not the display name, and should include any dashes present in the name) – One of dataSourceId and dataSourceName are required.
  • instanceName – Required
  • top10: true | false, where only one of top10 and aggregate can be true
  • aggregate: true | false, where only one of top10 and aggregate can be true
  • aggregationFunction – required if aggregate=true. Options are SUM, MAX and MIN.
Yes JSON Object “dataPoints”:[{“deviceGroupFullPath”:”Website”,”deviceDisplayName”:”*”,”dataSourceFullName”:”Apache-“,”instanceName”:”Apache-80″,”dataPointName”:”ExtendedStatusNotEnabled”,”name”:”ExtendedStatusNotEnabled”,”aggregate”:true,”aggregateFunction”:”sum”,”globMode”:true}]
virtualDataPoints The virtual datapoints added to the widget, where each virtual datapoint needs a name (configuration name) and rpn (calculation that references a datapoint name). Note that virtual datapoints must be included in the pieChartItems object to be displayed in the widget. No JSON Object “virtualDataPoints”:[{“name”:”1″,”rpn”:”maxrtt + 1000″},{“name”:”2″,”rpn”:”maxrtt + 2000″},{“name”:”3″,”rpn”:”maxrtt +500″},{“name”:”4″,”rpn”:”maxrtt + 4000″},{“name”:”5″,”rpn”:”maxrtt + 100″}]
pieChartItems The datapoints and virtual datapoints that will be displayed in the pie chart

  • dataPointName (which should reference a dataPoint or virtualDataPoint config name)
  • legend
  • color: Auto | yellow | teal | silver | red | purple | orange | olive | navy | maroon | lime | green | gray | fuschia | blue | black | aqua
Yes JSON Object “pieChartItems”:[{“dataPointName”:”ExtendedStatusNotEnabled”,”legend”:”SA-EAST1″,”color”:”Auto”},{“dataPointName”:”1″,”legend”:”EU-CENTRAL1″,”color”:”Auto”}]

Service Individual Status Widget Properties

You may also include the following fields for widgets of type serviceIndividualStatus (service individual status widgets).

Property Description Required? Type Example
serviceId The id of the service that status is displayed for Yes Integer “serviceId”:21
locations The checkpoint locations for which data is displayed Yes JSON Object “locations”:[{“smgId”:1,”geoInfo”:”US – Los Angeles”,”selected”:true},{“smgId”:2,”geoInfo”:”US – Washington DC”,”selected”:true},{“smgId”:3,”geoInfo”:”US – San Francisco”,”selected”:true},{“smgId”:4,”geoInfo”:”Europe – Dublin”,”selected”:true},{“smgId”:5,”geoInfo”:”Asia – Singapore”,”selected”:true},{“smgId”:6,”geoInfo”:”Sydney – Australia”,”selected”:false}]

Service NOC Widget Properties

You may also include the following fields for widgets of type serviceNOC (service NOC widgets).

Property Description Required? Type Example
sortBy How NOC items are sorted. Options are name | severity. No. Defaults to name. String “sortBy”:”name”
displayColumn The maximum number of columns displayed in the NOC widget. No. Defaults to 2. Integer “displayColumn”:3
displayWarnAlert Whether or not warning alerts are displayed in the NOC widget No. Defaults to true. Boolean “displayWarnAlert”:true
displayErrorAlert Whether or not error alerts are displayed in the NOC widget No. Defaults to true. Boolean “displayErrorAlert”:true
displayCriticalAlert Whether or not critical alerts are displayed in the NOC widget No. Defaults to true. Boolean “displayCriticalAlert”:true
ackChecked Whether or not acknowledgements are displayed in the NOC widget No. Defaults to true. Boolean “ackChecked”:true
sdtChecked Whether or not SDTs are displayed in the NOC widget No. Defaults to true. Boolean “sdtChecked”:true
items The NOC items Yes JSON Object “items”:[{“serviceGroupName”:”Production”,”serviceName”:”*”,”groupBy”:”service”,”name”:”##SERVICE##”},{“serviceGroupName”:”Internal Services”,”serviceName”:”*”,”groupBy”:”service”,”name”:”##SERVICE##”}

Service Overall Status Widget Properties

For widgets of type serviceOverallStatus (service overall status widgets) you must include an object selectedServices with the following fields:

Property Description Required? Type Example
serviceGroupId The id of the service group. Yes JSON Object “serviceGroupId”:1
chooseAll Whether or not all services in the group should be included. No. Defaults to false. JSON Object “chooseAll”:false
services The services that should be displayed in the widget, where each service needs to include name and id Yes, unless chooseAll=false. JSON Object “services”:[{“id”:21,”name”:”main page”},{“id”:22,”name”:”a record (ELB)”}]

Service SLA Widget Properties  

You can additionally include the following fields for widgets of type serviceSLA (service SLA widgets).

Property Description Required? Type Example
items The services that should be used to compute the SLA, where each service should include serviceGroup and service Yes JSON Object “items”:[{“serviceGroup”:”Production”,”service”:”*”},{“serviceGroup”:”Internal Services”,”service”:”*”}]

Device SLA Widget Properties  

You can additionally PUT the following fields for widgets of type deviceSLA (device SLA widgets).

Property Description Required? Type Example
metrics The metrics (datapoints) that should be used to compute the SLA, where each service should include groupName (can be *), deviceName (can be *), dataSourceId or dataSourceFullName, instances (can be *), metric (datapoint), threshold, and exclusionSDTType (empty string means SDT periods will not be excluded, “group” means SDT periods at the device group level will be excluded, and “device” means SDT periods at the device level will be excluded) Yes JSON Object “metrics”:[{“groupName”:”*”,”deviceName”:”*”,”dataSourceFullName”:”EC2 (AWS_EC2)”,”instances”:”*”,”metric”:”CPUUtilization”,”threshold”:”< 1″}]
daysInWeek The days that SLA should be computed for, separated by commas. 1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday, 7=Saturday. No. Defaults to “*” String “daysInWeek”:”1,2,3,4,5,6,7″
periodInOneDay The period during the selected days that the SLA should be computed for. * = all day, or a time range can be specified in the format of “hh:mm TO hh:mm”, e.g. “01:15 TO 17:15”. No. Defaults to “*”. String “periodInOneDay”:”08:00 TO 12:00″
unmonitoredTimeType How no data should be treated: 0 = unmonitored time will be ignored & subtracted from the total possible time, 1 = unmonitored time will be subtracted from uptime and counted as a violation, 2 = unmonitored time will be added to uptime and counted as available. No. Defaults to 0. Integer “unmonitoredTimeType”:0
displayType Whether or not selected metrics should be combined into one number (displayType:0) or should be displayed individually, up to four metrics (displayType:1). No. Defaults to 0. Integer “displayType”:0
bottomLabel The services that should be used to compute the SLA, where each service should include serviceGroup and service No. Defaults to String “bottomLabel”:”Time Available”

Service Graph Widget (graphs pinned from the services tab) Properties

You can additionally include the following fields for widgets of type sgraph (graph pinned from the services page).

Property Description Required? Type Example
serviceCheckpointId The id of the checkpoint this graph is associated with Yes Integer “serviceCheckpointId”:99
graph The name of the graph that was added as a widget Yes String “graph”:”responseTime”
serviceName The name of the service this graph is associated with Yes String “serviceName”:”CName_check”

Table Widget Properties

All widgets of type table (table widgets) must include two additional objects. A ‘columns’ object must be included, where each column has the following fields.

Property Description Type Required?
columnName The name for the column String Yes
dataPoint The DataSource and DataPoint that are selected for the column JSON Object Yes
alternateDataPoints Any alternate DataSource and DataPoint combinations that should be selected for the column JSON Object No
enableForecast Whether or not forecasting is enabled Boolean No
roundingDecimal The number of decimal points to round the value to. Options are 0, 1 and 2. Integer No
rpn The expression in this field will be performed on the datapoint. The Column name should be referenced as the datapoint. String No

And a ‘rows’ object must be included, where each row has the following fields.

Property Description Type Required?
label The label for the row String Yes
groupId The ID of the group selected for the row Integer One of groupId and groupFullPath are required
groupFullPath The full path of the group selected for the row String One of groupId and groupFullPath are required
deviceId The id of the device selected for the row Integer Yes
deviceDisplayName The display name of the device selected for the row String No
instances The instances for each column of the row. You must include instanceId and dataPointId for each column in the row. JSON Object Yes

And a ‘forecast’ object must be included if enableForecast=true, where the following fields are needed.

Property Description Type Example
timeRange The training data time range (the data on which forecasting is calculated). Options are Last 7 days, Last 14 days, Last 30 days, Last calendar month, Last 365 days or a custom time range String “timeRange”:”Last 7 days”
severity The minimum alert severity the forecasting should include, one of warn | error | critical String “severity”:”warn”
confidence The percent confidence that should be required for a forecasted alert. Integer “confidence”:90

Text Widget Properties

All widgets of type text (text widgets) must include a content field.

Property Description Type Required?
content The html content that the text widget should display String Yes

Examples

The following examples illustrate updating various widgets to an account api.logicmonitor.com via Python:

Example: Alert Widget

The following Python Script updated alert widget 540 on dashboard 26 in 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 ='PUT'
resourcePath = '/dashboard/widgets/540'
data = '{"name":"Website Alert Widget","dashboardId":26,"type":"alert","filters":{"group":"US - LA/Website*","cleared":"all"}}'

#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()

# 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

Example: BatchJob Widget

The following Python script updates widget 485 on dashboard 26 in 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 ='PUT'
resourcePath = '/dashboard/widgets/485'
data = '{"type":"batchjob","dashboardId":"26","name":"My Batch Job Widget","deviceDisplayName":"10.36.11.240","batchJobName":"myBatchJob"}'

#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()

# 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

Example: Big Number Widget

The following Python script updates widget 308 in 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 ='PUT'
resourcePath = '/dashboard/widgets/308'
data = '{"type":"bigNumber","dashboardId":"26","name":"DiskReadBps,"bigNumberInfo":{"dataPoints":[{"deviceGroupFullPath":"Website","deviceDisplayName":"AP-NE1:QA Develop (test01)_i-0fa41a680e9ea1d72","dataSourceId":648,"instanceName":"AWS_EC2","dataPointName":"DiskReadBps","name":"CPUBusyPercent"}],"bigNumberItems":[{"dataPointName":"CPUBusyPercent","rounding":"0"}]}}'

#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()

# 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

Example: Device NOC Widget

The following Python script updates widget 486 in 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 ='PUT'
resourcePath = '/dashboard/widgets/486'
data = '{"type":"deviceNOC","dashboardId":"26","name":"Device NOC Widget","items":[{"deviceGroupFullPath":"*","deviceDisplayName":"ip-172-31-73-214.us-west-2.compute.internal","dataSourceDisplayName":"HTTP-","instanceName":"*","dataPointName":"*","groupBy":"device","name":"##HOSTNAME## - HTTP content/function"},{"deviceGroupFullPath":"*","deviceDisplayName":"ip-172-31-73-214.us-west-2.compute.internal","dataSourceDisplayName":"Apache-","instanceName":"*","dataPointName":"*","groupBy":"device","name":"##HOSTNAME## - Apache"}]}'

#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()

# 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

Example: Gauge Widget

The following Python script updates widget 487 in 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 ='PUT'
resourcePath = '/dashboard/widgets/487'
data = '{"type":"gauge","dashboardId":"26","name":"Gauge Widget","maxValue":100,"minValue":0,"dataPoint":{"deviceGroupFullPath":"*","deviceDisplayName":"ip-172-31-33-214.us-west-2.compute.internal","dataSourceFullName":"Apache-","instanceName":"*","dataPointName":"BusyWorkers"}}'

#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()

# 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

Example: Google Map Widget

The following Python script updates widget 488 in 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 ='PUT'
resourcePath = '/dashboard/widgets/488'
data = '{"type":"gmap","dashboardId":"26","name":"My Google Map Widget","mapPoints":[{"type":"group","deviceGroupFullPath":"US - LA/Website"}]}'

#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()

# 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

Example: HTML Widget

The following Python script updates widget 489 in 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 ='PUT'
resourcePath = '/dashboard/widgets/489'
data = '{"type":"html","dashboardId":"26","name":"My HTML widget","resources":[{"type":"iframe","URL":"<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/s6Ax30Mz7uo\" frameborder=\"0\" allowfullscreen></iframe>'"}]}'

#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()

# 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

Example: Device Graph Widget (pinned from the devices page)

The following Python script updates widget 490 in 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 ='PUT'
resourcePath = '/dashboard/widgets/490'
data = '{"type":"ngraph","dashboardId":"26","name":"NGRAPH WIDGET","hId":39,"dsiId":852,"graphId":2142}'

#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()

# 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

Example: Pie Chart Widget

The following Python script updates widget 491 in 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 ='PUT'
resourcePath = '/dashboard/widgets/491'
data = '{"type":"pieChart","dashboardId":"26","pieChartInfo":{"title":"anything","dataPoints":[{"deviceGroupFullPath":"Website","deviceDisplayName":"*","dataSourceFullName":"Apache-","instanceName":"Apache-80","dataPointName":"ExtendedStatusNotEnabled","name":"ExtendedStatusNotEnabled","aggregate":true,"aggregateFunction":"sum"}],"pieChartItems":[{"dataPointName":"ExtendedStatusNotEnabled","legend":"##HOSTNAME##_##DATASOURCENAME##_##INSTANCE##","color":"Auto"}]},"name":"MY PIE CHART WIDGET"}'

#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()

# 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

Example: Service Individual Status Widget

The following Python script updates widget 492 in 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 ='PUT'
resourcePath = '/dashboard/widgets/492'
data = '{"type":"serviceIndividualStatus","dashboardId":"26","name":"SERVICE INDIVIDUAL WIDGET","serviceId":21,"locations":[{"smgId":1,"geoInfo":"US - Los Angeles","selected":true},{"smgId":2,"geoInfo":"US - Washington DC","selected":true},{"smgId":3,"geoInfo":"US - San Francisco","selected":true},{"smgId":4,"geoInfo":"Europe - Dublin","selected":true},{"smgId":5,"geoInfo":"Asia - Singapore","selected":true},{"smgId":6,"geoInfo":"Sydney - Australia","selected":false}]}'

#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()

# 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

Example: Service NOC Widget

The following Python script updates widget 493 in 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 ='PUT'
resourcePath = '/dashboard/widgets/493'
data = '{"type":"serviceNOC","dashboardId":"26","name":"Service NOC Widget","items":[{"serviceGroupName":"Production","serviceName":"*","groupBy":"service","name":"##SERVICE##"},{"serviceGroupName":"Internal Services","serviceName":"*","groupBy":"service","name":"##SERVICE##"}]}'

#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()

# 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

Example: Service Overall Status Widget

The following Python script updates widget 494 in 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 ='PUT'
resourcePath = '/dashboard/widgets/494'
data = '{"type":"serviceOverallStatus","dashboardId":"26","name":"Service Overall Status","selectedServices":[{"serviceGroupId":1,"chooseAll":true},{"serviceGroupId":1,"chooseAll":false,"services":[{"id":21,"name":"main page"},{"id":22,"name":"a record (ELB)"}]}]}'

#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()

# 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

Example: Service SLA Widget

The following Python script updates widget 495 in 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 ='PUT'
resourcePath = '/dashboard/widgets/495'
data = '{"type":"serviceSLA","dashboardId":"26","name":"Service SLA Widget","items":[{"serviceGroup":"Production","service":"*"},{"serviceGroup":"Internal Services","service":"*"}]}'

#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()

# 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

Example: Service Graph Widget (pinned from the services page)

The following Python script updates widget 496 in 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 ='PUT'
resourcePath = '/dashboard/widgets/496'
data = '{"type":"sgraph","dashboardId":"26","name":"Service Graph Widget","serviceName":"CName_check","serviceCheckpointId":99,"graph":"responseTime"}'

#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()

# 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
In This Article