Overview
If you want to generate links pointing to Turnilo’s view from external systems you can do so by posting view definition to /mkurl
or <serverRoot>/mkurl
endpoint and appending returned hash
property to the base URI of Turnilo instance.
The view definition can be acquired by clicking “Display view definition” in the settings menu in the top-right corner.
The post body must include 3 keys:
dataCubeName (string)
The dataCube name to be used in the link.
viewDefinitionVersion (ViewDefinitionVersion)
The version of the view definition passed for url generation. Currently supported versions: “2”, “3”, “4”.
viewDefinition (ViewDefinition3 | Essence)
The JSON view definition that describes the state of the Turnilo view. Currently, the latest and greatest view definition structure is “ViewDefinition4”. Be aware that older versions are kept for backwards compatibility only and will be removed at some point.
Examples
Here are a few examples that you can try out by yourself. All the examples run on the built-in example dataset that comes with Turnilo.
To follow along please start Turnilo in --examples
mode like so:
turnilo --examples
Each example can be ‘run’ using curl like so:
curl -X POST --header "Content-Type:application/json" --data '
{
"dataCubeName": "wiki",
"viewDefinitionVersion": "3",
"viewDefinition": {
...
}
}
' localhost:9090/mkurl
Returned hash
property value needs to be appended to http://localhost:9090/
base URI in this example instance to produce a complete URI.
Example 1
Here is an example that will show the totals
visualization filtered on 2015-09-10Z
- 2015-09-20Z
with count
and added
metrics selected, the page
dimension pinned.
{
"dataCubeName": "wiki",
"viewDefinitionVersion": "3",
"viewDefinition": {
"visualization": "totals",
"timezone": "Etc/UTC",
"filters": [
{
"type": "time",
"ref": "time",
"timeRanges": [
{
"start": "2015-09-10Z",
"end": "2015-09-20Z"
}
]
}
],
"splits": [],
"measures": {
"isMulti": true,
"single": "count",
"multi": [ "count", "delta", "added", "deleted" ]
},
"pinnedDimensions": [ "page" ],
"pinnedSort": "count"
}
}
Posting this will produce:
{
"hash": "#wiki/3/N4IgbglgzgrghgGwgLzgFwgewHYgFwhqZqJQgA0hEAtgKbI634gCiaAxgPQCqAKgMIUQAMwgI0tAE5k8AbVBoAngAcmBDHSGTaw5hqaV9AJTjYA5rRnyQUEpLTMATAAYAjAFYAtM4Ccn1868zs54waHOAHTBzgBaQrTYACZObl6+ni5BIWHBUcFxAL4AusWUUMpIaFZFlHRwsNoyoNAAsjDiEPhokjC0ZRDmCGog7Jgw2A617Rj4siNjE0KJtOJwQnCJy8mUy0MSySWUygPYtIkAIjQJUFjYViDKcBYgNQ8nZwDKmPbMo+OTICGFiS+FAiSud1uvwAFqZTgghGBEL0miBnMwEkJXMwIA4CpRYVAAHLtBF4YSkWj4kDQiBmaFIekOPDYUkFIA"
}
Example 2
Here is an example that will display the line-chart
visualization filtered on: the last 1 day of data (P1D
), comment lengths not between 20 and 30, and city name being one of “London” or “Rome”, split on channel
and time
(bucketed by hour - PT1H
) with count
measure selected. Additionally, “Is Robot” dimension is pinned, channels: “en” and “it” are the only visible plots on a line chart and a period between 12pm and 1pm is highlighted on a graph.
{
"dataCubeName": "wiki",
"viewDefinitionVersion": "3",
"viewDefinition": {
"visualization": "line-chart",
"timezone": "Etc/UTC",
"filters": [
{
"type": "time",
"ref": "time",
"timePeriods": [
{
"duration": "P1D",
"type": "latest",
"step": -1
}
]
},
{
"type": "number",
"ref": "commentLength",
"ranges": [
{
"start": 20,
"end": 30,
"bounds": "[)"
}
],
"not": true
},
{
"type": "string",
"ref": "cityName",
"action": "in",
"values": [
"London",
"Rome"
],
"not": false
}
],
"splits": [
{
"type": "string",
"dimension": "channel",
"sort": {
"ref": "delta",
"direction": "descending"
}
},
{
"type": "time",
"dimension": "time",
"granularity": "PT1H",
"sort": {
"ref": "time",
"direction": "ascending"
}
}
],
"measures": {
"isMulti": true,
"single": "count",
"multi": [ "count" ]
},
"pinnedDimensions": [ "isRobot" ],
"pinnedSort": "count",
"legend": {
"dimension": "channel",
"values": {
"0": "en",
"1": "it"
},
"hasNull": false
},
"highlight": {
"owner": "line-chart",
"filters": [
{
"type": "time",
"ref": "time",
"timeRanges": [
{
"start": "2015-09-12T12:00:00.000Z",
"end": "2015-09-12T13:00:00.000Z"
}
]
}
],
"measure": "count"
}
}
}
Posting the above view definition will produce:
{
"hash": "#wiki/3/N4IgbglgzgrghgGwgLzgFwgewHYgFwhLYCmAtAMYAWcATmiADQgYC2xyOx+IAomuQHoAqgBUAwoxAAzCAjTEaUfAG1QaAJ4AHLgVZcmNYlO57JegAoKsAEyV5VIazBrosuAuYCMAETNadhOjEUPRMIcSa+KSeAL4AujEMav7c2DAsAEYKkobGBOSYLGzYaAAyxNgA5miUktiY9HhoNDDEBnBVwSqgIbSNAEwADEwV1vgAzMMgGZgw2LbcygCUIPGJydrcITQQVTlG3OQQGgBycGyScOQYONy7kmCIrXbKIKU41rdMAEqFXHFMeqNKSIKDEeJhTRINAvDYBba7SqSawQYpQNyHajYEgISRQTB0fCgXLcazEORwZEQQzXDEEMlQcijRGrJhIFjHfBpBAIdbMFK6VH6RxC7Do26Ci5MSoubm0Y7qbjmESeAASeIJjWJB0lwpRNJu7hAcEZzL2iUIqM5eG5vIBIDYJucXTwoGgAFkYHIIPhmq0woiEAECnNQg6vRgVCAQyUQAkmJpdiRrN5ReKxVHoL8ZvR7YnscRrABlTWHWaxtnESqjIkitF06NYnEPJ4u0CDbgVSSeO70C3UKAnL24vAghBg/sQSqUJDTrUgTAAdxING4RDIVD6khkcgUsP5m11+zyzCFZiF3w61f3vUJBCGngArKRBgBOaL9FX9PCDQY/wYAHS/oMABakg1vegxPi+76eJ+njjP+/5Ab+YFrPajqwIYZahqsMRAA"
}