How to use the Web API tile
About Web API tiles
The Web API tile allows you to pull data from external APIs and display this data using a variety of visualizations.
What kinds of APIs are supported?
The Web API tile works with any REST API that returns JSON.
How do I connect to the API I want to use?
The connection details are not stored in the tile, but in the provider. You need to create a provider before you can use the Web API tile. Adding an API provider is a one-time configuration task to be carried out by a Dashboard Server administrator.
See How to add a Web API provider
How do I get data from the API into the tile?
The Web API tile supports GET
and POST
requests. For the format of those requests, you need to refer to the API documentation of the service you want to integrate with.
What license do I need to use the Web API tile?
A Connect edition license (or above) is required for this feature. To upgrade please contact sales@squaredup.com.
To check the license edition you are using see How to check which license key is being used . To see what is included in different product edition licenses see the Licensing Overview.
Should I use the Web API tile or one of the dedicated tiles?
For the most used APIs we now have dedicated tiles to make integration quicker and simpler:
If you want to display incidents or change requests from ServiceNow, How to use the ServiceNow tile For any other ServiceNow data, you need to use the Web API tile: | |
If there's no dedicated tile for the API you want to use, you can always use the Web API tile. Here are articles with examples about how to integrate with some popular APIs using the Web API tile:
How to use the Web API tile with Google APIs, such as Google Analytics | |
Further help for integrating with APIs:
Take a look at our Community Answers site, where there's a wealth of knowledge about APIs
If you're looking for some real-life examples of Dashboard Server dashboards, check out our GitHub Samples repository. You'll find dashboards built by the community as JSON exports you can use as templates for configuring your own dashboards.
How to configure a Web API tile
If you don't already have a provider for Web API tiles, you need to create one before you can configure your Web API tile (How to add a Web API provider).
Add a new tile to a dashboard
or perspective and choose the Web API tile.Choose the visualization for your Web API tile:
ScalarA single value such as a number of customers or incidents.
Example:
GridA table of data, for example incidents or tickets.
Tip: You can turn the individual rows into links in the settings. For example, if you're displaying tickets in your grid, you can link the rows to the ticket in your external ticket system.
Did you know? Since Dashboard Server 5.4 users can search the grid, and temporarily change the column size and sorting of the grid (by clicking on the column headers) without having to access the settings. They can also expand a row by clicking on the three dots at the end of each row if cells are too small to show their entire content.
Line GraphShows data over time, in a graph with an x-axis (time) and a y-axis. You can show several objects, such as servers, in one graph.
Example:
SparklinesShows data over time (like line graphs), but each item gets its own graph instead of showing all lines in one graph.
Example:
Bar GraphVisualizes both a number and the resulting bar width based on the number value.
Example:
DonutShows the results in a donut shape.
Example:
Status IconsShows the state of items as icons with different colors. You can display just the icons or together with a description. You can also use a background image and drag the icons into position on the image.
Example:
Status BlocksShows the state of items as blocks with different colors.
Example:
Scope:
The scope section is optional.
You can specify SCOM objects which can be used to insert an array of SCOM object properties into the search query.
Scope options on dashboardsTip: If you experience any problems with scoping tiles, you'll find FAQs and help in the article How to scope tiles.
List List allows you to select one or more objects or groups.
You can add multiple
objects and groups . To remove anobject or group click the x to the right of its name.Tip: Start typing and after two characters you'll see suggestions that match the name appear.
Tips for using wildcards when searching for objects or groupsBy default searching will look for the top 10 items containing the words listed in the search. If you wish to create a more specific search you will need to use wildcards (*).
If you place a wildcard after the term you are looking for, it will find all the objects which start with that word searched and any terms that may follow. If you place a wildcard at the start of the search term, it will look for objects that contain the searched word and also have terms before that word.
If you enclose your searched term in wildcards it will look for objects which contain the searched word, this object will not begin or end with the term searched.
Group Group allows you to select members of a specific group. Only one group can be selected.
Advanced Advanced allows you to select a group, class or both. You must at least define either a group or class. You can define both. You can also use criteria to narrow down your selection.
Group:
Same as the group option above.
Class:
Class equates to the target class within SCOM. As you type the dropdown will be populated with suggestions of matching classes from SCOM, from which you can select the required class.
Criteria:
Criteria allows you to create an expression to further refine the scope.
Examples for commonly used criteriaObjects you would like to see Criteria Objects with particular text in their name DisplayName like '%Server1%'
Objects starting with a particular string DisplayName like 'test%'
All objects in maintenance mode InMaintenanceMode = 'TRUE'
Only healthy objects HealthState = 1
Objects with a health state in SCOM of 0, an unknown health state (uninitialized), a gray health state icon with a question mark. HealthState = 0
Objects that are not healthy HealthState != 1
Objects in critical state HealthState = 3
Objects in critical or warning state HealthState = 2 or HealthState = 3
To show all gray uninitialised objects HealthState = 0 OR HealthState IS NULL
All objects not in maintenance mode InMaintenanceMode != 'TRUE'
Objects where the parent agent is offline IsAvailable='false'
Objects that are offline, in maintenance or state unknown IsAvailable='false' OR InMaintenanceMode=1 OR HealthState=0
Computers with a particular OS OSVersion = '6.3.9600'
List objects by name and filter by HealthState (Name like '%Server3%' OR Name like '%Server4%' OR Name like '%Server2%') AND HealthState=3
List objects by SCOM Id and filter by HealthState Id IN ('7021174b-9e5d-5fbf-878a-42b9f0bf6f4a', '9bd4a1cc-f07a-0e36-b37d-d9ee974e0f3c') AND HealthState=3
Exclude object from the Group specified DisplayName not like '%server3%'
Exclude objects from the Group specified (DisplayName NOT LIKE '%server3%') AND (DisplayName NOT LIKE '%server4%')
For more information see:
Scope options on perspectivesNote: If you never used a perspective, you should read Working with perspectives before scoping tiles on perspectives.
The power of perspectives is that tiles on a perspective can use a dynamic scope. A dynamic scope considers the currently viewed
object . A dynamic scope consists of two different states:the configuration of the scope in the tile (for example, "consider child objects of type logical disk for the currently viewed object")
the actual resolved scope that depends on which
object you are currently viewing ("this object has 5 child objects of type logical disk")
After configuring the dynamic scope once in the tile, you'll get different results depending how the scope is resolved on the different
objects you are viewing.Suggestions
Suggestions are generated based on the object you are currently viewing. You'll see a list of relevant scope options based on the object's relations to other objects. Suggestions don't cover every possible scope, but they are a quick and easy way to select a suitable scope for your tile.
Note: Suggestions won't be shown if an object has no children, parents or siblings.
Tip: If the exact scope you want isn't listed in the suggestions, you can select a suggested scope that is similar to the one you want, and then click on custom. The custom section will now automatically be filled with the suggestion you picked and you can edit the scope here to adjust it exactly to your needs. This is a more intuitive way to pick a scope than starting in the custom section and navigating the SCOM object model for classes and groups.
Double-check the scope when using suggestions: Using suggestions is an easy way to pick a scope, but you need to make sure that the generated suggestion is appropriate for all objects that use the perspective.
For example, when you pick a suggestion for an EA, you will get suggestions that are specific to the map, dependencies, and availability tests for this one EA. On perspectives you want to use for all EAs, you have to change the scope suggestion in the custom section so that the tile work for all EAs.Walkthrough: Editing a scope suggestion to make it work for all EAsEnterprise Applications are designed so that you can map out the servers that make up the application. You can then configure tiles to show information related to just the servers on the EA's map. When you create a perspective that will be used for all EAs, you need to make sure that you scope the tiles so that they work for any EA. When you start with a suggestion, the tile's scope only works for the one EA you're currently looking at, and this is why you need to edit the scope:
For an EA you want to scope to the servers that are specified on the EA map by selecting something from the suggestions (Dashboard Server 4.2 and above) that shows something similar to the following:
This /<YourApplicationName> Map / ... / Windows Computer
The above will scope the tile to all the objects of class Windows Computer on this EAs map.
The screenshot below shows some scope suggestions for an application called FinanceXS. The bold text shows the currently selected scope is This object. The cursor shows the option
This / FinanceXS / ... / Windows Computer
. Once chosen this scope will show all the Windows computers shown on the applications map.Next, we need to adjust the specified scope to allow it to work for all EAs, rather than just this one.
- In the scope section click custom.
Click on the text
<YourApplicationName> Map (children)
which is your first scope step. This will expand the scope step so you can edit it.Remove the auto-populated class
<YourApplicationName> Map
by clicking the cross x next to it.Start typing
Enterprise Application - Map
and select this from the list to add this class. This is so that this tile scope will work for all EAs, rather than just this one EA.- The scope is now configured to show all the Windows computers on the EA's map, whichever EA you happen to be viewing with the perspective.
How to read the suggestionsYou can pick between "this object" and objects that are related to this object as parents, children or siblings. The suggestions for children are written as paths that follow the SCOM object tree structure, parents and siblings can be identified by the word parent or sibling in the suggestion.
A parent of an object is any object that hosts or contains that object.
A child of an object is any object that this object hosts or contains.
A sibling of an object is any object of the same class that is hosted by the same parent.This object The dynamic scope will be resolved to the object currently viewed.
"this object" option which does NOT mean the actual one object like for the target setting but the relative object I'm looking at
This / child
/child
/class of object
The dynamic scope will be resolved to children of the object currently viewed.
You select objects of a particular class that are contained in path. The class of the objects you are selecting is stated at the end of the path.
This / * The dynamic scope will be resolved to children of the object currently viewed.
If a path ends with a wildcard (*) it means that you select all objects of any class within the path.
Technically it means that we fill the class field with the class "logical entity" since every object in SCOM has this class, it is a "base" class
Example:
This / IIS Web Server / *
selects all objects of any class in the level belowThis / IIS Web Server
.This / child
/ ... /class of object
The dynamic scope will be resolved to children of the object currently viewed.
If a path contains an ellipsis (...) it means that you select objects of a particular class that are contained in all of the objects that are contained in the path preceding the ellipsis. The class of the objects you are selecting is stated at the end of the path.
Example:
This / Sales App Map / ... / Windows Computer
selects all objects of the class Windows Computer in theThis / Sales App Map
path.Parent class of object
The dynamic scope will be resolved to parents of the object currently viewed. Sibling class of object
The dynamic scope will be resolved to siblings of the object currently viewed. Show more triangle next to a suggestion
You can click the show more triangle to expand the list of suggestions and see more specific paths.Example for navigating suggestions in an EAIf you are looking at an EA, the path to find all windows computers in that EA may read
Map / ... / Windows Computer
. It returns all objects of the Windows Computer class contained within all of the paths underMap
.To narrow the scope down, you can click on the triangle to expand the suggestion and select one of the more specific paths. If you select
Map / Web / Windows Computer
you will find all objects of the Windows Computer class in the pathMap / Web
.If you choose the option
Map / *
you'll find all objects contained in the map. If you extend this suggestion by clicking on the triangle, you'll see suggestions to select all objects in a more specific path, for exampleMap / Web / *
.Custom
Here you can pick objects that are related to the object you are currently looking at. If you want to create a specific scope that is not listed under suggestions, you can create the scope here.
Tip: You can pick a similar scope under suggestions first and then click on custom to edit it.
How to pick a simple relation (one step through the SCOM model)At the top, you'll see the name of the object you are currently looking at. Now you can choose if you want to pick parents or children of that object, and if this parent or child relation should be considered only one level up or down the SCOM model or through all levels.
Class:
Here you pick the class of the objects you want to select. If you leave this field empty, the scope falls back to the "this object" scope.
Note: You will only see groups and classes that the object you are currently looking at is a member of.
Tip: If you want to pick objects of any class, enter the SCOM base class logical entity in the class field.
Tip: If you want to find out what classes the object you are interested in belongs to, you can go to the Monitored Entity perspective of that object. You'll see all the classes the object belongs to listed there.
Criteria:
You can narrow the selection of objects of a particular class down further by entering criteria for those objects. For more help see How to use criteria when scoping objects.
Tip: If you want to find out what properties you can base your criteria on, you can go to the Monitored Entity perspective of the object you are interested in. You'll see all the properties for criteria listed there.
.
Example for picking a simple relationFor example, for a perspective created for the group IIS8 Computer Group adding a Status tile scoped to show children with a class of
object
will show the group members, i.e. the members of the IIS8 Computer Group.How to pick advanced relations (multiple steps through the SCOM model)If you need to traverse a more advanced SCOM object model like an EA, you can use the + button to add more steps. This creates a scope that can go through any kind of path of the SCOM object model.
Complete the following steps and then click the + button after you're done to add the next level of SCOM objects:
At the top, you'll see the name of the object you are currently looking at. Now you can choose if you want to pick parents or children of that object, and if this parent or child relation should be considered only one level up or down the SCOM model or through all levels.
Class:
Here you pick the class of the objects you want to select. If you leave this field empty, the scope falls back to the "this object" scope.
Note: You will only see groups and classes that the object you are currently looking at is a member of.
Tip: If you want to pick objects of any class, enter the SCOM base class logical entity in the class field.
Tip: If you want to find out what classes the object you are interested in belongs to, you can go to the Monitored Entity perspective of that object. You'll see all the classes the object belongs to listed there.
Criteria:
You can narrow the selection of objects of a particular class down further by entering criteria for those objects. For more help see How to use criteria when scoping objects.
Tip: If you want to find out what properties you can base your criteria on, you can go to the Monitored Entity perspective of the object you are interested in. You'll see all the properties for criteria listed there.
.
Other specific objects
Gives you the normal, non-dynamic scope options you are used to when scoping tiles on dashboards. This means the tile will not dynamically adapt it's content to the currently viewed
object , it will always show data for the staticobject picked here.Since the power of perspectives is that their tiles can show data for different
objects depending on whatobject is currently being viewed, you should only select this option when you are sure that there is no relationship between the desired scope and the currently viewedobject .Notes for selecting the scope for Status Icons or Blocks Which status is displayed depends on what you choose as a scope:
If you want to see the status of individual objects (for example, two individual servers), select multiple objects in the list section.
If you want to see the status of a group itself rather than the individual objects within the group, select a group in the list section.
If you want to see the status of each individual group member of a group, select a group in the group section.
If you want to see the health state of all groups, select the class "group" in the advanced section.
Provider:
Choose the provider you want to use for this tile.
You can use generic and dedicated integrations to create your own providers. Of course, a dedicated provider like ServiceNow will only work with the ServiceNow API.
HTTP mode:
Choose if you want to use a
GET
orPOST
request.URL:
This is the query URL. The query URL gets added to the URL you defined in the provider you are using for this tile.Example:
You want to queryhttps://myservice/customers/tickets
.
Your provider URL ishttps://myservice/
Your query URL needs to becustomers/tickets
Adding query parameters to your query URLThe easiest way to add query parameters to your query URL is using the data section in the Headers&Data panel. The parameters you enter there automatically get added to your query URL in the correct format.
If you want to add the query parameters manually here, you need to make sure you use the correct format to separate the query parameters from the query URL, for example
https://myservice/endpoint?filter=customers
Please refer to the API documentation of the API you are using to see which query parameters are supported and what values they can have.
Using the page timeframe as a query parameter
You can use the mustache picker to insert page timeframe variables.
Please refer to the API documentation of the API you are using to see what kind of time format is required as a value.
Available formats for inserting the page timeframe via the mustache pickerDynamic page timeframe formats
When you use page timeframe variables, the dynamic page timeframe will be inserted as a
string
in your search query, script, field, or wherever you use the variable.timeframe.isoDuration
Use this format when you want to insert the page timeframe according to the ISO standard for time ranges (period of time).
Example: When them page timeframe is set to "last 12 hours" the string
PT12H
is inserted.timeframe.isoStart
Use this format to insert a "from" time when you want the starting point to be "now minus page timeframe". The page timeframe will be inserted as a starting time according to the ISO 8601 standard.
Example: When the page timeframe is set to "last 12 hours" the starting time is "now minus 12 hours".
timeframe.isoEnd
Use this format to insert a "to" time when you need to specify the end time. The end time is always "now". The current time will be inserted according to the ISO 8601 standard.
timeframe.unixStart
Use this format to insert a "from" time when you want the starting point to be "now minus page timeframe". The page timeframe will be inserted as a starting time in milliseconds according to the UNIX standard.
Example: When the page timeframe is set to "last 12 hours", the starting time is "now minus 12 hours".
timeframe.unixEnd
Use this format to insert a "to" time when you need to specify the end time. The end time is always "now". The current time will be inserted in milliseconds according to the Unix standard. Math.floor(timeframe.UnixStart / 1000)
Use this format when you want to use the
unixStart
time but need to convert it from milliseconds to seconds.Math.floor(timeframe.UnixEnd / 1000)
Use this format when you want to use the unixEnd
time but need to convert it from milliseconds to seconds.Fixed timeframe formats (without using the dynamic page timeframe)
Date.now() - 86400 * 1000 *14
This is a template format to express the fixed timeframe "14 days ago" (now minus 14 days in milliseconds). You can use this template to create your own fixed timeframe.
How to read the parameters of the template:
Date.now()
= the current date and time (now) in milliseconds86400
= 24 hours in seconds1000
= converts the seconds into milliseconds14
= 14 daysIf you want to use a fixed timeframe in seconds, you need to convert the Date.now() into seconds, for example "4 days ago in seconds":
(Date.now() /1000) - 86400 * 4
.new Date().toISOString()
A text based representation of "now". Use this format if you want to insert the date as a string in ISO 8601 format, rather than leaving it as a date object. Example:
https://myservice/endpoint?duration={{timeframe.isoDuration}}
Using the scope as a query parameter
If you defined a scope, you can use the mustache picker to insert values that refer only to the defined scope.
Values that refer to the defined scope carry the prefix
scope.
before the value. For example, you can use the value{{scope[0].displayName}}
for the name of the first item in your scope. You can manipulate the values with javascript syntax. For example, if you want to insert a quoted comma separated list of displayNames from every item in the scope, you can use{{scope.map(item => '"'+item.displayName+'"').join(',')}}
.Example:
https://myservice/endpoint?filter={{scope.displayName}}
Note:
By default, only Dashboard Server administrators
(Types of users in Dashboard Server) can create and edit Web API queries in the Web API tile.To delegate permissions to other users see Signing and security for sensitive tiles. Headers & Data:
Headers:
The HTTP header. Here you can enter properties for authentication or specify that the content type of the return data needs to be JSON. Please refer to the API documentation of the API you are using to see what properties are supported.Data:
If you are using a
GET
request:
Here you can add query string parameters to your query string.If you are using a
POST
request:Here you can add additional data to the request body of your query. You can send query string parameters as a
form
, and other data in the content typejson
,xml
, ortext
.Please refer to the API documentation of the API you are using to see what parameters and content types are supported.
Using the page timeframe in headers or dataYou can use the mustache picker to insert page timeframe variables.
Please refer to the API documentation of the API you are using to see what kind of time format is required as a value.
Available formats for inserting the page timeframe via the mustache pickerDynamic page timeframe formats
When you use page timeframe variables, the dynamic page timeframe will be inserted as a
string
in your search query, script, field, or wherever you use the variable.timeframe.isoDuration
Use this format when you want to insert the page timeframe according to the ISO standard for time ranges (period of time).
Example: When them page timeframe is set to "last 12 hours" the string
PT12H
is inserted.timeframe.isoStart
Use this format to insert a "from" time when you want the starting point to be "now minus page timeframe". The page timeframe will be inserted as a starting time according to the ISO 8601 standard.
Example: When the page timeframe is set to "last 12 hours" the starting time is "now minus 12 hours".
timeframe.isoEnd
Use this format to insert a "to" time when you need to specify the end time. The end time is always "now". The current time will be inserted according to the ISO 8601 standard.
timeframe.unixStart
Use this format to insert a "from" time when you want the starting point to be "now minus page timeframe". The page timeframe will be inserted as a starting time in milliseconds according to the UNIX standard.
Example: When the page timeframe is set to "last 12 hours", the starting time is "now minus 12 hours".
timeframe.unixEnd
Use this format to insert a "to" time when you need to specify the end time. The end time is always "now". The current time will be inserted in milliseconds according to the Unix standard. Math.floor(timeframe.UnixStart / 1000)
Use this format when you want to use the
unixStart
time but need to convert it from milliseconds to seconds.Math.floor(timeframe.UnixEnd / 1000)
Use this format when you want to use the unixEnd
time but need to convert it from milliseconds to seconds.Fixed timeframe formats (without using the dynamic page timeframe)
Date.now() - 86400 * 1000 *14
This is a template format to express the fixed timeframe "14 days ago" (now minus 14 days in milliseconds). You can use this template to create your own fixed timeframe.
How to read the parameters of the template:
Date.now()
= the current date and time (now) in milliseconds86400
= 24 hours in seconds1000
= converts the seconds into milliseconds14
= 14 daysIf you want to use a fixed timeframe in seconds, you need to convert the Date.now() into seconds, for example "4 days ago in seconds":
(Date.now() /1000) - 86400 * 4
.new Date().toISOString()
A text based representation of "now". Use this format if you want to insert the date as a string in ISO 8601 format, rather than leaving it as a date object. Example for using the page timeframe as a query parameter:
You want the results of your query to adapt to the page timeframe. The API supports the
from
query parameter, so you can use it to select results starting from whatever page timeframe is currently set. You want to query an API which uses milliseconds to denote a time range. This means you can use theunixStart
page timeframe format.Data
Name:
from
value:
{{timeframe.unixStart}}
Example for using the page timeframe in the request body:
You want your
POST
request to create a table of sales data that adapts to the page timeframe, because you want to see closed and won opportunities within the time period of the currently set page timeframe. The API for your CRM system supports plain text request bodies and ISO-format date strings, which means you can use theisoStart
page timeframe format to filter out opportunities that are older than the currently set page timeframe.Content type:
text
Body:
CopySelect Name, Amount, CLoseDate
FROM Opportunity
WHERE StageName = 'Closed Won' AND CloseDate > {{timeframe.isoStart}}Using the scope in headers or dataIf you defined a scope, you can use the mustache picker to insert values that refer only to the defined scope.
Values that refer to the defined scope carry the prefix
scope.
before the value. For example, you can use the value{{scope[0].displayName}}
for the name of the first item in your scope. You can manipulate the values with javascript syntax. For example, if you want to insert a quoted comma separated list of displayNames from every item in the scope, you can use{{scope.map(item => '"'+item.displayName+'"').join(',')}}
.Note:
By default, only Dashboard Server administrators
(Types of users in Dashboard Server) can create and edit Web API queries in the Web API tile.To delegate permissions to other users see Signing and security for sensitive tiles. Response Data:
This is where you enter the location of the results set that is returned. The response data box shows you a preview of the data returned, so you can check the location of the data returned, and use that in the key path.
Configure the settings for your visualization:
Settings for ScalarsScalar
Font size Allows you to set the font size of the value in the tile.
Unit Allows you to add a unit to the value displayed in the Scalar tile. For example, if your value shows a time in milliseconds, you can enter "ms" or if your value shows pageviews, you can enter "pageviews".
Value formatter Allows you to format the value by using the mustache picker. For example, you can round the value up or down or convert it.
Conditional formatting:
You can display the scalar in different colors based on conditions you defined here. For example, you can display the scalar in green when the value is below 100 and in red when it is above 100.
Click on add to configure a condition.
Click on select color.... to open the color picker. Select the color for this condition.
Enter your condition in the field next to the color. You can use the
value
property and manipulate it with JavaScript String and Regex APIs. When you click on the mustache picker, you'll get some examples:Value is greater than something, less than something, etc.
For example:
{{value < 10}}
(The color you picked will be used if the value is less than 10)Value is present in the result
For example:
value.IndexOf('error') != -1
(The color you picked will be used if the string value "error" is present in the results)Value matches one of the regular expressions you defined
For example:
value.match(/healthy|good|up/)
(The color you picked will be used if the string values arehealthy
,good
, orup
)
Display:
Here you decide how the color is used:
Tile background Highlight the tile in the color you defined. Text foreground
Display the text in the color you defined. Link options
Allows you to turn the graph item(s) into links. You can either enter plain text to create a fixed link (URL always stays the same) or use dynamic properties to create a dynamic link.
Dynamic links make use of dynamic properties which are inserted as part of the URL. This creates a template URL that will be resolved to an actual URL based on the items properties.
For example, if you want to link to tickets in your ticket system and the format of the URL for tickets in your system is
https://www.my-system/ticket-123
, where123
is the ticket ID, you can use the dynamic property that contains the ticket ID and enter the dynamic URLhttps://www.my-system/ticket-{{ticketID}}
.For scalars, you can only use the dynamic property
value
in dynamic links, which means the link changes when the value of the scalar changes. Since a scalar is just one item, it would also make sense to use a fixed link, for example the link to the website of which you are displaying the response time.For status icon or bars and the rows of a grid, you usually want to use a dynamic link since you get multiple items or rows that represent different things. You can use any of the dynamic properties the mustache picker offers you.
Examples for URLs with dynamic properties for popular APIsDynamic mustache properties and values you need to change according to your instance are highlighted in bold.
ServiceNow incidents:
https://<your-instance>.service-now.com/nav_to.do?uri=%2Fincident.do%3Fsys_id%3D{{sys_id}}
PagerDuty incidents:
{{incident.html_url}}
Azure DevOps projects:
https://dev.azure.com/<your-instance>/{{name}}
Azure DevOps builds:
https://dev.azure.com/<your-instance>/_build/results?buildId={{id}}
Zendesk tickets:
https://<your-instance>.zendesk.com/agent/tickets/{{id}}
Azure Application Insights
https://portal.azure.com/#@squaredup.net/resource/{{ResourceId}}
Settings for GridsGrid columns
Grid columns opens the grid designer, where you can show or hide columns, change the order of columns, edit column names or add custom columns.
Important note if you are using properties with hyphens for grid columnsProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Grid options
Row link Allows you to turn the graph item(s) into links. You can either enter plain text to create a fixed link (URL always stays the same) or use dynamic properties to create a dynamic link.
Dynamic links make use of dynamic properties which are inserted as part of the URL. This creates a template URL that will be resolved to an actual URL based on the items properties.
For example, if you want to link to tickets in your ticket system and the format of the URL for tickets in your system is
https://www.my-system/ticket-123
, where123
is the ticket ID, you can use the dynamic property that contains the ticket ID and enter the dynamic URLhttps://www.my-system/ticket-{{ticketID}}
.For scalars, you can only use the dynamic property
value
in dynamic links, which means the link changes when the value of the scalar changes. Since a scalar is just one item, it would also make sense to use a fixed link, for example the link to the website of which you are displaying the response time.For status icon or bars and the rows of a grid, you usually want to use a dynamic link since you get multiple items or rows that represent different things. You can use any of the dynamic properties the mustache picker offers you.
Examples for URLs with dynamic properties for popular APIsDynamic mustache properties and values you need to change according to your instance are highlighted in bold.
ServiceNow incidents:
https://<your-instance>.service-now.com/nav_to.do?uri=%2Fincident.do%3Fsys_id%3D{{sys_id}}
PagerDuty incidents:
{{incident.html_url}}
Azure DevOps projects:
https://dev.azure.com/<your-instance>/{{name}}
Azure DevOps builds:
https://dev.azure.com/<your-instance>/_build/results?buildId={{id}}
Zendesk tickets:
https://<your-instance>.zendesk.com/agent/tickets/{{id}}
Azure Application Insights
https://portal.azure.com/#@squaredup.net/resource/{{ResourceId}}
Important note if you are using properties with hyphens for row linksProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Show column headers You can choose between showing or hiding the header for all columns.
Expand rows automatically Activate this checkbox if you want the row height to expand automatically based on the row content, for example if your grid uses increased text size, images, emojis etc.
Limit number of results displayed You can set a limit of the initial number of results displayed in the grid. If you have set a limit and there are more results to display, users will see a "show all" button below the grid.
Font size Use the slider to adjust the font size.
Tip for column sizing: You can change the column width directly in the grid by clicking on the divider lines between columns and dragging them to the width you want. You need to show column headers (by activating the show column headers check box) to be able to change the column width.
Resizing columns while in edit mode affects how the grid looks by default when users open the dashboard. Users can temporarily change the column sizes by dragging them, but those changes only last until they leave the page.Settings for Line GraphsData mapping
Important note if you are using properties with hyphens in the data mapping panelProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
grouping Here you can define a group to take a closer look at the graph's value(s). Each item in the group will create its own series (a line in a line graph, a bar in a bar graph etc.). For example, if you group the value response time by servers on a line graph, you'll see one line per server, each line showing you the response time for this one server over time.
To enter your grouping, you have to find the property that contains it. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the grouping you want your graph to show.
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: If your grouping needs more than one property, you can combine multiple properties. For example, if you want to see the disk space on the c: drive of different computers, your grouping needs to be c: drive and computer. You can combine them in one mustache
{{PropertyForComputer + PropertyForC:Drive}}
or keep them in separate mustaches{{PropertyForComputer} {PropertyForC:Drive}}
.timestamp
Here you define the time series for the x-axis of the graph.
To enter your timestamp, you have to find that property that contains it. You can use the mustache picker to see every property from the response data. Pick the property that contains the timestamp you want the graph to use.
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: Timestamps that are supported are Unix timestamp in milliseconds or ISO 8601 date format. If the returned timestamp is in seconds rather than milliseconds, you need to convert it into milliseconds (for example,
{{starttime*1000}}
).metrics
Here you define which value the graph will show. For example, if you want to see the response time of different servers, your metric value would be response time. If you want to see the number of tickets, your metric value would be number (of tickets).
To enter your metric value, you have to find the property that contains that value. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the value you want your graph to show
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: The metric value must be a numeric object. If an API returns values as strings, you can convert them from a string to a numeric object with the
parseFloat()
function.Info: You can manipulate the value by adding operators to add, substract, divide or multiply. You can pick additonal properties from the response data or insert plain text for those functions. For example, if you want to multiply two properties you can do that by entering
{{PropertyForMetricValue*PropertyForOtherMetricValue2}}
. If you want to change Kb in Gb you can divide the value by 1024:{{PropertyForMetricValue/1024}}
. You can also use more elaborate functions according to JavaScript syntax.Extract multiple metrics:
If you want to see more than one value, you can tick the "Extract multiple metrics" checkbox. You can manipulate those metrics exactly like the first metric you chose. The metrics won't affect each other, they are all treated as separate metrics. Each value will get its own series (a line in a line graph, a bar in a bar graph etc.).
Top N
Here you can define a limit for the number of results you want to see. Activate the limit number of results displayed checkbox to enter a limit for results. You can choose if this limit should be applied from the top ranking results down (ascending, default option) or from the bottom ranking results up (descending).
Data range
The Data Range option allows you to choose the range of data the graph will display. For line graphs, this means the data on the y-axis.
percentage Shows 0 to 100 fit to data Shows the data minimum to data maximum fit to data (from zero) Shows from 0 to the data maximum custom Allows you to specify the min and max custom fit Allows you to specify the min and max limits, so that data outside your settings will not be shown. If all the data falls within your specified ranges then the y-axis range will fit to the data rather than your caps.
Display
Height: Allows you to set the height of the tile with a slider.
Label
Allows you to change the label of the results.
Show legend:
Allows you to show or hide the legend of the graph.
Label:
auto Choose this option if you want to use the default label that has been created automatically.
custom
Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Settings for SparklinesData mapping
Important note if you are using properties with hyphens in the data mapping panelProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
grouping Here you can define a group to take a closer look at the graph's value(s). Each item in the group will create its own series (a line in a line graph, a bar in a bar graph etc.). For example, if you group the value response time by servers on a line graph, you'll see one line per server, each line showing you the response time for this one server over time.
To enter your grouping, you have to find the property that contains it. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the grouping you want your graph to show.
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: If your grouping needs more than one property, you can combine multiple properties. For example, if you want to see the disk space on the c: drive of different computers, your grouping needs to be c: drive and computer. You can combine them in one mustache
{{PropertyForComputer + PropertyForC:Drive}}
or keep them in separate mustaches{{PropertyForComputer} {PropertyForC:Drive}}
.timestamp
Here you define the time series for the x-axis of the graph.
To enter your timestamp, you have to find that property that contains it. You can use the mustache picker to see every property from the response data. Pick the property that contains the timestamp you want the graph to use.
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: Timestamps that are supported are Unix timestamp in milliseconds or ISO 8601 date format. If the returned timestamp is in seconds rather than milliseconds, you need to convert it into milliseconds (for example,
{{starttime*1000}}
).metrics
Here you define which value the graph will show. For example, if you want to see the response time of different servers, your metric value would be response time. If you want to see the number of tickets, your metric value would be number (of tickets).
To enter your metric value, you have to find the property that contains that value. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the value you want your graph to show
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: The metric value must be a numeric object. If an API returns values as strings, you can convert them from a string to a numeric object with the
parseFloat()
function.Info: You can manipulate the value by adding operators to add, substract, divide or multiply. You can pick additonal properties from the response data or insert plain text for those functions. For example, if you want to multiply two properties you can do that by entering
{{PropertyForMetricValue*PropertyForOtherMetricValue2}}
. If you want to change Kb in Gb you can divide the value by 1024:{{PropertyForMetricValue/1024}}
. You can also use more elaborate functions according to JavaScript syntax.Extract multiple metrics:
If you want to see more than one value, you can tick the "Extract multiple metrics" checkbox. You can manipulate those metrics exactly like the first metric you chose. The metrics won't affect each other, they are all treated as separate metrics. Each value will get its own series (a line in a line graph, a bar in a bar graph etc.).
Data Range
The Data Range option allows you to choose the range of data the graph will display. For line graphs, this means the data on the y-axis.
percentage Shows 0 to 100 fit to data Shows the data minimum to data maximum fit to data (from zero) Shows from 0 to the data maximum custom Allows you to specify the min and max custom fit Allows you to specify the min and max limits, so that data outside your settings will not be shown. If all the data falls within your specified ranges then the y-axis range will fit to the data rather than your caps.
Sort
Sort allows you to change the order of the results displayed. You can sort by value (ascending or descending) or label (alphabetically ascending or descending).
Label
Allows you to change the label of the results.
auto Choose this option if you want to use the default label that has been created automatically.
custom
Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Settings for Bar GraphsData mapping
Important note if you are using properties with hyphens in the data mapping panelProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
data aggregation Here you can aggregate the results of the return data.
none: No aggregation, use raw data (for example, when the data provided by the API has already been aggregated in some way due to the type of request).
count: Count how many results are returned (for example, when you return a list of unavailable servers, you can count the results to show how many servers are unavailable).
sum: Show the sum of all results (for example, your return data is a list of tickets in various states and you want to know how many tickets there are in total). For sum, you need numeric values. If your return data contains strings, you need to convert them into a numeric value.
grouping
Here you can define a group to take a closer look at the graph's value(s). Each item in the group will create its own series (a line in a line graph, a bar in a bar graph etc.). For example, if you group the value response time by servers on a line graph, you'll see one line per server, each line showing you the response time for this one server over time.
To enter your grouping, you have to find the property that contains it. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the grouping you want your graph to show.
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: If your grouping needs more than one property, you can combine multiple properties. For example, if you want to see the disk space on the c: drive of different computers, your grouping needs to be c: drive and computer. You can combine them in one mustache
{{PropertyForComputer + PropertyForC:Drive}}
or keep them in separate mustaches{{PropertyForComputer} {PropertyForC:Drive}}
.metrics
Here you define which value the graph will show. For example, if you want to see the response time of different servers, your metric value would be response time. If you want to see the number of tickets, your metric value would be number (of tickets).
To enter your metric value, you have to find the property that contains that value. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the value you want your graph to show
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: The metric value must be a numeric object. If an API returns values as strings, you can convert them from a string to a numeric object with the
parseFloat()
function.Info: You can manipulate the value by adding operators to add, substract, divide or multiply. You can pick additonal properties from the response data or insert plain text for those functions. For example, if you want to multiply two properties you can do that by entering
{{PropertyForMetricValue*PropertyForOtherMetricValue2}}
. If you want to change Kb in Gb you can divide the value by 1024:{{PropertyForMetricValue/1024}}
. You can also use more elaborate functions according to JavaScript syntax.Extract multiple metrics:
If you want to see more than one value, you can tick the "Extract multiple metrics" checkbox. You can manipulate those metrics exactly like the first metric you chose. The metrics won't affect each other, they are all treated as separate metrics. Each value will get its own series (a line in a line graph, a bar in a bar graph etc.).
Data Range
The Data Range option allows you to choose the range of data the graph will display. For line graphs, this means the data on the y-axis.
percentage Shows 0 to 100 fit to data Shows the data minimum to data maximum fit to data (from zero) Shows from 0 to the data maximum custom Allows you to specify the min and max custom fit Allows you to specify the min and max limits, so that data outside your settings will not be shown. If all the data falls within your specified ranges then the y-axis range will fit to the data rather than your caps.
Sort
Sort allows you to change the order of the results displayed. You can sort by value (ascending or descending) or label (alphabetically ascending or descending).
Label
Allows you to change the label of the results.
auto Choose this option if you want to use the default label that has been created automatically.
custom
Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Color
Here you can enable or disable graph color matching.
Settings for DonutsData mapping
Important note if you are using properties with hyphens in the data mapping panelProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
data aggregation Here you can aggregate the results of the return data.
none: No aggregation, use raw data (for example, when the data provided by the API has already been aggregated in some way due to the type of request).
count: Count how many results are returned (for example, when you return a list of unavailable servers, you can count the results to show how many servers are unavailable).
sum: Show the sum of all results (for example, your return data is a list of tickets in various states and you want to know how many tickets there are in total). For sum, you need numeric values. If your return data contains strings, you need to convert them into a numeric value.
grouping
Here you can define a group to take a closer look at the graph's value(s). Each item in the group will create its own series (a line in a line graph, a bar in a bar graph etc.). For example, if you group the value response time by servers on a line graph, you'll see one line per server, each line showing you the response time for this one server over time.
To enter your grouping, you have to find the property that contains it. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the grouping you want your graph to show.
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: If your grouping needs more than one property, you can combine multiple properties. For example, if you want to see the disk space on the c: drive of different computers, your grouping needs to be c: drive and computer. You can combine them in one mustache
{{PropertyForComputer + PropertyForC:Drive}}
or keep them in separate mustaches{{PropertyForComputer} {PropertyForC:Drive}}
.metrics
Here you define which value the graph will show. For example, if you want to see the response time of different servers, your metric value would be response time. If you want to see the number of tickets, your metric value would be number (of tickets).
To enter your metric value, you have to find the property that contains that value. You can use the mustache picker to see every property returned from the response data. Pick the property that contains the value you want your graph to show
Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Note: The metric value must be a numeric object. If an API returns values as strings, you can convert them from a string to a numeric object with the
parseFloat()
function.Info: You can manipulate the value by adding operators to add, substract, divide or multiply. You can pick additonal properties from the response data or insert plain text for those functions. For example, if you want to multiply two properties you can do that by entering
{{PropertyForMetricValue*PropertyForOtherMetricValue2}}
. If you want to change Kb in Gb you can divide the value by 1024:{{PropertyForMetricValue/1024}}
. You can also use more elaborate functions according to JavaScript syntax.Extract multiple metrics:
If you want to see more than one value, you can tick the "Extract multiple metrics" checkbox. You can manipulate those metrics exactly like the first metric you chose. The metrics won't affect each other, they are all treated as separate metrics. Each value will get its own series (a line in a line graph, a bar in a bar graph etc.).
Sort
Sort allows you to change the order of the results displayed. You can sort by value (ascending or descending) or label (alphabetically ascending or descending).
Display
Size mode:
Default Displays the donut scaled to the height of the tile. Fill Enlarges the donut to use the whole width of the tile. If you chose the fill option and show the legend, you can define the size of the legend with a slider. Show legend:
Allows you to show or hide the legend of the graph.
Display mode:
Allows you to switch between displaying absolute values or percentages.
Color palette:
Here you can choose between different color palettes.
Note: If there are more items than colors, the colors repeat from the beginning.
Tip for displaying priorities or health states: If you want to display priorities or health states from a data source that doesn't enrich the data with information about priority or health (like the SQL tile or external APIs), use the custom color option and map the results to the correct color. This way, you can make sure that healthy or low priority results are displayed in green, unhealthy or high priority results are displayed in red, etc. If you use the color palettes Priorities, Health1, or Health2 the colors get assigned depending on how the results are sorted, which doesn't guarantee that the colors make sense for the priority or state they represent.
General 10 different colors without specific meaning Priorities 5 different colors representing 5 different priority states Health1 3 different colors representing 3 different health states
(red=unhealthy, green=healthy, gray=unknown)Health2 4 different colors representing 4 different health states
(red=critical, orange=unhealthy, green=healthy, gray=unknown)Pastel 10 different pastel colors without specific meaning Blue 4 different shades of blue from dark to light Orange 4 different shades of orange from dark to light Green 4 different shades of green from dark to light Pink 4 different shades of pink from dark to light Custom Here you can choose colors and map them to a value.
Click on Select color... to select a color and enter the name of the value that you want to display in that color. Make sure you spell the value's name correctly (case-sensitive), otherwise the color won't be assigned to it.
Note if your color mapping doesn't work (color stays gray)If you entered the value's name correctly (case-sensitive) and your mapping still doesn't work, check if the mapping value contains leading or trailing spaces. Try to enter the value with and without those spaces. Alternatively, you can remove spaces from the mustache expression and enter the values without spaces.
Example:
Mustache expression with leading and trailing spaces in the values:
{{#if Status == "1" }} Healthy {{elseif Status == "2" }} Down {{elseif Status == "3" }} Warning {{/if}}
Mustache expression without spaces in the values:
{{#if Status == "1" }}Healthy{{elseif Status == "2" }}Down{{elseif Status == "3" }}Warning{{/if}}
Settings for Status IconsData mapping
Here you map the status information from your return data to the states of the status icons or blocks. Since every API returns data in a different format, you need to tell the tile where to find the status information and how to interpret it.
Important note if you are using properties with hyphens in the data mapping panelProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
State property:
Here you tell Dashboard Serverwhere to find the status information in the return data.
Use the mustache picker to select the property from your return data that contains the status information, for example{{status}}
.Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Defining custom states
If your return data doesn't contain a specific state property or you want to use your own categories, you can use JavaScript to define states. This allows you to take your return data and define something like "I want result x (number of open tickets, response time, etc.) to be considered as healthy, otherwise the result should be considered unhealthy."JavaScript examples for creating custom statesDefining simple custom states
Use case:
Your API returns data with a response time (for example, you monitor servers in Pingdom). You want a response time of over 500 ms to be considered as "Warning", anything else should be considered as "Ok".Copy{{lastresponsetime >= "500" ? "WARNING" : "OK" }}
Mapping:
Healthy
OK Warning
WARNING Result:
You'll see yellow blocks or icons when the response time is over 500 ms and green blocks or icons if the response time is below 500 ms. There will be no red icons or blocks since there is no mapping for "Critical". There will also be no gray blocks since there will be no "Unknown" state, because the return data will always be either below or over 500 ms.Displaying only results of a specific type
Use case:
Your API returns data with a type and a priority (for example, tickets in Zendesk). You only want to see high priority cases. You consider a case high priority when the two fields "type: problem" and "priority: normal" apply to the result. All other results should be ignored.Copy{{#if type == "problem" && priority == "normal"}}HIGHPRIORITY{{else}}IGNORE{{/if}}
Mapping:
Critical
HIGHPRIORITY The checkbox hide tiles where the state is unknown is activated.
Result:
You'll see red blocks for the cases you defined as high priority. You'll see no green, yellow, or gray blocks, since they have not been mapped and unknown states are hidden.Defining custom states based on multiple conditions
Use case:
Your API returns data with a state and a response time (for example, you monitor servers in Pingdom). You want to define states based on those criteria. If the status is "up", you consider it healthy as long as it is below 65 ms response time. If it is "up" and over 65 ms, you want it to be considered as "warning" in Dashboard Server (yellow block or icon). If the state in the response data is "warning" instead of "up", you also want it to be considered as "warning". If the state is "down", you want it to be "critical" in Dashboard Server.Copy{{status === 'up' && lastresponsetime < 65 ? 'Green' : status === 'up' && lastresponsetime > 65 ? 'Yellow' : status === 'warning' ? 'Yellow' : status === 'down' ? 'Red' : 'unknown'}}
Mapping:
Healthy
Green Warning
Yellow Critical
Red Result:
You'll see green blocks or icons (Healthy
) for results with the status "up" and a response time below 65 ms. If the status is "up" but the response time is above 65 ms, you'll see a yellow block or icon (Warning
).
If the status in the response data is "warning" instead of "up", you'll also see a yellow block, since you defined this also a yellow and yellow is mapped toWarning
.
If the status is "down", you'll see a red block (Critical
).
Any other results that don't fit in the categories you defined will be displayed as a gray block or icon (Unknown
).Tip: Since there are two possible causes for the
Warning
state, you want to be able to tell if the status or the response time caused the issue. Use a custom label or sublabel that shows you the status and the response time in your status icon or block to be able to see what caused the warning.Defining custom states with a date and time threshold
Use case:
Your API returns data with a date and time, as well as a type and a priority (for example, tickets in Zendesk). You want tickets of type problem with a normal priority to be acknowledged within 30 mins, which is why you want to see tickets older than 30 mins highlighted in yellow and older than 45 mins highlighted in red.Copy{{#if Date.now() - Date.parse(created_at) >= 1800000 && type == "problem" && priority == "normal" }}30MINS{{elseif Date.now() - Date.parse(created_at) >= 2700000 && type == "problem" && priority == "normal" }}45MINS{{else}}OK{{/if}}
Mapping:
Healthy
OK Warning
30MINS Critical
45MINS Result:
You'll see tickets that have been created today (Date.now()
), are older than 30 mins (1800000 ms
), and are of the typeproblem
with anormal
priority as yellow blocks or icons since you mapped 30MINS toWarning
. When those tickets are older than 45 mins (2700000
ms), they'll turn red since they are mapped tocritical
. All other tickets will be displayed as green blocks or icons because all other tickets fall into the OK category that is mapped toHealthy
.
There will be no gray (unknown
) blocks or icons since all tickets will fall into one of the custom states you defined.State mapping:
Here you tell Dashboard Serverhow you want the status information to be interpreted.
Map the values of the property from your return data to the states of the status icons or blocks. For example, when the{{status}}
property from your return data can have the valuesgood
,average
andbad
, your mapping would look like this:Healthy
good Warning
average Critical
bad Any value that is not mapped to a state will be interpreted as
unknown
.The mapped state values define the color of the status icons or blocks:
Healthy
green Warning
yellow Critical
red Unknown
gray
Link options
item link:
Allows you to turn the graph item(s) into links. You can either enter plain text to create a fixed link (URL always stays the same) or use dynamic properties to create a dynamic link.
Dynamic links make use of dynamic properties which are inserted as part of the URL. This creates a template URL that will be resolved to an actual URL based on the items properties.
For example, if you want to link to tickets in your ticket system and the format of the URL for tickets in your system is
https://www.my-system/ticket-123
, where123
is the ticket ID, you can use the dynamic property that contains the ticket ID and enter the dynamic URLhttps://www.my-system/ticket-{{ticketID}}
.For scalars, you can only use the dynamic property
value
in dynamic links, which means the link changes when the value of the scalar changes. Since a scalar is just one item, it would also make sense to use a fixed link, for example the link to the website of which you are displaying the response time.For status icon or bars and the rows of a grid, you usually want to use a dynamic link since you get multiple items or rows that represent different things. You can use any of the dynamic properties the mustache picker offers you.
Examples for URLs with dynamic properties for popular APIsDynamic mustache properties and values you need to change according to your instance are highlighted in bold.
ServiceNow incidents:
https://<your-instance>.service-now.com/nav_to.do?uri=%2Fincident.do%3Fsys_id%3D{{sys_id}}
PagerDuty incidents:
{{incident.html_url}}
Azure DevOps projects:
https://dev.azure.com/<your-instance>/{{name}}
Azure DevOps builds:
https://dev.azure.com/<your-instance>/_build/results?buildId={{id}}
Zendesk tickets:
https://<your-instance>.zendesk.com/agent/tickets/{{id}}
Azure Application Insights
https://portal.azure.com/#@squaredup.net/resource/{{ResourceId}}
Important note if you are using properties with hyphens in the link optionsProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Label
Allows you to change the label of the results.
name Choose this option if you want to use the default label that has been created automatically.
custom Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Sublabel
Allows you to add a sublabel of the results.
custom Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
none By default, no sublabels are shown. Sort
Sort allows you to change the order of the results displayed. You can also group them by their characteristics.
default By default, the sorting of the blocks or icons depends on the data source. This can be alphabetical sorting or the order in which data comes back from an API request.
sort by
Sort by label or health state, ascending or descending
group by Group by label or health state, ascending or descending
Image
Here you can choose one of the provided images or upload your own.
Tip: If you want a different selection of maps, you can download more at https://freevectormaps.com/Supported image formats: png, jpg, jpeg, gif, tif, tiff. svg, bmp
Tip: SVG images resize best since they are vector images.File size limit: 10MB
Image size: Images fill the size of the tile, which means you can resize the image by adjusting the tile's size. The size of the tile also depends on the screen the dashboard is being viewed on.
Icons
Here you can customize the icons on the image:
You can change the size of the icons with the slider
You can change the shape of the icons (square or circle)
You can drag the icons on the image into position
Display styles for Status icons
This setting is not done in a panel, you can change the display style even after you finished configuring the tile.
You can use toggle zoom button at the top right of the tile to change between the different ways Status icons can be displayed.
One long list Column list Icons only Settings for Status BlocksData mapping
Here you map the status information from your return data to the states of the status icons or blocks. Since every API returns data in a different format, you need to tell the tile where to find the status information and how to interpret it.
Important note if you are using properties with hyphens in the data mapping panelProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
State property:
Here you tell Dashboard Serverwhere to find the status information in the return data.
Use the mustache picker to select the property from your return data that contains the status information, for example{{status}}
.Note: If you don't use the mustache picker and type in your property yourself, make sure you add the mustache
{{}}
to the property name. Otherwise, you'll either get an error message or the property will be interpreted as a static value and be the same for every result.Defining custom states
If your return data doesn't contain a specific state property or you want to use your own categories, you can use JavaScript to define states. This allows you to take your return data and define something like "I want result x (number of open tickets, response time, etc.) to be considered as healthy, otherwise the result should be considered unhealthy."JavaScript examples for creating custom statesDefining simple custom states
Use case:
Your API returns data with a response time (for example, you monitor servers in Pingdom). You want a response time of over 500 ms to be considered as "Warning", anything else should be considered as "Ok".Copy{{lastresponsetime >= "500" ? "WARNING" : "OK" }}
Mapping:
Healthy
OK Warning
WARNING Result:
You'll see yellow blocks or icons when the response time is over 500 ms and green blocks or icons if the response time is below 500 ms. There will be no red icons or blocks since there is no mapping for "Critical". There will also be no gray blocks since there will be no "Unknown" state, because the return data will always be either below or over 500 ms.Displaying only results of a specific type
Use case:
Your API returns data with a type and a priority (for example, tickets in Zendesk). You only want to see high priority cases. You consider a case high priority when the two fields "type: problem" and "priority: normal" apply to the result. All other results should be ignored.Copy{{#if type == "problem" && priority == "normal"}}HIGHPRIORITY{{else}}IGNORE{{/if}}
Mapping:
Critical
HIGHPRIORITY The checkbox hide tiles where the state is unknown is activated.
Result:
You'll see red blocks for the cases you defined as high priority. You'll see no green, yellow, or gray blocks, since they have not been mapped and unknown states are hidden.Defining custom states based on multiple conditions
Use case:
Your API returns data with a state and a response time (for example, you monitor servers in Pingdom). You want to define states based on those criteria. If the status is "up", you consider it healthy as long as it is below 65 ms response time. If it is "up" and over 65 ms, you want it to be considered as "warning" in Dashboard Server (yellow block or icon). If the state in the response data is "warning" instead of "up", you also want it to be considered as "warning". If the state is "down", you want it to be "critical" in Dashboard Server.Copy{{status === 'up' && lastresponsetime < 65 ? 'Green' : status === 'up' && lastresponsetime > 65 ? 'Yellow' : status === 'warning' ? 'Yellow' : status === 'down' ? 'Red' : 'unknown'}}
Mapping:
Healthy
Green Warning
Yellow Critical
Red Result:
You'll see green blocks or icons (Healthy
) for results with the status "up" and a response time below 65 ms. If the status is "up" but the response time is above 65 ms, you'll see a yellow block or icon (Warning
).
If the status in the response data is "warning" instead of "up", you'll also see a yellow block, since you defined this also a yellow and yellow is mapped toWarning
.
If the status is "down", you'll see a red block (Critical
).
Any other results that don't fit in the categories you defined will be displayed as a gray block or icon (Unknown
).Tip: Since there are two possible causes for the
Warning
state, you want to be able to tell if the status or the response time caused the issue. Use a custom label or sublabel that shows you the status and the response time in your status icon or block to be able to see what caused the warning.Defining custom states with a date and time threshold
Use case:
Your API returns data with a date and time, as well as a type and a priority (for example, tickets in Zendesk). You want tickets of type problem with a normal priority to be acknowledged within 30 mins, which is why you want to see tickets older than 30 mins highlighted in yellow and older than 45 mins highlighted in red.Copy{{#if Date.now() - Date.parse(created_at) >= 1800000 && type == "problem" && priority == "normal" }}30MINS{{elseif Date.now() - Date.parse(created_at) >= 2700000 && type == "problem" && priority == "normal" }}45MINS{{else}}OK{{/if}}
Mapping:
Healthy
OK Warning
30MINS Critical
45MINS Result:
You'll see tickets that have been created today (Date.now()
), are older than 30 mins (1800000 ms
), and are of the typeproblem
with anormal
priority as yellow blocks or icons since you mapped 30MINS toWarning
. When those tickets are older than 45 mins (2700000
ms), they'll turn red since they are mapped tocritical
. All other tickets will be displayed as green blocks or icons because all other tickets fall into the OK category that is mapped toHealthy
.
There will be no gray (unknown
) blocks or icons since all tickets will fall into one of the custom states you defined.State mapping:
Here you tell Dashboard Serverhow you want the status information to be interpreted.
Map the values of the property from your return data to the states of the status icons or blocks. For example, when the{{status}}
property from your return data can have the valuesgood
,average
andbad
, your mapping would look like this:Healthy
good Warning
average Critical
bad Any value that is not mapped to a state will be interpreted as
unknown
.The mapped state values define the color of the status icons or blocks:
Healthy
green Warning
yellow Critical
red Unknown
gray
Link options
item link:
Allows you to turn the graph item(s) into links. You can either enter plain text to create a fixed link (URL always stays the same) or use dynamic properties to create a dynamic link.
Dynamic links make use of dynamic properties which are inserted as part of the URL. This creates a template URL that will be resolved to an actual URL based on the items properties.
For example, if you want to link to tickets in your ticket system and the format of the URL for tickets in your system is
https://www.my-system/ticket-123
, where123
is the ticket ID, you can use the dynamic property that contains the ticket ID and enter the dynamic URLhttps://www.my-system/ticket-{{ticketID}}
.For scalars, you can only use the dynamic property
value
in dynamic links, which means the link changes when the value of the scalar changes. Since a scalar is just one item, it would also make sense to use a fixed link, for example the link to the website of which you are displaying the response time.For status icon or bars and the rows of a grid, you usually want to use a dynamic link since you get multiple items or rows that represent different things. You can use any of the dynamic properties the mustache picker offers you.
Examples for URLs with dynamic properties for popular APIsDynamic mustache properties and values you need to change according to your instance are highlighted in bold.
ServiceNow incidents:
https://<your-instance>.service-now.com/nav_to.do?uri=%2Fincident.do%3Fsys_id%3D{{sys_id}}
PagerDuty incidents:
{{incident.html_url}}
Azure DevOps projects:
https://dev.azure.com/<your-instance>/{{name}}
Azure DevOps builds:
https://dev.azure.com/<your-instance>/_build/results?buildId={{id}}
Zendesk tickets:
https://<your-instance>.zendesk.com/agent/tickets/{{id}}
Azure Application Insights
https://portal.azure.com/#@squaredup.net/resource/{{ResourceId}}
Important note if you are using properties with hyphens in the link optionsProperty names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Label
Allows you to change the label of the results.
name Choose this option if you want to use the default label that has been created automatically.
custom Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
Sublabel
Allows you to add a sublabel of the results.
custom Here you can change the label to a custom label. You can use static text and dynamic properties. Use the mustache picker to select dynamic properties from the response data to use them as labels.
For more information see How to use Custom Labels
Important note if you are using external API properties with hyphens for custom labels (Web API tile, Elasticsearch tile, Splunk tile)Property names that contain hyphens (for example
properties.name-with-hyphens
) can't be processed due to a JavaScript limitation. If you want to use a property that contains a hyphen, you have two options:If you have access to the data source and can change the name of the property, change the name of the property to a name without hyphens.
For example, if your Elasticsearch query uses a property (an aggregation, a grouping or any other property you want to use) with a name that contains a hyphen, you can either access your Elasticsearch instance and change the name there or you can overwrite the name in the query dsl field.
If you can't change the name of the property, you need to enter the property name in the following format:
Original property name:
{{properties.name-with-hyphens.value}}
New format:
{{properties['name-with-hyphens'].value}}
none By default, no sublabels are shown. Sort
Sort allows you to change the order of the results displayed. You can also group them by their characteristics.
default By default, the sorting of the blocks or icons depends on the data source. This can be alphabetical sorting or the order in which data comes back from an API request.
sort by
Sort by label or health state, ascending or descending
group by Group by label or health state, ascending or descending
Blocks
Here you can set the number of columns for the blocks, their height and the font size within the blocks.
Click done to save the tile.
The tile now shows data according to your settings.
Paging and limiting the results size
One thing to keep in mind when making queries is that the Web API tile does not support request paging. Some APIs will not return all the query results in a single request (say limiting each request to only 100 items), and require the user to make multiple subsequent requests to get the entire results set. Since there is no standard way of doing this, we are currently unable to support it.
This may mean your tile is only able to display the most recent results, and may be an issue if you are say trying to query for every incident in the system and display a donut showing the counts of incidents in each status. To avoid this, if you need to display summaries either query API endpoints that provide summarised information for you, or make sure you indicate in the tile name/description that this may be only recent results.
If your API does not page requests and instead can return large datasets in a single request, consider adding limits to your query if the API supports it. If your query returns 10,000 results, you may experience a tile that takes a long time to load and display data. Don't show data for all time when the last 30 days will do!
Custom code tips and examples for the Web API tile
Where to use this code:
You can use this code in Web API tiles for the Donut or Bar Graph visualization.
Open the Data Mapping panel, set the data aggregation to count and enter this code in the Grouping field.
When to use this code:
Let's say you want to group by the field status
but aren't happy with the names of the field values. In this example, the values for status
are 1,2, and 3 which doesn't tell your users much about the meaning of those values. With this code you can rename them to warning, critical, and healthy to make the values easier to understand:
{{#if status === 1}}Warning{{elseif status === 2}}Critical{{elseif status === 3}}Healthy{{else}}Unknown{{/if}}
If your field values are not numeric values but strings, you need to wrap them like this:
{{#if status === "Status A"}}Warning{{elseif status === "Status B"}}Critical{{elseif status === "Status C"}}Healthy{{else}}Unknown{{/if}}
Walkthrough: Configuring the Web API tile to show a JSON placeholder example
http://jsonplaceholder.typicode.com/
is a JSON REST API used for testing services and this example demonstrates how you would retrieve data from this API and show it using Dashboard Server.
- Browse to
http://jsonplaceholder.typicode.com/posts
The data shown is a list of posts which we can show in Dashboard Server as a table. - Create a new dashboard and click on the Web API tile.
- Select Web API (Grid) and click next.
- Leave the scope as it is and click next.
- Select generic from the drop down list for the provider, and click next.
Paste the web address from step 1 into the URL box.
For help customizing the columns of data see How to use the Grid Designer
- Click done.
The data from the external API is now shown in Dashboard Server.
It is important to note that this data will refresh along with the rest of your dashboard and is great for showing tabular data such as a list of open support tickets or configuration changes.