Web Query Functions
Overview
These functions execute an HTTP request to an external web service and return a WebRequestResult
response object for further processing.
Reference
queryConfig
queryConfig(string name, map params) response
Executes an HTTP request using a predefined outgoing webhook, identified by name
(case-sensitive) and returns a WebRequestResult
response object.
The webhook name
must be listed as enabled
on the Alerts > Outgoing Webhooks page.
Parameters and placeholders defined in the webhook are replaced using the input map params
.
Available parameters for webhook types are enumerated here.
Content Type is Form
The form-based webhook defines parameters that can be modified in the rule editor.
The values for such parameters are retrieved from the input map params
. Unknown parameters in map params
are ignored.
queryConfig("rc-hook",
["channel": "devops", "repository": "atsd-site"]
)
The target URL receives the following payload sent as application/x-www-form-urlencoded
:
channel=devops&repository=atsd-site
Content Type is JSON
The JSON document defined in the webhook can include placeholders using ${name}
syntax.
Such placeholders are substituted with corresponding parameter values from the input map params
. Unknown parameters in the map params
are ignored.
queryConfig("rc-hook",
["channel": "devops", "repository": "atsd-site"]
)
The target URL receives the following JSON payload sent as application/json
:
{
"channel": "devops",
"repository": "atsd-site"
}
queryGet
queryGet(string url, map config) response
Executes a GET
request to the specified request URL url
and returns a WebRequestResult
response object.
The configuration map config
can contain the following fields:
headers
: Map of request headers keys and values.params
: Map of request parameters appended to query string.ignoreSsl
: Boolean field that controls SSL certificate validation. Default istrue
.
queryGet("https://ipinfo.io/1.1.1.1/json").content
queryPost
queryPost(string url, map config) response
Executes a POST
request to the specified request URL url
and returns a WebRequestResult
response object.
The configuration map config
can contain the following fields:
contentType
: Content type of the request. Default isapplication/json
.content
: Request body text.headers
: Map of request headers keys and values.params
: Map of request parameters.ignoreSsl
: Boolean field that controls SSL certificate validation. Default istrue
.
The request payload can be specified using either content
text or params
map.
The params
map is serialized into a JSON document if content type is application/json
. Otherwise the map is converted to URL-encoded form format.
JSON content type:
queryPost(_url,
["params": ["repository": "atsd-site", "channel": "devops"]]
)
Payload:
{ "repository": "atsd-site", "channel": "devops" }
Form content type:
queryPost(_url, [
"contentType": "application/x-www-form-urlencoded",
"params": ["repository": "atsd-site", "channel": "devops"]
])
Payload:
repository=atsd-site&channel=devops
Request URL
The request URL consists of scheme (HTTP/HTTPS), optional user credentials, hostname, port, and path with query string.
scheme:[//[username:password@]host[:port]][/path][?query]
Examples:
https://john.doe:secret@192.0.2.9:8443/service?load=true
https://api.slack.com/sendMessage
Response Object
Field | Type | Description |
---|---|---|
content | string | Response body text. |
status | integer | HTTP status code, such as 200 OK or 401 NOT FOUND . |
headers | map | Response headers. Header values with the same name are separated by a comma. |
duration | long | Time, in milliseconds, between initiating a request and downloading the response. |
reasonPhrase | string | Status line such as OK . |
contentType | string | Response content type, such as application/json . |
WebRequestResult(
content={
"ip": "8.8.8.8",
"country": "US",
"org": "Example"
},
status=200,
headers={
Content-Type=application/json; charset=utf-8,
Access-Control-Allow-Origin=*,
Transfer-Encoding=chunked
},
duration=225,
reasonPhrase=OK,
contentType=application/json; charset=utf-8
)
Response object can be introspected using the printObject
function.
printObject(queryPost({}))
+--------------+---------------------------------------------------------+
| Name | Value |
+--------------+---------------------------------------------------------+
| class | class |
| | com.axibase.tsd.model.notifications.WebRequestResult |
| content | {"success":true} |
| contentType | application/json |
| duration | 133 |
| headers | {Access-Control-Allow-Headers=Origin, X-Requested-With, |
| | Content-Type, Accept, Access-Control-Allow-Origin=*, |
| | Cache-Control=no-store, Content-Type=application/json, |
| | Date=Wed, 18 Apr 2018 14:23:56 GMT, Pragma=no-cache, |
| | Server=Caddy, Vary=Accept-Encoding, |
| | X-Instance-Id=gz6wtH9rkYaJpju99} |
| reasonPhrase | OK |
| status | 200 |
+--------------+---------------------------------------------------------+
Examples
Send Request to a Webhook
Posts message to an Incoming Webhook in Rocket.Chat.
queryPost("https://chat_server:3000/hooks/1A1AbbbAAAa1bAAAa/xox-token", [
"params": ["channel": "#devops", "text": "Hello from ATSD!"]
])
Request payload:
{"channel":"#devops","text":"hello world"}
Post Message using REST API
Posts message to Rocket.Chat group using sendMessage
REST API method.
queryPost("https://chat_server:3000/api/v1/chat.sendMessage", [
"headers":[
"X-Auth-Token": "botUserToken",
"X-User-Id": "botUserId"
],
"params": [
"message": [ "rid": "GENERAL", "msg": "Hello, Rocket.Chat"]
]
])
Response content
:
{
"message": {
"rid": "GENERAL",
"msg": "Hello, Rocket.Chat",
"ts": "2018-04-24T11:31:45.728Z",
"alias": "ATSD BOT",
"u": {
"_id": "userId",
"username": "atsd_bot",
"name": "ATSD BOT"
},
"unread": true,
"mentions": [],
"channels": [],
"_updatedAt": "2018-04-24T11:31:45.731Z",
"_id": "messageId"
},
"success": true
}
Execute a GraphQL Query
Retrieves results of a GitHub GraphQL query.
queryPost("https://api.github.com/graphql", [
"headers": ["Authorization" : "bearer TOKEN"],
"params": [
"query": "{ user(login:\"octocat\") { name login websiteUrl bio company createdAt location organizations(first: 1) {nodes { name loginlocation description websiteUrl url }}}}"
]
])
Response content
:
{
"data": {
"user": {
"name": "The Octocat",
"login": "octocat",
"websiteUrl": "http://www.github.com/blog",
"bio": null,
"company": "GitHub",
"createdAt": "2011-01-25T18:44:36Z",
"location": "San Francisco",
"organizations": {
"nodes": []
}
}
}
}
Display Text Content
queryGet("https://ipinfo.io/1.1.1.1/json").content
Response content
:
{
"city": "Melbourne",
"location": {
"latitude": -37.7,
"longitude": 145.1833
},
"ip": "1.1.1.1"
}
Convert JSON response to a flat structure
flattenJson(queryGet("https://ipinfo.io/1.1.1.1/json").content)
[
"city" : "Melbourne",
"location.latitude" : -37.7,
"location.longitude" : 145.1833,
"ip" : "1.1.1.1"
]
Display field values in the JSON response in a compact format
concatLines(flattenJson(queryGet("https://ipinfo.io/1.1.1.1/json").content).values())
Melbourne
-37.7
145.1833
1.1.1.1